* Initial work on rapl-daemon. Initial server set up. API to read max power per zone and API to write new power cap have both been written.
* Removing python script since this has been ported to go code now.
* Adding test for happy path retrieving max power.
* Change some data types around to avoid too much conversion.
* Add happy path test for cap zone
* Removing uncessary print statement.
* Change cap node to use a temporary setup.
* Renaming arguments to be more descriptive.
* Changing todo message.
* Changing test structure to only set up mock subsystem once and allowing functions to test on it later.
* Adding some more coverage for unhappy paths and fixing some values to reflect they are no longer floats.
* Keeping the old script around as it should be removed in a different PR.
* Delegating percentage check to capNode function.
* Fixing typo.
* Fixing typos.
* Changing shortWindow to longWindow as constraint_0 actually points to the long window.
* Renaming variable in test.
* capping funciton now returns which zones were sucessfully capped and which zones could not be capped. This information is now returned to the caller of the HTTP api.
switch to logrus for logging.
replaced old logging library with a wrapper around logrus.
We now just need to use the exported Log(...) and Logf(...) from the logging/
package that wraps around a set of loggers constituting a chain (following COR).
Loggers are configured using a YAML file that specifies the following.
1. enabled/disabled
2. whether the message should be logged on console.
3. filename extension.
4. minimum log level.
Retrofitted source code to now use the updated logging library.
Updated the documentation with information regarding the specification
of the log config file.
Currently, the log format in the config file is not adhered to. This is going to be
addressed in a future commit.
Added a utility to help with validating structs. This utility accepts
validators and runs them. If any of the validators fail, then the
error is wrapped with a given base message and returned.
Added validators for checking different attributes of a task
definition.
Added test code to test task validators.
Retrofitted scheduler.go to just log the task validation error and
terminate. If task validation does not report any error, then the
tasks are provided to the scheduler and elektron registers itself
with Mesos.
refact imports to github.xxx. update go.mod + go.sum
* removed vendor/ folder
* Added vendor/ submodule.
Moved dependencies that need to be vendored into separate repository.
- https://github.com/spdfg/elektron-vendor
Added vendor/ as a submodule using the below command.
- git submodule add https://github.com/spdfg/elektron-vendor vendor
If wanting to use vendor, run the following commands after cloning
elektron.
1. git submodule init
2. git submodule update
* added instructions to clone vendor/ submodule.
* updated module to spdfg. Refactored imports
Added unit tests to test code in def/ module.
Currently, AverageNodePowerHistory(...) assumes that the DRAM power
readings are being monitored. In addition, it also assumes that the
host servers are dual socket machines. However, this assumption might
not always hold true. Thus, added a TODO to fix this.
Added support for dependency management using go modules.
Note that Go version 1.11+ is required if using go modules for
dependency management.
Updated the gitlab CI yaml file to use go modules instead of copying
everything to GOPATH. Ran go mod download before running build script to
download all dependencies into cache.
Initialization of the logger happens after all the command-line
arguments are validated. So, in case any of the command-line
arguments were invalid, the log directory is not created.
Retrofitted the driver code and the scheduler builder to only use
the language provided 'log' package as elektron's logger will not
yet be initialized.
Updated point in Usage section to indicate that power capping policies
are pluggable.
Mentioned that it is possible to plug in power capping policies.
Added the commandline option as well.
Degree of collocation logger (or task share variance logger) was
only present in pcp.go. Copied that code into extrema and prog-extrema.
Also, exposed visibility of pcp/utils.go#cpuUtilsPerNode(...) and
pcp/utils.go#memUtilsPerNode(...) to public.