Elektron is a lightweight, power-aware, pluggable Mesos framework that behaves as a playground to experiment with different scheduling policies to schedule ad-hoc jobs in docker containers.
This repository has been archived on 2024-04-10. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
Find a file
2017-08-26 15:39:45 -04:00
constants Removed the hardcoded nodes and their powerclasses from the PowerClasses map as now it will populated dynamically 2017-03-24 16:25:24 -04:00
def changed def.TaskSorter(...) to def.SortTasks(...) for semantics. Now, def.SortTasks(...) also sorts the tasks instead of returning just a func (i, j int) bool {}. Removed TODO from the README associated with this PR 2017-08-26 15:39:45 -04:00
pcp Got rid of commented code 2017-03-24 17:28:53 -04:00
powerCapping Changed the loop as the Hosts is now a map and not a list and now looping over the keys is required. 2017-03-23 22:03:03 -04:00
rapl changed the type of percentage in rapl.Cap(...) from int to float64. Retrofitted power-capping strategies to cap using a float64 value instead of an int. Moved common functions in loganddynamiccap.go and logAndProgressiveExtrema.go into pcp/utils.go. New power-capping strategy that builds on top of extrema, where it caps the victims at different until it can't cap further, in which case it starts uncapping them in the reverse order of capping. 2017-02-15 19:22:56 -05:00
schedulers Moved the TODO, for the refinement of the cluster sorting algorithm, to the main README file. 2017-08-22 13:09:05 -04:00
utilities Removed the import statement which was importing offerUtils from electron-archive. This results in build failure is electron-archive is a local package 2017-03-25 21:11:24 -04:00
config basic configuration for pcp 2016-12-22 22:58:58 -05:00
README.md changed def.TaskSorter(...) to def.SortTasks(...) for semantics. Now, def.SortTasks(...) also sorts the tasks instead of returning just a func (i, j int) bool {}. Removed TODO from the README associated with this PR 2017-08-26 15:39:45 -04:00
scheduler.go fixed indentation 2017-08-22 12:56:36 -04:00
workload_sample.json Adding node class mapping for Watts as a resource in binpack 2016-12-23 21:04:15 -05:00

Electron: A power budget manager

To Do:

  • Create metrics for each task launched [Time to schedule, run time, power used]
  • Have calibration phase?
  • Add ability to use constraints
  • Running average calculations https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average
  • Make parameters corresponding to each scheduler configurable (possible to have a config template for each scheduler?)
  • Adding type of scheduler to be used, to be picked from a config file, along with it's configurable parameters.
  • Write test code for each scheduler (This should be after the design change) Possible to setup the constants at runtime based on the environment?
  • Log fix for declining offer -- different reason when insufficient resources as compared to when there are no longer any tasks to schedule.
  • Have a centralised logFile that can be filtered by identifier. All electron logs should go into this file.
  • Make def.Task an interface for further modularization and flexibility.
  • Convert def#WattsToConsider(...) to be a receiver of def.Task and change the name of it to Watts(...).
  • Critical -- Add software requirements to the README.md (Mesos version, RAPL version, PCP version, Go version...)
  • Critical -- Retrofit to use Go 1.8 sorting techniques. Use def/taskUtils.go for reference.
  • Handle powerclass not configured on a node condition. As of now, an assumption is made that the powerclass is configured
  • Refine the sorting algorithm that sorts the clusters of tasks retrieved using the kmeans algorithm. This also involves the reduction in time complexity of the same.
  • Use the generic task sorter in def/taskUtils.go to sort the tasks based on CPU or RAM etc. Remove the existing sorters present in def/task.go. for all the nodes.

Requires Performance Co-Pilot tool pmdumptext to be installed on the machine on which electron is launched for logging to work and PCP collector agents installed on the Mesos Agents

How to run (Use the --help option to get information about other command-line options):

./electron -workload <workload json>

To run electron with Watts as Resource, run the following command,

./electron -workload <workload json> -wattsAsAResource

Workload schema:

[
   {
      "name": "minife",
      "cpu": 3.0,
      "ram": 4096,
      "watts": 63.141,
      "class_to_watts": {
        "A": 93.062,
        "B": 65.552,
        "C": 57.897,
        "D": 60.729
      },
      "image": "rdelvalle/minife:electron1",
      "cmd": "cd src && mpirun -np 3 miniFE.x -nx 100 -ny 100 -nz 100",
      "inst": 10
   },
   {
      "name": "dgemm",
      "cpu": 3.0,
      "ram": 32,
      "watts": 85.903,
      "class_to_watts": {
        "A": 114.789,
        "B": 89.133,
        "C": 82.672,
        "D": 81.944
      },
      "image": "rdelvalle/dgemm:electron1",
      "cmd": "/./mt-dgemm 1024",
      "inst": 10
   }
]