spdfg / elektron

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.
GNU General Public License v3.0
4 stars 3 forks source link

Elektron: A Pluggable Mesos framework with power-aware capabilities

build and test

Elektron is a Mesos framework that behaves as a playground to experiment with different scheduling policies to schedule ad-hoc jobs in docker containers. It is designed as a lightweight, configurable framework, which can be used in conjunction with built-in power-capping policies to reduce the peak power and/or energy usage of co-scheduled tasks.

However, in addition to being a scheduler, Elektron also takes advantage of tools such as Performance Co-Pilot and RAPL to help contain the power envelope within defined thresholds, reduce peak power consumption, and also reduce total energy consumption. Elektron is able to leverage the Mesos-provided resource abstraction to allow different algorithms to decide how to consume resource offers made by a Mesos Master.

Architecture

Elektron is comprised of three main components: Task Queue, Scheduler and Power Capper.

Published Research using Elektron

Note: Elektron was previously known as Electron. We decided to change the name of the framework to avoid confusion with other projects named Electron.

Features

Logs

Please go through the log info to get information on different data that are logged.

Software Requirements

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

Compatible with the following versions:

Downloading Dependencies

Go Modules can now be used for dependency management. To download the dependencies, run the below command.

go mod download

Note that you would require Go version 1.11+ to be able to use go modules.

If vendoring dependencies, then use the below commands after cloning elektron.

  1. git submodule init
  2. git submodule update

An alternative is to clone elektron using the command git clone --recurse-submodules git@github.com:spdfg/elektron.git.

Build and Run

Compile the source code using the go build tool as shown below.

go build -o elektron

Use the -h option to get information about other command-line options.

Workload

Use the -workload option to specify the location of the workload json file. Below is an example workload.

[
   {
      "name": "minife",
      "cpu": 3.0,
      "ram": 4096,
      "watts": 63.141,
      "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,
      "image": "rdelvalle/dgemm:electron1",
      "cmd": "/./mt-dgemm 1024",
      "inst": 10
   }
]
./elektron -master <host:port> -workload <workload json>

Use the -logPrefix option to provide the prefix for the log file names.

Plug-in Power Capping

Elektron is also capable of running power capping policies along with scheduling policies.

Use the -powercap option with the name of the power capping policy to be run.

./elektron -master <host:port> -workload <workload json> -powercap <powercap policy name>

If the power capping policy is Extrema or Progressive Extrema, then the following options must also be specified.

Plug-in Scheduling Policy

Use the -schedPolicy option with the name of the scheduling policy to be deployed.
The default scheduling policy is First Fit.

./elektron -master <host:port> -workload <workload json> -schedPolicy <sched policy name>

Note: To obtain the list of possible scheduling policy names, use the -listSchedPolicies option.

Enable Scheduling Policy Switching

Use the -switchSchedPolicy option to enable scheduling policy switching.

One needs to also provide a scheduling policy configuration file (see schedPolConfig for reference).
Use the -schedPolConfig option to specify the path of the scheduling policy configuration file.

./elektron -master <host:port> -workload <workload json> -switchSchedPolicy -schedPolConfig <config file>

The following options can be used when scheduling policy switching is enabled.