From 9886c53a7c96415d4f306b273ed004f6bd814cdb Mon Sep 17 00:00:00 2001 From: Valentin Reis Date: Thu, 29 Oct 2020 22:06:43 -0500 Subject: [PATCH 1/2] [refactor] Improving python upstream layer, tutorial notebooks. --- .gitignore | 1 + examples/nrmd/control.json | 2 +- examples/nrmd/control.yaml | 2 +- notebooks/configuration.ipynb | 635 +++++++----- notebooks/internal-control.ipynb | 1006 ------------------ notebooks/tutorial.ipynb | 1628 ++++++++++++++++-------------- pynrm/nrm/tooling.py | 234 ++--- shell.nix | 2 +- tests/example-test.sh | 4 +- 9 files changed, 1383 insertions(+), 2131 deletions(-) delete mode 100644 notebooks/internal-control.ipynb diff --git a/.gitignore b/.gitignore index 5c26e73..280453d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ _build +.mypy* .Rhistory tmp .build diff --git a/examples/nrmd/control.json b/examples/nrmd/control.json index 4985b1e..fdfd73d 100644 --- a/examples/nrmd/control.json +++ b/examples/nrmd/control.json @@ -1,5 +1,5 @@ { - "activeSensorFrequency": { + "passiveSensorFrequency": { "hertz": 1 }, "controlCfg": { diff --git a/examples/nrmd/control.yaml b/examples/nrmd/control.yaml index e8ba691..7eddac6 100644 --- a/examples/nrmd/control.yaml +++ b/examples/nrmd/control.yaml @@ -1,4 +1,4 @@ -activeSensorFrequency: +passiveSensorFrequency: hertz: 1 controlCfg: hint: Full diff --git a/notebooks/configuration.ipynb b/notebooks/configuration.ipynb index f5f9b76..73e3a48 100644 --- a/notebooks/configuration.ipynb +++ b/notebooks/configuration.ipynb @@ -42,282 +42,439 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "`nrmd`'s configuration can be defined in the json/yaml/[Dhall](https://dhall-lang.org/) formats. Admissible values are defined in file [resources/configurationSchema.json](./resources/configurationSchema.json), and alternatively available as a Dhall type in [resources/types/Cfg.dhall](resources/types/Configuration.dhall). Schema files get large, so the next cells shows the Dhall Configuration type as a more readable alternative." + "`nrmd`'s configuration can be defined in the json/yaml/[Dhall](https://dhall-lang.org/) formats. Admissible values are defined in file [hsnrm/hsnrm/dhall/types/nrmd.dhall](hsnrm/hsnrm/dhall/types/nrmd.dhall)." ] }, { "cell_type": "code", - "execution_count": 3, - "metadata": {}, + "execution_count": 19, + "metadata": { + "scrolled": false + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{ activeSensorFrequency =\n", - " { fromHz = 1.0 }\n", - ", argo_nodeos_config =\n", - " \"argo_nodeos_config\"\n", - ", argo_perf_wrapper =\n", - " \"nrm-perfwrapper\"\n", - ", controlCfg =\n", - " < ControlCfg :\n", - " { hint :\n", - " < Full\n", - " | Only :\n", - " { only :\n", - " List (List { actuatorID : Text, actuatorValue : Double })\n", - " }\n", - " >\n", - " , learnCfg :\n", - " < Contextual :\n", - " { contextual : { horizon : Integer } }\n", - " | Lagrange :\n", - " { lagrange : Double }\n", - " | Random :\n", - " { random : Optional Integer }\n", - " >\n", - " , minimumControlInterval :\n", - " { fromuS : Double }\n", - " , referenceMeasurementRoundInterval :\n", - " Integer\n", - " , speedThreshold :\n", - " Double\n", - " , staticPower :\n", - " { fromuW : Double }\n", - " }\n", - " | FixedCommand :\n", - " { fixedPower : { fromuW : Double } }\n", - " >.FixedCommand\n", - " { fixedPower = { fromuW = 2.5e8 } }\n", - ", downstreamCfg =\n", - " { downstreamBindAddress = \"ipc:///tmp/nrm-downstream-event\" }\n", - ", dummy =\n", - " True\n", - ", hwloc =\n", - " \"hwloc\"\n", - ", hwmonCfg =\n", - " { hwmonEnabled = True, hwmonPath = \"/sys/class/hwmon\" }\n", - ", libnrmPath =\n", - " None Text\n", - ", logfile =\n", - " \"/tmp/nrm.log\"\n", - ", nodeos =\n", - " False\n", - ", perf =\n", - " \"perf\"\n", - ", pmpi_lib =\n", - " \"pmpi_lib\"\n", - ", raplCfg =\n", - " Some\n", - " { raplActions =\n", - " [ { fromuW = 1.0e8 }, { fromuW = 2.0e8 } ]\n", - " , raplPath =\n", - " \"/sys/devices/virtual/powercap/intel-rapl\"\n", - " , referencePower =\n", - " { fromuW = 2.5e8 }\n", - " }\n", - ", singularity =\n", - " False\n", - ", slice_runtime =\n", - " < Dummy | Nodeos | Singularity >.Dummy\n", - ", upstreamCfg =\n", - " { pubPort = +2345, rpcPort = +3456, upstreamBindAddress = \"*\" }\n", - ", verbose =\n", - " < Debug | Error | Info >.Error\n", - "}\n" + "-- ******************************************************************************\n", + "-- Copyright 2019 UChicago Argonne, LLC.\n", + "-- (c.f. AUTHORS, LICENSE)\n", + "--\n", + "-- SPDX-License-Identifier: BSD-3-Clause\n", + "-- ******************************************************************************\n", + "--\n", + "-- types used by nrmd's configuration.\n", + "--\n", + "--\n", + "let types =\n", + " -- This import defines a few base types that are common to manifest and\n", + " -- configuration formats.\n", + " ./types.dhall\n", + "\n", + "let Verbosity =\n", + " -- Daemon verbosity:\n", + " -- Error: Only report errors\n", + " -- Info: Be verbose\n", + " -- Debug: Report all that can possibly be reported\n", + " < Error | Info | Debug >\n", + "\n", + "let SensorBehavior =\n", + " -- Sensor Behavior.\n", + " -- IntervalBased: a sensor that measures an average value for the time\n", + " -- period since its last reading.\n", + " -- Cumulative: a sensor that measures a counter. NRM must substract between\n", + " -- subsequent counter values to obtain a reading for the corresponding time\n", + " -- period.\n", + " -- CumulativeWithCapacity: same as `Cumulative`, except the sensor gives\n", + " -- bounded values that go back to zero after a given threshold. Typical of\n", + " -- RAPL sysfs sensors, for instance .\n", + " < IntervalBased | Cumulative | CumulativeWithCapacity : Double >\n", + "\n", + "let Range =\n", + " -- An inclusive range of values\n", + " { lower : Double, upper : Double }\n", + "\n", + "let DownstreamCfg =\n", + " -- Configuration for the dowstream API\n", + " { downstreamBindAddress : Text }\n", + "\n", + "let UpstreamCfg =\n", + " -- Configuration for the upstream API\n", + " { upstreamBindAddress : Text, pubPort : Integer, rpcPort : Integer }\n", + "\n", + "let Tag =\n", + " -- Available tags for describing sensors. Tags are used for setting\n", + " -- objective functions up.\n", + " < TagPower\n", + " | TagRapl\n", + " | TagDownstreamThreadSignal\n", + " | TagDownstreamCmdSignal\n", + " | TagMinimize\n", + " | TagMaximize\n", + " >\n", + "\n", + "let Sensor =\n", + " -- Configuration for an arbitrary sensor.\n", + " { sensorBinary : Text\n", + " , sensorArguments : List Text\n", + " , range : Range\n", + " , tags : List Tag\n", + " , sensorBehavior : SensorBehavior\n", + " }\n", + "\n", + "let Actuator =\n", + " -- Configuration for an arbitrary actuator.\n", + " { actuatorBinary : Text\n", + " , actuatorArguments : List Text\n", + " , actions : List Double\n", + " , referenceAction : Double\n", + " }\n", + "\n", + "let ActuatorKV =\n", + " -- Key-value representation for an actuator.\n", + " { actuatorID : Text, actuator : Actuator }\n", + "\n", + "let SensorKV =\n", + " -- Key-value representation for a sensor.\n", + " { sensorID : Text, sensor : Sensor }\n", + "\n", + "let RaplCfg =\n", + " -- Configuration for auto-discovered RAPL power sensors/actuators\n", + " { raplPath : Text\n", + " , raplActions : List types.Power\n", + " , referencePower : types.Power\n", + " }\n", + "\n", + "let ActuatorValue =\n", + " -- Actuator value configuration for the internal control loop configuration.\n", + " { actuatorValueID : Text, actuatorValue : Double }\n", + "\n", + "let Hint =\n", + " -- Action space configuration for internal control loop.\n", + " < Full\n", + " | Only :\n", + " { neHead : List ActuatorValue, neTail : List (List ActuatorValue) }\n", + " >\n", + "\n", + "let LearnCfg =\n", + " -- Internal control loop algorithm type and hyperparameters.\n", + " < Lagrange : { lagrange : Double }\n", + " | Random : { seed : Integer }\n", + " | Contextual : { horizon : Integer }\n", + " >\n", + "\n", + "let ControlCfg =\n", + " -- Root control configuration.\n", + " -- ControlCfg: configures an internal control loop\n", + " -- ControlOff: bypass mode\n", + " < ControlCfg :\n", + " { minimumControlInterval : types.Time\n", + " , minimumWaitInterval : types.Time\n", + " , staticPower : types.Power\n", + " , learnCfg : LearnCfg\n", + " , speedThreshold : Double\n", + " , referenceMeasurementRoundInterval : Integer\n", + " , hint : Hint\n", + " }\n", + " | ControlOff\n", + " >\n", + "\n", + "let Cfg =\n", + " -- The configuration type for `nrmd`.\n", + " -- verbose : a verbosity level configuration.\n", + " -- logfile : the main log file for the daemon.\n", + " -- perfPath : the path/binary name of the linux perf executable.\n", + " -- perfwrapperPath : the path/binary name of the nrm-perfwrapper executable\n", + " -- libnrmPath : the path to the libnrm.so to use. leave at None to disable\n", + " -- the feature globally (for all apps).\n", + " -- downstreamCfg : Downstream API configuration.\n", + " -- upstreamCfg : Upstream API configuration.\n", + " -- raplCfg : RAPL configuration. Leave at None to disable the feature\n", + " -- globally.\n", + " -- controlCfg : resource control configuration\n", + " -- passiveSensorFrequency : unified frequency for all NRM's passive sensors.\n", + " -- extraStaticPassiveSensors : list of extra static passive sensors.\n", + " -- extraStaticActuators : list of extra actuators.\n", + " { verbose : Verbosity\n", + " , logfile : Text\n", + " , perfPath : Text\n", + " , perfwrapperPath : Text\n", + " , libnrmPath : Optional Text\n", + " , downstreamCfg : DownstreamCfg\n", + " , upstreamCfg : UpstreamCfg\n", + " , raplCfg : Optional RaplCfg\n", + " , controlCfg : ControlCfg\n", + " , passiveSensorFrequency : types.Frequency\n", + " , extraStaticPassiveSensors : List SensorKV\n", + " , extraStaticActuators : List ActuatorKV\n", + " }\n", + "\n", + "let output =\n", + " { Verbosity = Verbosity\n", + " , UpstreamCfg = UpstreamCfg\n", + " , DownstreamCfg = DownstreamCfg\n", + " , Tag = Tag\n", + " , SensorBehavior = SensorBehavior\n", + " , Actuator = Actuator\n", + " , SensorKV = SensorKV\n", + " , Sensor = Sensor\n", + " , ActuatorKV = ActuatorKV\n", + " , Range = Range\n", + " , PassiveSensorCfg = Sensor\n", + " , ActuatorValue = ActuatorValue\n", + " , ActuatorCfg = Actuator\n", + " , LearnCfg = LearnCfg\n", + " , RaplCfg = RaplCfg\n", + " , ControlCfg = ControlCfg\n", + " , Hint = Hint\n", + " , Cfg = Cfg\n", + " }\n", + "\n", + "in types ⫽ output\n" ] } ], "source": [ - "%%script dhall resolve\n", - "./hsnrm/resources/defaults/Cfg.dhall" + "%%bash\n", + "cat ./hsnrm/hsnrm/dhall/types/nrmd.dhall" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Optional values are filled using defaults that can be found in [resources/defaults/Cfg.json](resources/defaults/Configuration.json) (also available in the Dhall format):" + "Optional values are filled using defaults that can be found either in Dhall or JSON format: \n", + "\n", + "-[hsnrm/hsnrm/dhall/defaults/nrmd.dhall](hsnrm/hsnrm/dhall/defaults/nrmd.dhall) \n", + "-[resources/defaults/nrmd.json](resources/defaults/nrmd.json)" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{\n", - " \"pmpi_lib\": \"pmpi_lib\",\n", - " \"verbose\": \"Error\",\n", - " \"logfile\": \"/tmp/nrm.log\",\n", - " \"singularity\": false,\n", - " \"argo_nodeos_config\": \"argo_nodeos_config\",\n", - " \"controlCfg\": {\n", - " \"fixedPower\": {\n", - " \"fromuW\": 250000000\n", - " }\n", - " },\n", - " \"upstreamCfg\": {\n", - " \"upstreamBindAddress\": \"*\",\n", - " \"rpcPort\": 3456,\n", - " \"pubPort\": 2345\n", - " },\n", - " \"libnrmPath\": null,\n", - " \"activeSensorFrequency\": {\n", - " \"fromHz\": 1\n", - " },\n", - " \"perf\": \"perf\",\n", - " \"argo_perf_wrapper\": \"nrm-perfwrapper\",\n", - " \"downstreamCfg\": {\n", - " \"downstreamBindAddress\": \"ipc:///tmp/nrm-downstream-event\"\n", - " },\n", - " \"nodeos\": false,\n", - " \"hwloc\": \"hwloc\",\n", - " \"raplCfg\": {\n", - " \"referencePower\": {\n", - " \"fromuW\": 250000000\n", - " },\n", - " \"raplActions\": [\n", - " {\n", - " \"fromuW\": 100000000\n", - " },\n", - " {\n", - " \"fromuW\": 200000000\n", + "let t = ../types/nrmd.dhall\n", + "\n", + "in { verbose = t.Verbosity.Error\n", + " , logfile = \"/tmp/nrm.log\"\n", + " , perfPath = \"perf\"\n", + " , perfwrapperPath = \"nrm-perfwrapper\"\n", + " , libnrmPath = None Text\n", + " , downstreamCfg.downstreamBindAddress = \"ipc:///tmp/nrm-downstream-event\"\n", + " , upstreamCfg =\n", + " { upstreamBindAddress = \"*\", pubPort = +2345, rpcPort = +3456 }\n", + " , raplCfg = Some\n", + " { raplPath = \"/sys/devices/virtual/powercap/intel-rapl\"\n", + " , raplActions = [ { microwatts = 1.0e8 }, { microwatts = 2.0e8 } ]\n", + " , referencePower.microwatts = 2.5e8\n", + " }\n", + " , controlCfg = t.ControlCfg.ControlOff\n", + " , passiveSensorFrequency.hertz = 1.0\n", + " , extraStaticPassiveSensors = [] : List t.SensorKV\n", + " , extraStaticActuators = [] : List t.ActuatorKV\n", " }\n", - " ],\n", - " \"raplPath\": \"/sys/devices/virtual/powercap/intel-rapl\"\n", - " },\n", - " \"dummy\": true,\n", - " \"slice_runtime\": \"Dummy\",\n", - " \"hwmonCfg\": {\n", - " \"hwmonPath\": \"/sys/class/hwmon\",\n", - " \"hwmonEnabled\": true\n", - " }\n", - "}\n" + " : t.Cfg\n" ] } ], "source": [ "%%bash\n", - "cat ./hsnrm/resources/defaults/Cfg.json | jq" + "cat ./hsnrm/hsnrm/dhall/defaults/nrmd.dhall" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 31, "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "extraStaticPassiveSensors: []\n", + "perfPath: perf\n", + "verbose: Error\n", + "logfile: /tmp/nrm.log\n", + "controlCfg: ControlOff\n", + "upstreamCfg:\n", + " upstreamBindAddress: '*'\n", + " rpcPort: 3456\n", + " pubPort: 2345\n", + "libnrmPath: null\n", + "downstreamCfg:\n", + " downstreamBindAddress: ipc:///tmp/nrm-downstream-event\n", + "perfwrapperPath: nrm-perfwrapper\n", + "extraStaticActuators: []\n", + "raplCfg:\n", + " referencePower:\n", + " microwatts: 250000000\n", + " raplActions:\n", + " - microwatts: 100000000\n", + " - microwatts: 200000000\n", + " raplPath: /sys/devices/virtual/powercap/intel-rapl\n", + "passiveSensorFrequency:\n", + " hertz: 1\n" + ] + } + ], "source": [ - "## Manifest configuration" + "%%bash\n", + "cat ./resources/defaults/nrmd.json | yq '' --yaml-output" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Example manifest files are in [resources/examples](../resources/examples) in JSON/YAML/Dhall format. For instance, the manifest file [resources/examples/perfwrap.json](../resources/examples/perfwrap.json) enables enables performance monitoring:" + "Attribute merging is always performed with those defaults. Example configurations are located in the `examples` folder:" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{\n", - " \"image\": null,\n", - " \"hwbind\": false,\n", - " \"app\": {\n", - " \"scheduler\": \"FIFO\",\n", - " \"instrumentation\": null,\n", - " \"power\": {\n", - " \"slowdown\": 1,\n", - " \"profile\": false,\n", - " \"policy\": \"NoPowerPolicy\"\n", - " },\n", - " \"perfwrapper\": {\n", - " \"perfLimit\": {\n", - " \"fromOps\": 100000\n", - " },\n", - " \"perfFreq\": {\n", - " \"fromHz\": 1\n", - " }\n", - " },\n", - " \"slice\": {\n", - " \"cpus\": 1,\n", - " \"mems\": 1\n", - " }\n", - " },\n", - " \"name\": \"default\"\n", - "}\n" + "passiveSensorFrequency:\n", + " hertz: 1\n", + "controlCfg:\n", + " hint: Full\n", + " learnCfg:\n", + " horizon: 4000\n", + " minimumWaitInterval:\n", + " microseconds: 100000\n", + " minimumControlInterval:\n", + " microseconds: 100000\n", + " referenceMeasurementRoundInterval: 6\n", + " speedThreshold: 1.1\n", + " staticPower:\n", + " microwatts: 200000000\n", + "raplCfg:\n", + " raplActions:\n", + " - microwatts: 100000000\n", + " - microwatts: 200000000\n", + " raplPath: /sys/devices/virtual/powercap/intel-rapl\n", + " referencePower:\n", + " microwatts: 250000000\n" ] } ], "source": [ "%%bash\n", - "cat ./hsnrm/resources/examples/perfwrap.json | jq" + "cat ./examples/nrmd/control.yaml" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Manifest configuration" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Manifest options are documented in schema file [resources/manifestSchema.json](../resources/manifestSchema.json). The next cell shows the corresponding [Dhall](https://dhall-lang.org/) type." + "Manifest files can also be defined either using Dhall, YAML, or JSON, and are at similar locations. " ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{ app :\n", - " { instrumentation :\n", - " Optional { ratelimit : { fromHz : Double } }\n", - " , perfwrapper :\n", - " < Perfwrapper :\n", - " { perfFreq :\n", - " { fromHz : Double }\n", - " , perfLimit :\n", - " { fromOps : Integer }\n", - " }\n", - " | PerfwrapperDisabled\n", - " >\n", - " , power :\n", - " { policy :\n", - " < Combined | DDCM | DVFS | NoPowerPolicy >\n", - " , profile :\n", - " Bool\n", - " , slowdown :\n", - " Integer\n", + "-- ******************************************************************************\n", + "-- Copyright 2019 UChicago Argonne, LLC.\n", + "-- (c.f. AUTHORS, LICENSE)\n", + "--\n", + "-- SPDX-License-Identifier: BSD-3-Clause\n", + "-- ******************************************************************************\n", + "let types =\n", + " -- This import defines a few base types that are common to manifest and\n", + " -- configuration formats.\n", + " ./types.dhall\n", + "\n", + "let Perfwrapper =\n", + " -- Configuration for linux perf performance measurements. A fixed frequency\n", + " -- is provided, along with a tentative upper bound on the maximum value of\n", + " -- the sensor. This upper bound should be set to a low positive value if\n", + " -- no a-priori information is known; NRM will then use a recursive-doubling\n", + " -- strategy to maintain its own bound.\n", + " { perfFreq : types.Frequency, perfLimit : Integer }\n", + "\n", + "let Instrumentation =\n", + " -- Libnrm instrumentation. The only attribute that configures this feature\n", + " -- is a message rate limitation.\n", + " { ratelimit : types.Frequency }\n", + "\n", + "let App =\n", + " -- Application configuration. Two features can be enabled or disabled:\n", + " -- perfwrapper: an optional linux perf configuration\n", + " -- instrumentation: an optional libnrm instrumentation configuration\n", + " { perfwrapper : Optional Perfwrapper\n", + " , instrumentation : Optional Instrumentation\n", + " }\n", + "\n", + "let Manifest =\n", + " -- A manifest has a name, and an application configuration.\n", + " { name : Text, app : App }\n", + "\n", + "in types\n", + " ⫽ { Perfwrapper = Perfwrapper\n", + " , Instrumentation = Instrumentation\n", + " , App = App\n", + " , Manifest = Manifest\n", + " }\n" + ] + } + ], + "source": [ + "%%bash\n", + "cat ./hsnrm/hsnrm/dhall/types/manifest.dhall" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-- ******************************************************************************\n", + "-- Copyright 2019 UChicago Argonne, LLC.\n", + "-- (c.f. AUTHORS, LICENSE)\n", + "--\n", + "-- SPDX-License-Identifier: BSD-3-Clause\n", + "-- ******************************************************************************\n", + "\n", + "let t = ../types/manifest.dhall\n", + "\n", + "in { name = \"default\"\n", + " , app =\n", + " { perfwrapper = None t.Perfwrapper\n", + " , instrumentation = None t.Instrumentation\n", " }\n", - " , scheduler :\n", - " < FIFO | HPC | Other : { _1 : Integer } >\n", - " , slice :\n", - " { cpus : Integer, mems : Integer }\n", - " }\n", - ", hwbind :\n", - " Bool\n", - ", image :\n", - " Optional\n", - " { binds : Optional (List Text), imagetype : < Docker | Sif >, path : Text }\n", - ", name :\n", - " Text\n", - "}\n" + " }\n" ] } ], "source": [ - "%%script dhall resolve\n", - "./hsnrm/resources/types/Manifest.dhall" + "%%bash\n", + "cat ./hsnrm/hsnrm/dhall/defaults/manifest.dhall" ] }, { @@ -329,38 +486,34 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{\n", - " \"image\": null,\n", - " \"hwbind\": false,\n", - " \"app\": {\n", - " \"scheduler\": \"FIFO\",\n", - " \"instrumentation\": null,\n", - " \"power\": {\n", - " \"slowdown\": 1,\n", - " \"profile\": false,\n", - " \"policy\": \"NoPowerPolicy\"\n", - " },\n", - " \"perfwrapper\": \"PerfwrapperDisabled\",\n", - " \"slice\": {\n", - " \"cpus\": 1,\n", - " \"mems\": 1\n", - " }\n", - " },\n", - " \"name\": \"default\"\n", - "}\n" + "-- ******************************************************************************\n", + "-- Copyright 2019 UChicago Argonne, LLC.\n", + "-- (c.f. AUTHORS, LICENSE)\n", + "--\n", + "-- SPDX-License-Identifier: BSD-3-Clause\n", + "-- ******************************************************************************\n", + "\n", + "let t = ../types/manifest.dhall\n", + "\n", + "in { name = \"default\"\n", + " , app =\n", + " { perfwrapper = None t.Perfwrapper\n", + " , instrumentation = None t.Instrumentation\n", + " }\n", + " }\n" ] } ], "source": [ "%%bash\n", - "cat hsnrm/resources/defaults/Manifest.json | jq" + "cat ./hsnrm/hsnrm/dhall/defaults/manifest.dhall" ] }, { @@ -372,48 +525,46 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{\n", - " \"image\": null,\n", - " \"hwbind\": false,\n", - " \"app\": {\n", - " \"scheduler\": \"FIFO\",\n", - " \"instrumentation\": null,\n", - " \"power\": {\n", - " \"slowdown\": 1,\n", - " \"profile\": false,\n", - " \"policy\": \"NoPowerPolicy\"\n", - " },\n", - " \"perfwrapper\": \"PerfwrapperDisabled\",\n", - " \"slice\": {\n", - " \"cpus\": 1,\n", - " \"mems\": 1\n", - " }\n", - " },\n", - " \"name\": \"default-appended\"\n", - "}\n" + "app:\n", + " instrumentation: null\n", + " perfwrapper: null\n", + "name: default\n" ] } ], "source": [ - "%%script bash\n", - "dhall-to-json <<< 'let Manifest = ./hsnrm/resources/types/Manifest.dhall \n", - " let appendName = \\(m: Manifest) -> m // {name = m.name ++ \"-appended\" }\n", - " in appendName ./hsnrm/resources/defaults/Manifest.dhall\n", - "' | jq" + "%%bash\n", + "cat ./resources/defaults/manifest.json | yq '' --yaml-output" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 45, "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "name: linuxperf-wrapped\n", + "app:\n", + " perfwrapper:\n", + " perfFreq:\n", + " hertz: 1\n", + " perfLimit: 100000\n" + ] + } + ], "source": [ - "Remember that any json document is one little step away from being a Python dictionaryy:" + "%%bash\n", + "cat ./examples/manifests/perfwrap.yaml" ] } ], diff --git a/notebooks/internal-control.ipynb b/notebooks/internal-control.ipynb deleted file mode 100644 index 1e1290f..0000000 --- a/notebooks/internal-control.ipynb +++ /dev/null @@ -1,1006 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Internal control experiments\n", - "\n", - "This notebooks runs NRM with internal bandit NRM control enabled. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For the application of the NRM model to resource management to one\n", - "computational job, the global resource optimization problem is the following:\n", - "\n", - "$$\n", - "\\begin{array}{l}\n", - " \\min \\quad e_{\\text{total}} \\\\\n", - "\t\\text{s.t.} \\quad t > \\tau t_{\\text{ref}}\n", - "\\end{array}\n", - "$$\n", - "\n", - "Where $e_{\\text{total}}$ denotes the total energy spent by the system during\n", - "the lifetime of the job, whose duration is denoted by $t^T$. We denote by\n", - "$t_{\\text{ref}}$ a reference measurement of the runtime of the job on an\n", - "unmanaged system. $\\tau <1$ is a parameter controlling the amount of runtime\n", - "degradation allowed for the job.\n", - "\n", - "The value of this global objective can be easily measured a-posteriori for a\n", - "computational job using power instrumentation techniques. Assuming both\n", - "workload and platform behavior to be deterministic, this objective is measured\n", - "using two runs of the system: A first run without resource management to\n", - "acquire $t_{\\text{ref}}$, and one run with NRM enabled. In order for NRM's\n", - "round-based control strategy to address this problem, we need an online loss\n", - "value however. This loss is obtained using the following loose assumptions:\n", - "\n", - "- The passive power consumption of the node is fixed and known. [1]\n", - "\n", - "- The total power consumption in a given time period can be estimated as\n", - " the sum of the static node consumption over that period and the RAPL power\n", - " measurement over that period. [2]\n", - "\n", - "- The impact of a choice of power-cap on the job's runtime can be\n", - " interpolated linearly from its impact on CPU counters. [3]\n", - "\n", - "\n", - "Denoting as in the previous section the round counter by $0\\tau \\right)}\n", - " \\left( \\frac{s^r_{\\text{ref}}}{s^r} \\left( p^r + p_{\\text{static}} \\right) \\right)\n", - "$$\n" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/home/fre/workspace/hnrm\n" - ] - } - ], - "source": [ - "cd .." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "%%capture\n", - "%%bash\n", - "./shake.sh build # Zfor the daemon \n", - "./shake.sh client # for the upstream client\n", - "./shake.sh pyclient # for the shared client library" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 3;\n", - " var nbb_unformatted_code = \"%load_ext nb_black\\nimport json\\n\\ndaemonCfgs = {}\\n\\n\\nfor cap in [100, 150, 200]:\\n daemonCfgs[\\\"pcap\\\" + str(cap)] = {\\n \\\"controlCfg\\\": {\\\"fixedPower\\\": {\\\"fromuW\\\": cap * 1000000}}\\n }\\ndaemonCfgs[\\\"controlOn\\\"] = {\\n \\\"controlCfg\\\": {\\n \\\"staticPower\\\": {\\\"fromuW\\\": 200000000},\\n \\\"referenceMeasurementRoundInterval\\\": 10,\\n \\\"learnCfg\\\": {\\\"lagrangeConstraint\\\": 1},\\n \\\"speedThreshold\\\": 0.9,\\n \\\"minimumControlInterval\\\": {\\\"fromuS\\\": 1000000},\\n },\\n \\\"verbose\\\": \\\"Debug\\\",\\n}\\n\\n\\ndef perfwrapped(cmd, args):\\n return [\\n {\\n \\\"cmd\\\": cmd,\\n \\\"args\\\": args,\\n \\\"sliceID\\\": \\\"toto\\\",\\n \\\"manifest\\\": {\\n \\\"app\\\": {\\n \\\"slice\\\": {\\\"cpus\\\": 1, \\\"mems\\\": 1},\\n \\\"perfwrapper\\\": {\\n \\\"perfLimit\\\": {\\\"fromOps\\\": 100000},\\n \\\"perfFreq\\\": {\\\"fromHz\\\": 1},\\n },\\n },\\n \\\"name\\\": \\\"perfwrap\\\",\\n },\\n }\\n ]\\n\\n\\nstream = perfwrapped(\\\"stream_c\\\", [])\\nlammps = perfwrapped(\\n \\\"mpiexec\\\",\\n [\\\"-n\\\", \\\"24\\\", \\\"amg\\\", \\\"-problem\\\", \\\"2\\\", \\\"-n\\\", \\\"90\\\", \\\"90\\\", \\\"90\\\", \\\"-P\\\", \\\"2\\\", \\\"12\\\", \\\"1\\\"],\\n)\";\n", - " var nbb_formatted_code = \"%load_ext nb_black\\nimport json\\n\\ndaemonCfgs = {}\\n\\n\\nfor cap in [100, 150, 200]:\\n daemonCfgs[\\\"pcap\\\" + str(cap)] = {\\n \\\"controlCfg\\\": {\\\"fixedPower\\\": {\\\"fromuW\\\": cap * 1000000}}\\n }\\ndaemonCfgs[\\\"controlOn\\\"] = {\\n \\\"controlCfg\\\": {\\n \\\"staticPower\\\": {\\\"fromuW\\\": 200000000},\\n \\\"referenceMeasurementRoundInterval\\\": 10,\\n \\\"learnCfg\\\": {\\\"lagrangeConstraint\\\": 1},\\n \\\"speedThreshold\\\": 0.9,\\n \\\"minimumControlInterval\\\": {\\\"fromuS\\\": 1000000},\\n },\\n \\\"verbose\\\": \\\"Debug\\\",\\n}\\n\\n\\ndef perfwrapped(cmd, args):\\n return [\\n {\\n \\\"cmd\\\": cmd,\\n \\\"args\\\": args,\\n \\\"sliceID\\\": \\\"toto\\\",\\n \\\"manifest\\\": {\\n \\\"app\\\": {\\n \\\"slice\\\": {\\\"cpus\\\": 1, \\\"mems\\\": 1},\\n \\\"perfwrapper\\\": {\\n \\\"perfLimit\\\": {\\\"fromOps\\\": 100000},\\n \\\"perfFreq\\\": {\\\"fromHz\\\": 1},\\n },\\n },\\n \\\"name\\\": \\\"perfwrap\\\",\\n },\\n }\\n ]\\n\\n\\nstream = perfwrapped(\\\"stream_c\\\", [])\\nlammps = perfwrapped(\\n \\\"mpiexec\\\",\\n [\\\"-n\\\", \\\"24\\\", \\\"amg\\\", \\\"-problem\\\", \\\"2\\\", \\\"-n\\\", \\\"90\\\", \\\"90\\\", \\\"90\\\", \\\"-P\\\", \\\"2\\\", \\\"12\\\", \\\"1\\\"],\\n)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import json\n", - "\n", - "daemonCfgs = {}\n", - "\n", - "\n", - "for cap in [100, 150, 200]:\n", - " daemonCfgs[\"pcap\" + str(cap)] = {\n", - " \"controlCfg\": {\"fixedPower\": {\"fromuW\": cap * 1000000}}\n", - " }\n", - "daemonCfgs[\"controlOn\"] = {\n", - " \"controlCfg\": {\n", - " \"staticPower\": {\"fromuW\": 200000000},\n", - " \"referenceMeasurementRoundInterval\": 10,\n", - " \"learnCfg\": {\"lagrangeConstraint\": 1},\n", - " \"speedThreshold\": 0.9,\n", - " \"minimumControlInterval\": {\"fromuS\": 1000000},\n", - " },\n", - " \"verbose\": \"Debug\",\n", - "}\n", - "\n", - "\n", - "def perfwrapped(cmd, args):\n", - " return [\n", - " {\n", - " \"cmd\": cmd,\n", - " \"args\": args,\n", - " \"sliceID\": \"toto\",\n", - " \"manifest\": {\n", - " \"app\": {\n", - " \"slice\": {\"cpus\": 1, \"mems\": 1},\n", - " \"perfwrapper\": {\n", - " \"perfLimit\": {\"fromOps\": 100000},\n", - " \"perfFreq\": {\"fromHz\": 1},\n", - " },\n", - " },\n", - " \"name\": \"perfwrap\",\n", - " },\n", - " }\n", - " ]\n", - "\n", - "\n", - "stream = perfwrapped(\"stream_c\", [])\n", - "lammps = perfwrapped(\n", - " \"mpiexec\",\n", - " [\"-n\", \"24\", \"amg\", \"-problem\", \"2\", \"-n\", \"90\", \"90\", \"90\", \"-P\", \"2\", \"12\", \"1\"],\n", - ")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 4;\n", - " var nbb_unformatted_code = \"import nrm.tooling as nrm\\n\\nhost = nrm.Local()\";\n", - " var nbb_formatted_code = \"import nrm.tooling as nrm\\n\\nhost = nrm.Local()\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import nrm.tooling as nrm\n", - "\n", - "host = nrm.Local()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "connecting\n", - "connected to tcp://localhost:2345\n", - "Problem \n", - " \u001b[1m\u001b[96m{\u001b[0m sensors = Map \n", - " \u001b[1m\u001b[93m[\u001b[0m \n", - " \u001b[35m(\u001b[0m SensorID \u001b[36m{\u001b[0m sensorID = \u001b[1m\u001b[97m\"\u001b[0m\u001b[1m\u001b[94mRaplKey (PackageID 0)\u001b[0m\u001b[1m\u001b[97m\"\u001b[0m \u001b[36m}\u001b[0m\n", - " \u001b[35m,\u001b[0m Sensor \n", - " \u001b[36m{\u001b[0m range = 0.0 ... 300.0\n", - " \u001b[36m,\u001b[0m maxFrequency = 3.0\n", - " \u001b[36m}\u001b[0m \n", - " \u001b[35m)\u001b[0m \n", - " \u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m,\u001b[0m actuators = Map \n", - " \u001b[1m\u001b[93m[\u001b[0m \n", - " \u001b[35m(\u001b[0m ActuatorID \u001b[36m{\u001b[0m actuatorID = \u001b[1m\u001b[97m\"\u001b[0m\u001b[1m\u001b[94mRaplKey (PackageID 0)\u001b[0m\u001b[1m\u001b[97m\"\u001b[0m \u001b[36m}\u001b[0m\n", - " \u001b[35m,\u001b[0m Actuator \n", - " \u001b[36m{\u001b[0m actions = \n", - " \u001b[33m[\u001b[0m DiscreteDouble 100.0\n", - " \u001b[33m,\u001b[0m DiscreteDouble 200.0\n", - " \u001b[33m]\u001b[0m \n", - " \u001b[36m}\u001b[0m\n", - " \u001b[35m)\u001b[0m \n", - " \u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m,\u001b[0m objectives = \u001b[1m\u001b[93m[\u001b[0m\u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m,\u001b[0m constraints = \u001b[1m\u001b[93m[\u001b[0m\u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m}\u001b[0m \n" - ] - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 5;\n", - " var nbb_unformatted_code = \"host.start_daemon(daemonCfgs[\\\"pcap100\\\"])\\n# assert host.check_daemon()\\nprint(host.get_cpd())\";\n", - " var nbb_formatted_code = \"host.start_daemon(daemonCfgs[\\\"pcap100\\\"])\\n# assert host.check_daemon()\\nprint(host.get_cpd())\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "host.start_daemon(daemonCfgs[\"pcap100\"])\n", - "# assert host.check_daemon()\n", - "print(host.get_cpd())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The next cell just stops the daemon cleanly." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 6;\n", - " var nbb_unformatted_code = \"host.stop_daemon()\\nassert host.check_daemon() == False\";\n", - " var nbb_formatted_code = \"host.stop_daemon()\\nassert host.check_daemon() == False\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "host.stop_daemon()\n", - "assert host.check_daemon() == False" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Helpers\n", - "\n", - "For performing experiments:" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 7;\n", - " var nbb_unformatted_code = \"import time\\nfrom collections import defaultdict\\n\\n\\ndef do_workload(host, daemonCfg, workload):\\n host.start_daemon(daemonCfg)\\n print(\\\"Starting the workload\\\")\\n host.run_workload(workload)\\n history = defaultdict(list)\\n # print(host.get_state())\\n getCPD = True\\n try:\\n while host.check_daemon() and not host.workload_finished():\\n measurement_message = host.workload_recv()\\n msg = json.loads(measurement_message)\\n if \\\"pubMeasurements\\\" in msg:\\n if getCPD:\\n getCPD = False\\n time.sleep(3)\\n cpd = host.get_cpd()\\n print(cpd)\\n cpd = dict(cpd)\\n print(\\\"Sensor identifier list:\\\")\\n for sensorID in [sensor[0] for sensor in cpd[\\\"sensors\\\"]]:\\n print(\\\"- %s\\\" % sensorID)\\n print(\\\"Actuator identifier list:\\\")\\n for sensorID in [sensor[0] for sensor in cpd[\\\"actuators\\\"]]:\\n print(\\\"- %s\\\" % sensorID)\\n content = msg[\\\"pubMeasurements\\\"][1][0]\\n t = content[\\\"time\\\"]\\n sensorID = content[\\\"sensorID\\\"]\\n x = content[\\\"sensorValue\\\"]\\n print(\\n \\\".\\\",\\n end=\\\"\\\"\\n # \\\"Measurement: originating at time %s for sensor %s of value %s\\\"\\n #% (content[\\\"time\\\"], content[\\\"sensorID\\\"], content[\\\"sensorValue\\\"])\\n )\\n history[\\\"sensor-\\\" + sensorID].append((t, x))\\n if \\\"pubCPD\\\" in msg:\\n print(\\\"R\\\")\\n if \\\"pubAction\\\" in msg:\\n # print(host.get_state())\\n # print(msg)\\n t, contents, meta, controller = msg[\\\"pubAction\\\"]\\n if \\\"bandit\\\" in controller.keys():\\n for key in meta.keys():\\n history[\\\"actionType\\\"].append((t, key))\\n if \\\"referenceMeasurementDecision\\\" in meta.keys():\\n print(\\\"(ref)\\\", end=\\\"\\\")\\n elif \\\"initialDecision\\\" in meta.keys():\\n print(\\\"(init)\\\", end=\\\"\\\")\\n elif \\\"innerDecision\\\" in meta.keys():\\n print(\\\"(inner)\\\", end=\\\"\\\")\\n counter = 0\\n for value in meta[\\\"innerDecision\\\"][\\\"constraints\\\"]:\\n history[\\\"constraint-\\\" + str(counter)].append(\\n (t, value[\\\"fromConstraintValue\\\"])\\n )\\n counter = counter + 1\\n counter = 0\\n for value in meta[\\\"innerDecision\\\"][\\\"objectives\\\"]:\\n history[\\\"objective-\\\" + str(counter)].append(\\n (t, value[\\\"fromObjectiveValue\\\"])\\n )\\n counter = counter + 1\\n history[\\\"loss\\\"].append((t, meta[\\\"innerDecision\\\"][\\\"loss\\\"]))\\n for (arm, (visits, stat)) in controller[\\\"armstats\\\"]:\\n history[\\\"armstat-\\\" + str(arm)].append((t, stat))\\n history[\\\"visits-\\\" + str(arm)].append((t, visits))\\n for content in contents:\\n actuatorID = content[\\\"actuatorID\\\"] + \\\"(action)\\\"\\n x = content[\\\"actuatorValue\\\"]\\n history[actuatorID].append((t, x))\\n for arm in controller[\\\"bandit\\\"][\\\"lagrange\\\"][\\\"lagrangeConstraint\\\"][\\n \\\"weights\\\"\\n ]:\\n value = arm[\\\"action\\\"][0][\\\"actuatorValue\\\"]\\n history[str(value / 1000000) + \\\"-probability\\\"].append(\\n (t, arm[\\\"probability\\\"][\\\"getProbability\\\"])\\n )\\n history[str(value / 1000000) + \\\"-cumulativeLoss\\\"].append(\\n (t, arm[\\\"cumulativeLoss\\\"][\\\"getCumulativeLoss\\\"])\\n )\\n # print(\\n # \\\"Action: originating at time %s for actuator %s of value %s\\\"\\n #% (t,actuatorID,x)\\n # )\\n host.check_daemon()\\n except:\\n return history\\n host.stop_daemon()\\n return history\";\n", - " var nbb_formatted_code = \"import time\\nfrom collections import defaultdict\\n\\n\\ndef do_workload(host, daemonCfg, workload):\\n host.start_daemon(daemonCfg)\\n print(\\\"Starting the workload\\\")\\n host.run_workload(workload)\\n history = defaultdict(list)\\n # print(host.get_state())\\n getCPD = True\\n try:\\n while host.check_daemon() and not host.workload_finished():\\n measurement_message = host.workload_recv()\\n msg = json.loads(measurement_message)\\n if \\\"pubMeasurements\\\" in msg:\\n if getCPD:\\n getCPD = False\\n time.sleep(3)\\n cpd = host.get_cpd()\\n print(cpd)\\n cpd = dict(cpd)\\n print(\\\"Sensor identifier list:\\\")\\n for sensorID in [sensor[0] for sensor in cpd[\\\"sensors\\\"]]:\\n print(\\\"- %s\\\" % sensorID)\\n print(\\\"Actuator identifier list:\\\")\\n for sensorID in [sensor[0] for sensor in cpd[\\\"actuators\\\"]]:\\n print(\\\"- %s\\\" % sensorID)\\n content = msg[\\\"pubMeasurements\\\"][1][0]\\n t = content[\\\"time\\\"]\\n sensorID = content[\\\"sensorID\\\"]\\n x = content[\\\"sensorValue\\\"]\\n print(\\n \\\".\\\",\\n end=\\\"\\\"\\n # \\\"Measurement: originating at time %s for sensor %s of value %s\\\"\\n #% (content[\\\"time\\\"], content[\\\"sensorID\\\"], content[\\\"sensorValue\\\"])\\n )\\n history[\\\"sensor-\\\" + sensorID].append((t, x))\\n if \\\"pubCPD\\\" in msg:\\n print(\\\"R\\\")\\n if \\\"pubAction\\\" in msg:\\n # print(host.get_state())\\n # print(msg)\\n t, contents, meta, controller = msg[\\\"pubAction\\\"]\\n if \\\"bandit\\\" in controller.keys():\\n for key in meta.keys():\\n history[\\\"actionType\\\"].append((t, key))\\n if \\\"referenceMeasurementDecision\\\" in meta.keys():\\n print(\\\"(ref)\\\", end=\\\"\\\")\\n elif \\\"initialDecision\\\" in meta.keys():\\n print(\\\"(init)\\\", end=\\\"\\\")\\n elif \\\"innerDecision\\\" in meta.keys():\\n print(\\\"(inner)\\\", end=\\\"\\\")\\n counter = 0\\n for value in meta[\\\"innerDecision\\\"][\\\"constraints\\\"]:\\n history[\\\"constraint-\\\" + str(counter)].append(\\n (t, value[\\\"fromConstraintValue\\\"])\\n )\\n counter = counter + 1\\n counter = 0\\n for value in meta[\\\"innerDecision\\\"][\\\"objectives\\\"]:\\n history[\\\"objective-\\\" + str(counter)].append(\\n (t, value[\\\"fromObjectiveValue\\\"])\\n )\\n counter = counter + 1\\n history[\\\"loss\\\"].append((t, meta[\\\"innerDecision\\\"][\\\"loss\\\"]))\\n for (arm, (visits, stat)) in controller[\\\"armstats\\\"]:\\n history[\\\"armstat-\\\" + str(arm)].append((t, stat))\\n history[\\\"visits-\\\" + str(arm)].append((t, visits))\\n for content in contents:\\n actuatorID = content[\\\"actuatorID\\\"] + \\\"(action)\\\"\\n x = content[\\\"actuatorValue\\\"]\\n history[actuatorID].append((t, x))\\n for arm in controller[\\\"bandit\\\"][\\\"lagrange\\\"][\\\"lagrangeConstraint\\\"][\\n \\\"weights\\\"\\n ]:\\n value = arm[\\\"action\\\"][0][\\\"actuatorValue\\\"]\\n history[str(value / 1000000) + \\\"-probability\\\"].append(\\n (t, arm[\\\"probability\\\"][\\\"getProbability\\\"])\\n )\\n history[str(value / 1000000) + \\\"-cumulativeLoss\\\"].append(\\n (t, arm[\\\"cumulativeLoss\\\"][\\\"getCumulativeLoss\\\"])\\n )\\n # print(\\n # \\\"Action: originating at time %s for actuator %s of value %s\\\"\\n #% (t,actuatorID,x)\\n # )\\n host.check_daemon()\\n except:\\n return history\\n host.stop_daemon()\\n return history\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import time\n", - "from collections import defaultdict\n", - "\n", - "\n", - "def do_workload(host, daemonCfg, workload):\n", - " host.start_daemon(daemonCfg)\n", - " print(\"Starting the workload\")\n", - " host.run_workload(workload)\n", - " history = defaultdict(list)\n", - " # print(host.get_state())\n", - " getCPD = True\n", - " try:\n", - " while host.check_daemon() and not host.workload_finished():\n", - " measurement_message = host.workload_recv()\n", - " msg = json.loads(measurement_message)\n", - " if \"pubMeasurements\" in msg:\n", - " if getCPD:\n", - " getCPD = False\n", - " time.sleep(3)\n", - " cpd = host.get_cpd()\n", - " print(cpd)\n", - " cpd = dict(cpd)\n", - " print(\"Sensor identifier list:\")\n", - " for sensorID in [sensor[0] for sensor in cpd[\"sensors\"]]:\n", - " print(\"- %s\" % sensorID)\n", - " print(\"Actuator identifier list:\")\n", - " for sensorID in [sensor[0] for sensor in cpd[\"actuators\"]]:\n", - " print(\"- %s\" % sensorID)\n", - " content = msg[\"pubMeasurements\"][1][0]\n", - " t = content[\"time\"]\n", - " sensorID = content[\"sensorID\"]\n", - " x = content[\"sensorValue\"]\n", - " print(\n", - " \".\",\n", - " end=\"\"\n", - " # \"Measurement: originating at time %s for sensor %s of value %s\"\n", - " #% (content[\"time\"], content[\"sensorID\"], content[\"sensorValue\"])\n", - " )\n", - " history[\"sensor-\" + sensorID].append((t, x))\n", - " if \"pubCPD\" in msg:\n", - " print(\"R\")\n", - " if \"pubAction\" in msg:\n", - " # print(host.get_state())\n", - " # print(msg)\n", - " t, contents, meta, controller = msg[\"pubAction\"]\n", - " if \"bandit\" in controller.keys():\n", - " for key in meta.keys():\n", - " history[\"actionType\"].append((t, key))\n", - " if \"referenceMeasurementDecision\" in meta.keys():\n", - " print(\"(ref)\", end=\"\")\n", - " elif \"initialDecision\" in meta.keys():\n", - " print(\"(init)\", end=\"\")\n", - " elif \"innerDecision\" in meta.keys():\n", - " print(\"(inner)\", end=\"\")\n", - " counter = 0\n", - " for value in meta[\"innerDecision\"][\"constraints\"]:\n", - " history[\"constraint-\" + str(counter)].append(\n", - " (t, value[\"fromConstraintValue\"])\n", - " )\n", - " counter = counter + 1\n", - " counter = 0\n", - " for value in meta[\"innerDecision\"][\"objectives\"]:\n", - " history[\"objective-\" + str(counter)].append(\n", - " (t, value[\"fromObjectiveValue\"])\n", - " )\n", - " counter = counter + 1\n", - " history[\"loss\"].append((t, meta[\"innerDecision\"][\"loss\"]))\n", - " for (arm, (visits, stat)) in controller[\"armstats\"]:\n", - " history[\"armstat-\" + str(arm)].append((t, stat))\n", - " history[\"visits-\" + str(arm)].append((t, visits))\n", - " for content in contents:\n", - " actuatorID = content[\"actuatorID\"] + \"(action)\"\n", - " x = content[\"actuatorValue\"]\n", - " history[actuatorID].append((t, x))\n", - " for arm in controller[\"bandit\"][\"lagrange\"][\"lagrangeConstraint\"][\n", - " \"weights\"\n", - " ]:\n", - " value = arm[\"action\"][0][\"actuatorValue\"]\n", - " history[str(value / 1000000) + \"-probability\"].append(\n", - " (t, arm[\"probability\"][\"getProbability\"])\n", - " )\n", - " history[str(value / 1000000) + \"-cumulativeLoss\"].append(\n", - " (t, arm[\"cumulativeLoss\"][\"getCumulativeLoss\"])\n", - " )\n", - " # print(\n", - " # \"Action: originating at time %s for actuator %s of value %s\"\n", - " #% (t,actuatorID,x)\n", - " # )\n", - " host.check_daemon()\n", - " except:\n", - " return history\n", - " host.stop_daemon()\n", - " return history" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "experiments:" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "connecting\n", - "connected to tcp://localhost:2345\n", - "Starting the workload\n", - "Problem \n", - " \u001b[1m\u001b[96m{\u001b[0m sensors = Map \n", - " \u001b[1m\u001b[93m[\u001b[0m \n", - " \u001b[35m(\u001b[0m SensorID \u001b[36m{\u001b[0m sensorID = \u001b[1m\u001b[97m\"\u001b[0m\u001b[1m\u001b[94mDownstreamCmdKey (DownstreamCmdID 706df7b0-bce1-4384-8274-e62b5a6937c3)\u001b[0m\u001b[1m\u001b[97m\"\u001b[0m \u001b[36m}\u001b[0m\n", - " \u001b[35m,\u001b[0m Sensor \n", - " \u001b[36m{\u001b[0m range = 0.0 ... 8.614535308e9\n", - " \u001b[36m,\u001b[0m maxFrequency = 1.0\n", - " \u001b[36m}\u001b[0m \n", - " \u001b[35m)\u001b[0m \n", - " \u001b[1m\u001b[93m,\u001b[0m \n", - " \u001b[35m(\u001b[0m SensorID \u001b[36m{\u001b[0m sensorID = \u001b[1m\u001b[97m\"\u001b[0m\u001b[1m\u001b[94mRaplKey (PackageID 0)\u001b[0m\u001b[1m\u001b[97m\"\u001b[0m \u001b[36m}\u001b[0m\n", - " \u001b[35m,\u001b[0m Sensor \n", - " \u001b[36m{\u001b[0m range = 0.0 ... 300.0\n", - " \u001b[36m,\u001b[0m maxFrequency = 3.0\n", - " \u001b[36m}\u001b[0m \n", - " \u001b[35m)\u001b[0m \n", - " \u001b[1m\u001b[93m]\u001b[0m \n", - " \u001b[1m\u001b[96m,\u001b[0m actuators = Map \n", - " \u001b[1m\u001b[93m[\u001b[0m \n", - " \u001b[35m(\u001b[0m ActuatorID \u001b[36m{\u001b[0m actuatorID = \u001b[1m\u001b[97m\"\u001b[0m\u001b[1m\u001b[94mRaplKey (PackageID 0)\u001b[0m\u001b[1m\u001b[97m\"\u001b[0m \u001b[36m}\u001b[0m\n", - " \u001b[35m,\u001b[0m Actuator \n", - " \u001b[36m{\u001b[0m actions = \n", - " \u001b[33m[\u001b[0m DiscreteDouble 100.0\n", - " \u001b[33m,\u001b[0m DiscreteDouble 200.0\n", - " \u001b[33m]\u001b[0m \n", - " \u001b[36m}\u001b[0m\n", - " \u001b[35m)\u001b[0m \n", - " \u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m,\u001b[0m objectives = \u001b[1m\u001b[93m[\u001b[0m\u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m,\u001b[0m constraints = \u001b[1m\u001b[93m[\u001b[0m\u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m}\u001b[0m \n", - "Sensor identifier list:\n", - "- DownstreamCmdKey (DownstreamCmdID 706df7b0-bce1-4384-8274-e62b5a6937c3)\n", - "- RaplKey (PackageID 0)\n", - "Actuator identifier list:\n", - "- RaplKey (PackageID 0)\n", - "...................................................................................................................................................................................................................................................................................................................................................................................connecting\n", - "connected to tcp://localhost:2345\n", - "Starting the workload\n", - "Problem \n", - " \u001b[1m\u001b[96m{\u001b[0m sensors = Map \n", - " \u001b[1m\u001b[93m[\u001b[0m \n", - " \u001b[35m(\u001b[0m SensorID \u001b[36m{\u001b[0m sensorID = \u001b[1m\u001b[97m\"\u001b[0m\u001b[1m\u001b[94mDownstreamCmdKey (DownstreamCmdID 8ae8153d-532b-42a0-9c53-185ca78697f8)\u001b[0m\u001b[1m\u001b[97m\"\u001b[0m \u001b[36m}\u001b[0m\n", - " \u001b[35m,\u001b[0m Sensor \n", - " \u001b[36m{\u001b[0m range = 0.0 ... 1.0153094158e10\n", - " \u001b[36m,\u001b[0m maxFrequency = 1.0\n", - " \u001b[36m}\u001b[0m \n", - " \u001b[35m)\u001b[0m \n", - " \u001b[1m\u001b[93m,\u001b[0m \n", - " \u001b[35m(\u001b[0m SensorID \u001b[36m{\u001b[0m sensorID = \u001b[1m\u001b[97m\"\u001b[0m\u001b[1m\u001b[94mRaplKey (PackageID 0)\u001b[0m\u001b[1m\u001b[97m\"\u001b[0m \u001b[36m}\u001b[0m\n", - " \u001b[35m,\u001b[0m Sensor \n", - " \u001b[36m{\u001b[0m range = 0.0 ... 300.0\n", - " \u001b[36m,\u001b[0m maxFrequency = 3.0\n", - " \u001b[36m}\u001b[0m \n", - " \u001b[35m)\u001b[0m \n", - " \u001b[1m\u001b[93m]\u001b[0m \n", - " \u001b[1m\u001b[96m,\u001b[0m actuators = Map \n", - " \u001b[1m\u001b[93m[\u001b[0m \n", - " \u001b[35m(\u001b[0m ActuatorID \u001b[36m{\u001b[0m actuatorID = \u001b[1m\u001b[97m\"\u001b[0m\u001b[1m\u001b[94mRaplKey (PackageID 0)\u001b[0m\u001b[1m\u001b[97m\"\u001b[0m \u001b[36m}\u001b[0m\n", - " \u001b[35m,\u001b[0m Actuator \n", - " \u001b[36m{\u001b[0m actions = \n", - " \u001b[33m[\u001b[0m DiscreteDouble 100.0\n", - " \u001b[33m,\u001b[0m DiscreteDouble 200.0\n", - " \u001b[33m]\u001b[0m \n", - " \u001b[36m}\u001b[0m\n", - " \u001b[35m)\u001b[0m \n", - " \u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m,\u001b[0m objectives = \u001b[1m\u001b[93m[\u001b[0m\u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m,\u001b[0m constraints = \u001b[1m\u001b[93m[\u001b[0m\u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m}\u001b[0m \n", - "Sensor identifier list:\n", - "- DownstreamCmdKey (DownstreamCmdID 8ae8153d-532b-42a0-9c53-185ca78697f8)\n", - "- RaplKey (PackageID 0)\n", - "Actuator identifier list:\n", - "- RaplKey (PackageID 0)\n", - "...........................................connecting\n", - "connected to tcp://localhost:2345\n", - "Starting the workload\n", - "Problem \n", - " \u001b[1m\u001b[96m{\u001b[0m sensors = Map \n", - " \u001b[1m\u001b[93m[\u001b[0m \n", - " \u001b[35m(\u001b[0m SensorID \u001b[36m{\u001b[0m sensorID = \u001b[1m\u001b[97m\"\u001b[0m\u001b[1m\u001b[94mDownstreamCmdKey (DownstreamCmdID b4deb461-ff70-4db1-8302-d02facbd9a4d)\u001b[0m\u001b[1m\u001b[97m\"\u001b[0m \u001b[36m}\u001b[0m\n", - " \u001b[35m,\u001b[0m Sensor \n", - " \u001b[36m{\u001b[0m range = 0.0 ... 8.73804945e9\n", - " \u001b[36m,\u001b[0m maxFrequency = 1.0\n", - " \u001b[36m}\u001b[0m \n", - " \u001b[35m)\u001b[0m \n", - " \u001b[1m\u001b[93m,\u001b[0m \n", - " \u001b[35m(\u001b[0m SensorID \u001b[36m{\u001b[0m sensorID = \u001b[1m\u001b[97m\"\u001b[0m\u001b[1m\u001b[94mRaplKey (PackageID 0)\u001b[0m\u001b[1m\u001b[97m\"\u001b[0m \u001b[36m}\u001b[0m\n", - " \u001b[35m,\u001b[0m Sensor \n", - " \u001b[36m{\u001b[0m range = 0.0 ... 300.0\n", - " \u001b[36m,\u001b[0m maxFrequency = 3.0\n", - " \u001b[36m}\u001b[0m \n", - " \u001b[35m)\u001b[0m \n", - " \u001b[1m\u001b[93m]\u001b[0m \n", - " \u001b[1m\u001b[96m,\u001b[0m actuators = Map \n", - " \u001b[1m\u001b[93m[\u001b[0m \n", - " \u001b[35m(\u001b[0m ActuatorID \u001b[36m{\u001b[0m actuatorID = \u001b[1m\u001b[97m\"\u001b[0m\u001b[1m\u001b[94mRaplKey (PackageID 0)\u001b[0m\u001b[1m\u001b[97m\"\u001b[0m \u001b[36m}\u001b[0m\n", - " \u001b[35m,\u001b[0m Actuator \n", - " \u001b[36m{\u001b[0m actions = \n", - " \u001b[33m[\u001b[0m DiscreteDouble 100.0\n", - " \u001b[33m,\u001b[0m DiscreteDouble 200.0\n", - " \u001b[33m]\u001b[0m \n", - " \u001b[36m}\u001b[0m\n", - " \u001b[35m)\u001b[0m \n", - " \u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m,\u001b[0m objectives = \u001b[1m\u001b[93m[\u001b[0m\u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m,\u001b[0m constraints = \u001b[1m\u001b[93m[\u001b[0m\u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m}\u001b[0m \n", - "Sensor identifier list:\n", - "- DownstreamCmdKey (DownstreamCmdID b4deb461-ff70-4db1-8302-d02facbd9a4d)\n", - "- RaplKey (PackageID 0)\n", - "Actuator identifier list:\n", - "- RaplKey (PackageID 0)\n", - ".....................................................................................................................connecting\n", - "connected to tcp://localhost:2345\n", - "Starting the workload\n", - "Problem \n", - " \u001b[1m\u001b[96m{\u001b[0m sensors = Map \n", - " \u001b[1m\u001b[93m[\u001b[0m \n", - " \u001b[35m(\u001b[0m SensorID \u001b[36m{\u001b[0m sensorID = \u001b[1m\u001b[97m\"\u001b[0m\u001b[1m\u001b[94mDownstreamCmdKey (DownstreamCmdID aade1bd4-3402-4c1e-a5b3-3a9935302a27)\u001b[0m\u001b[1m\u001b[97m\"\u001b[0m \u001b[36m}\u001b[0m\n", - " \u001b[35m,\u001b[0m Sensor \n", - " \u001b[36m{\u001b[0m range = 0.0 ... 100000.0\n", - " \u001b[36m,\u001b[0m maxFrequency = 1.0\n", - " \u001b[36m}\u001b[0m \n", - " \u001b[35m)\u001b[0m \n", - " \u001b[1m\u001b[93m,\u001b[0m \n", - " \u001b[35m(\u001b[0m SensorID \u001b[36m{\u001b[0m sensorID = \u001b[1m\u001b[97m\"\u001b[0m\u001b[1m\u001b[94mRaplKey (PackageID 0)\u001b[0m\u001b[1m\u001b[97m\"\u001b[0m \u001b[36m}\u001b[0m\n", - " \u001b[35m,\u001b[0m Sensor \n", - " \u001b[36m{\u001b[0m range = 0.0 ... 300.0\n", - " \u001b[36m,\u001b[0m maxFrequency = 3.0\n", - " \u001b[36m}\u001b[0m \n", - " \u001b[35m)\u001b[0m \n", - " \u001b[1m\u001b[93m]\u001b[0m \n", - " \u001b[1m\u001b[96m,\u001b[0m actuators = Map \n", - " \u001b[1m\u001b[93m[\u001b[0m \n", - " \u001b[35m(\u001b[0m ActuatorID \u001b[36m{\u001b[0m actuatorID = \u001b[1m\u001b[97m\"\u001b[0m\u001b[1m\u001b[94mRaplKey (PackageID 0)\u001b[0m\u001b[1m\u001b[97m\"\u001b[0m \u001b[36m}\u001b[0m\n", - " \u001b[35m,\u001b[0m Actuator \n", - " \u001b[36m{\u001b[0m actions = \n", - " \u001b[33m[\u001b[0m DiscreteDouble 100.0\n", - " \u001b[33m,\u001b[0m DiscreteDouble 200.0\n", - " \u001b[33m]\u001b[0m \n", - " \u001b[36m}\u001b[0m\n", - " \u001b[35m)\u001b[0m \n", - " \u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m,\u001b[0m objectives = \u001b[1m\u001b[93m[\u001b[0m\u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m,\u001b[0m constraints = \u001b[1m\u001b[93m[\u001b[0m\u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m}\u001b[0m \n", - "Sensor identifier list:\n", - "- DownstreamCmdKey (DownstreamCmdID aade1bd4-3402-4c1e-a5b3-3a9935302a27)\n", - "- RaplKey (PackageID 0)\n", - "Actuator identifier list:\n", - "- RaplKey (PackageID 0)\n", - "........................................" - ] - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 8;\n", - " var nbb_unformatted_code = \"results = {}\\nfor key, cfg in daemonCfgs.items():\\n results[key] = do_workload(host, cfg, stream)\";\n", - " var nbb_formatted_code = \"results = {}\\nfor key, cfg in daemonCfgs.items():\\n results[key] = do_workload(host, cfg, stream)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "results = {}\n", - "for key, cfg in daemonCfgs.items():\n", - " results[key] = do_workload(host, cfg, stream)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 9;\n", - " var nbb_unformatted_code = \"import pandas as pd\\nimport matplotlib.pyplot as plt\\nimport seaborn as sns\\nimport numpy as np\\nimport scipy.integrate as integrate\\nfrom functools import reduce\\n\\n\\ndef history_to_dataframe(key, history):\\n name = key\\n\\n def mkdf(columnName, measurements):\\n dataframe = pd.DataFrame(\\n data=[(pd.Timestamp(t, unit=\\\"us\\\"), m) for t, m in measurements]\\n )\\n dataframe.columns = [\\\"time\\\", columnName]\\n return dataframe\\n\\n data_frames = [\\n mkdf(columnName, measurements) for (columnName, measurements) in history.items()\\n ]\\n merged = reduce(\\n lambda left, right: pd.merge(left, right, on=[\\\"time\\\"], how=\\\"outer\\\"), data_frames\\n )\\n return merged.melt(id_vars=[\\\"time\\\"]).assign(name=name)\\n\\n\\nresult_df = pd.concat(\\n [history_to_dataframe(key, history) for key, history in results.items()]\\n)\";\n", - " var nbb_formatted_code = \"import pandas as pd\\nimport matplotlib.pyplot as plt\\nimport seaborn as sns\\nimport numpy as np\\nimport scipy.integrate as integrate\\nfrom functools import reduce\\n\\n\\ndef history_to_dataframe(key, history):\\n name = key\\n\\n def mkdf(columnName, measurements):\\n dataframe = pd.DataFrame(\\n data=[(pd.Timestamp(t, unit=\\\"us\\\"), m) for t, m in measurements]\\n )\\n dataframe.columns = [\\\"time\\\", columnName]\\n return dataframe\\n\\n data_frames = [\\n mkdf(columnName, measurements) for (columnName, measurements) in history.items()\\n ]\\n merged = reduce(\\n lambda left, right: pd.merge(left, right, on=[\\\"time\\\"], how=\\\"outer\\\"), data_frames\\n )\\n return merged.melt(id_vars=[\\\"time\\\"]).assign(name=name)\\n\\n\\nresult_df = pd.concat(\\n [history_to_dataframe(key, history) for key, history in results.items()]\\n)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "import seaborn as sns\n", - "import numpy as np\n", - "import scipy.integrate as integrate\n", - "from functools import reduce\n", - "\n", - "\n", - "def history_to_dataframe(key, history):\n", - " name = key\n", - "\n", - " def mkdf(columnName, measurements):\n", - " dataframe = pd.DataFrame(\n", - " data=[(pd.Timestamp(t, unit=\"us\"), m) for t, m in measurements]\n", - " )\n", - " dataframe.columns = [\"time\", columnName]\n", - " return dataframe\n", - "\n", - " data_frames = [\n", - " mkdf(columnName, measurements) for (columnName, measurements) in history.items()\n", - " ]\n", - " merged = reduce(\n", - " lambda left, right: pd.merge(left, right, on=[\"time\"], how=\"outer\"), data_frames\n", - " )\n", - " return merged.melt(id_vars=[\"time\"]).assign(name=name)\n", - "\n", - "\n", - "result_df = pd.concat(\n", - " [history_to_dataframe(key, history) for key, history in results.items()]\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's display the evolution of the proxy objective and the performance of these three strategies on the final objective." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 10;\n", - " var nbb_unformatted_code = \"import pandas as pd\\nimport matplotlib.pyplot as plt\\nimport seaborn as sns\\n\\n\\ndef plot_history(history):\\n nplots = len(history.keys())\\n fig = plt.figure()\\n fig, (axes) = plt.subplots(nplots, 1, sharex=True)\\n fig.subplots_adjust(wspace=0.1)\\n fig.set_size_inches(17, 25 * nplots / 10, forward=True)\\n\\n minTime = min(\\n [\\n min([pd.Timestamp(m[0], unit=\\\"us\\\") for m in measurements])\\n for cname, measurements in history.items()\\n ]\\n )\\n maxTime = max(\\n [\\n max([pd.Timestamp(m[0], unit=\\\"us\\\") for m in measurements])\\n for cname, measurements in history.items()\\n ]\\n )\\n\\n plt.xlim(minTime, maxTime)\\n\\n for ((columnName, measurements), ax) in zip(history.items(), axes):\\n ax.set_title(columnName)\\n dataframe = pd.DataFrame(\\n data=[(pd.Timestamp(t, unit=\\\"us\\\"), m) for t, m in measurements]\\n )\\n dataframe.columns = [\\\"time\\\", \\\"value\\\"]\\n if dataframe.dtypes[\\\"value\\\"] == \\\"object\\\":\\n sns.catplot(ax=ax, x=\\\"time\\\", y=\\\"value\\\", kind=\\\"swarm\\\", data=dataframe)\\n else:\\n sns.lineplot(ax=ax, x=\\\"time\\\", y=\\\"value\\\",data=dataframe)\\n return (fig,minTime, maxTime)\";\n", - " var nbb_formatted_code = \"import pandas as pd\\nimport matplotlib.pyplot as plt\\nimport seaborn as sns\\n\\n\\ndef plot_history(history):\\n nplots = len(history.keys())\\n fig = plt.figure()\\n fig, (axes) = plt.subplots(nplots, 1, sharex=True)\\n fig.subplots_adjust(wspace=0.1)\\n fig.set_size_inches(17, 25 * nplots / 10, forward=True)\\n\\n minTime = min(\\n [\\n min([pd.Timestamp(m[0], unit=\\\"us\\\") for m in measurements])\\n for cname, measurements in history.items()\\n ]\\n )\\n maxTime = max(\\n [\\n max([pd.Timestamp(m[0], unit=\\\"us\\\") for m in measurements])\\n for cname, measurements in history.items()\\n ]\\n )\\n\\n plt.xlim(minTime, maxTime)\\n\\n for ((columnName, measurements), ax) in zip(history.items(), axes):\\n ax.set_title(columnName)\\n dataframe = pd.DataFrame(\\n data=[(pd.Timestamp(t, unit=\\\"us\\\"), m) for t, m in measurements]\\n )\\n dataframe.columns = [\\\"time\\\", \\\"value\\\"]\\n if dataframe.dtypes[\\\"value\\\"] == \\\"object\\\":\\n sns.catplot(ax=ax, x=\\\"time\\\", y=\\\"value\\\", kind=\\\"swarm\\\", data=dataframe)\\n else:\\n sns.lineplot(ax=ax, x=\\\"time\\\", y=\\\"value\\\", data=dataframe)\\n return (fig, minTime, maxTime)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "import seaborn as sns\n", - "\n", - "\n", - "def plot_history(history):\n", - " nplots = len(history.keys())\n", - " fig = plt.figure()\n", - " fig, (axes) = plt.subplots(nplots, 1, sharex=True)\n", - " fig.subplots_adjust(wspace=0.1)\n", - " fig.set_size_inches(17, 25 * nplots / 10, forward=True)\n", - "\n", - " minTime = min(\n", - " [\n", - " min([pd.Timestamp(m[0], unit=\"us\") for m in measurements])\n", - " for cname, measurements in history.items()\n", - " ]\n", - " )\n", - " maxTime = max(\n", - " [\n", - " max([pd.Timestamp(m[0], unit=\"us\") for m in measurements])\n", - " for cname, measurements in history.items()\n", - " ]\n", - " )\n", - "\n", - " plt.xlim(minTime, maxTime)\n", - "\n", - " for ((columnName, measurements), ax) in zip(history.items(), axes):\n", - " ax.set_title(columnName)\n", - " dataframe = pd.DataFrame(\n", - " data=[(pd.Timestamp(t, unit=\"us\"), m) for t, m in measurements]\n", - " )\n", - " dataframe.columns = [\"time\", \"value\"]\n", - " if dataframe.dtypes[\"value\"] == \"object\":\n", - " sns.catplot(ax=ax, x=\"time\", y=\"value\", kind=\"swarm\", data=dataframe)\n", - " else:\n", - " sns.lineplot(ax=ax, x=\"time\", y=\"value\",data=dataframe)\n", - " return (fig,minTime, maxTime)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/nix/store/ws7algif7c1inwk7s6hvmml5rhsfca4w-python3.7-pandas-0.24.2/lib/python3.7/site-packages/pandas/plotting/_converter.py:129: FutureWarning: Using an implicitly registered datetime converter for a matplotlib plotting method. The converter was registered by pandas on import. Future versions of pandas will require you to explicitly register matplotlib converters.\n", - "\n", - "To register the converters:\n", - "\t>>> from pandas.plotting import register_matplotlib_converters\n", - "\t>>> register_matplotlib_converters()\n", - " warnings.warn(msg, FutureWarning)\n" - ] - }, - { - "data": { - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+gAAAFNCAYAAACT7UWQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd3hc5Z328e9P3apWl9x7741iuo0xnRACOIUEEiAQsgkb3jSySXaT3SS76ZAESCAkhECAhN5sMGDANm7gLnfZkq3euzQzz/vHGRm5S7Kkkez7c126ZuacM+c8MxqNzn2eZs45RERERERERCS0wkJdABERERERERFRQBcRERERERHpFRTQRURERERERHoBBXQRERERERGRXkABXURERERERKQXUEAXERERERER6QUU0EVERPogMxtmZs7MIkJw7AVm9lw3HyPXzOZ35zF6mpllmtlWM4sOdVlERKR3UkAXERHpJmb2QzNrMbNaM6s0s+VmdlY3HettM/tSm8cXmFmFmd3YDYf7H+CnbY7lzKwu+Dr3m9kvzSy8G47brczsC2b2XpvHuWbWYGY1bX5/XzazY54/mVm0mT1iZtVmVmhm/966zjlXBLwF3Na9r0RERPoqBXQREZGTdIJa7H845+KBNLxw9nQPlGcB8Bxwi3PuyS7e92wgyTm38rBVU4Ovcx7waeDWrjxuCF3pnEsAhuJdlPgW8PBxtv8hMDq4/YXAN81sYZv1jwO3d09RRUSkr1NAFxGRPsPMvhWsoa0xs21mNi+4PMzMvm1mu8yszMyeMrOU4LrWpuCfN7N9ZlZqZve22eccM1sTrPEsMrNftll3lZltDtaevm1m49usyw2WZwNQd6Km5s45H144G2hm6cF9JJvZS2ZWEqztfsnMBrU5xttm9hMzW2VmVWb2fOvrOs57dAXwFPBp59yzbZaPM7MlZlYefO+uDy6fHXzdEW22/aSZfXSMQ1wKvHOc15kDvAtMCu6r9fdSY2ZbzOwTh5X31mCz79b1M47ymsaZ2Z7W1gDH26eZhZvZL4K/5z1mdlfbrgBmlmRmD5tZQfCz9OP21PY756qccy8ANwCfN7NJx9j0JuBHzrkK59xW4I/AF9qs/wAYYWZDT3RMERE5/Sigi4hIn2BmY4G7gNnBGs1LgNzg6n8DrgHOBwYAFcDvDtvFOcBYvBre77cJ278BfuOcSwRG4oVbzGwM8ATwdSAdeAV40cyi2uxzEXA50D8YwI9X/ii88FYWLB94/4f/jFfbOgRoAO4/7Kk3AbcEX5cP+O1xDnMl8DfgOufcK22OHQcsAf4OZATL/Xszm+icWx0s08Vt9vNZ4LFjHGMysO04r3MCcC7wYXDRruDjJOA/gb+ZWXZw20/h1TjfBCQCVwXL0nZ/M4DFwFfbtAY45j7xau4vBaYBM/A+F239Be99HAVMBxYAX6KdnHOrgPzg8Q9/7cl4v6f1bRavBya2eb4P2AlMbe8xRUTk9KGALiIifYUfiAYmmFmkcy7XObcruO524F7nXL5zrgkv9F13WK32fzrnGpxz6/FCU2tAagFGmVmac662TdPtG4CXnXNLnHMtwM+BfsDZbfb5W+dcnnOu4Tjlvt7MKvHC96144dkH4Jwrc8790zlX75yrAf4b7yJDW4855zY55+qA/wju71g1vhcC24H3D1t+BZDrnPuzc87nnFsH/BO4Lrj+L3ihnGAN/SV4Yf5o+gM1R1m+zswqgBeBP+FdeMA597Rz7oBzLuCc+wewA5gTfM6XgP91zq12np3Oub1t9nku8ALweefcS60LT7DP6/EuuOQ75yo4tK98Jl54/7pzrs45Vwz8CuhoP/0DwNFaMsQHb6vaLKsCEg7brgbvfRQRETmEArqIiPQJzrmdeLXZPwSKzexJMxsQXD0UeDbYFL0S2IoX6DPb7KKwzf16Pg5TXwTGADlmtjrYRBy8mtCDYdE5FwDygIFt9pPXesfMPmPeIGm1ZvZqm22ecs71D5ZlEzCzzXNizexBM9trZtXAMqD/YQE8r839vUAkXn/2o/kPoAl4zg4dKXwocEbr+xN8jz4DZAXX/w240szi8QLuu865gmMco4IjAyfADOdcsnNupHPue8H3CzO7ycw+anPcSW3KPxivNvxYvgwsd8691XbhCfY5gEPfs7b3h+K9fwVtnvsgXquCjhgIlB9leW3wNrHNskSOvKCRAFR28JgiInIaUEAXEZE+wzn3d+fcOXhBywE/C67KAy51zvVv8xPjnNvfjn3ucM4twgtpPwOeCTYJPxA8DgBmZniBsu0+XZv9PO6ciw/+XHqU45Ti1fT/sE1z7G/gNbs/I9jE/rzWw7V56uA294fg1fiXHuPl1AGX4TX9fsbMIoPL84B3Dnt/4p1zdwTLth9YAXwC+BzHbt4OsAHvgsYJBftZ/xGva0Jq8ELFpjavLw+vW8GxfBkYYma/6sA+C4BBbfbR9v3Lw7uAkdbmfUh0zk2kncwbJG8g8N7h64I19gUc2nx9KrC5zfMj8JrXr0dEROQwCugiItInmNlYM7soWDPciNdk3B9c/QDw360Db5lZupld3c79ftbM0oM1vq21mn68vuiXm9m8YND9Bl64W97Z1xAcQO114JvBRQnB11EZbFr+g6M87bNmNsHMYoH/Ap5xzvmPsl3rMWqAhXg1yX8P1sa/BIwxs8+ZWWTwZ3abfvgAfw2WazLw7BE7/tgrHNkM/1ji8C5ilACY2c0EB48L+hNwj5nNNM+owwZPa30t55nZT9u5z6eAr5nZQDPrjzfqOgDBVgGLgV+YWaJ5gwuONLMTvp7g9lcATwJ/c85tPMamfwW+Z94AgOPwujU82mb9HLzuBnuP9mQRETm9KaCLiEhfEY3Xn7gUr7l6BvDd4Lrf4PVVXmxmNcBK4Ix27nchsNnMaoP7udE51+ic24bXL/u+4DGvxJtyq/kkX8f/AbeZWQbwa7x+7aXBMr92lO0fwwt4hUAM3oB4x+Wcq8Qb9G0MXmCswxsM7Ua8lgGFeK0F2jaDf5ZgV4Fgf/dj7XsdUGVmJ3x/nXNbgF/g1c4X4YX/99usfxqv3/3f8cL4cxzWt7vNa7nUzH50on3i1a4vxqvp/xDvgoKPjy/m3AREAVvwmus/A2RzbC8GP1N5wL3AL4Gbj7P9D/Ca7e/FG+3+/5xzbX+vn8G7oCQiInIEc86deCsRERHpcWb2Nl5t7Z966Hi7gNudc2+cYLsFwJ3OucNHSO91zOxS4AHnXMinNQtelHkHmO6cawx1eUREpPdRDbqIiIhgZp/Eazq+9ETbOucW99Zwbmb9zOwyM4sws4F4NdrHa7LfY5xzxc658QrnIiJyLBEn3kREREROZcGa+gnA51pHX+/DDG9u9H/g9e9/Gfh+SEskIiLSTmriLiIiIiIiItILqIm7iIiIiIiISC+ggC4iIiIiIiLSC/S5PuhpaWlu2LBhoS6GiIiIiIiISIetXbu21DmXfrR1fS6gDxs2jDVr1oS6GCIiIiIiIiIdZmZ7j7Wux5q4m9kjZlZsZpvaLJtmZivN7CMzW2Nmc3qqPCIiIiIiIiK9SU/2QX8UWHjYsv8F/tM5Nw1vCpT/7cHyiIiIiIiIiPQaPRbQnXPLgPLDFwOJwftJwIGeKo+ISF8SCDjqmnyhLoaIiIiIdKNQ90H/OvC6mf0c72LB2UfbyMxuA24DGDJkSM+VTkSkF9hRVMM9T69nd2kdz3z5bMZmJYS6SCIiIiLSDUI9zdodwN3OucHA3cDDR9vIOfeQc26Wc25WevpRB7sTETnl+AOOB97ZxeW/fY995fXERIZzy6OrKa5pDHXRRERERKQbhDqgfx74V/D+04AGiRMRAXaV1HLdA8v56as5XDguncV3n8+fvzCb8rpmbv3LGhqa/aEuooiIiIh0sVAH9APA+cH7FwE7QlgWEZGQ8wccf3p3N5f95l12l9Txmxun8cBnZ5KeEM2kgUn8dtF0Nuyv4u5/fEQg4EJdXBERERHpQj3WB93MngAuANLMLB/4AXAr8BsziwAaCfYzFxE5He0preP/Pb2eNXsrmD8+g//5xGQyEmMO2ebiCZl87/IJ/OilLfzstRy+c9n4EJVWRERERLpajwV059yiY6ya2VNlEBHpjQIBx19W5PKz13KICg/jl9dP5RPTB2JmR93+lrnDyC2t48FluxmWFseiORo8U0RERORUEOpR3PuU/Ip6thyoZsHErFAXRUROEfvK6rnnmfWs2lPOhWPT+cm1U8hKijnuc8yMH1w5gbyKer733CYGJffj3NEaQFNERESkrwt1H/Q+5f9e38Ztj63lxfWarl1ETk4g4HhsRS4Lf7OMrQeq+d/rpvDIF2afMJy3iggP4/5Pz2B0Rjx3/m0d24tqurfAIiIiItLtFNDbqdkXYGlOMWbwrX9u0MmwiHRaXnk9n334A/7j+c3MHJrM63efx/WzBh+zSfuxxEdH8MgXZtMvKpyb/7yakpqmbiqxiIiIiPQEBfR2Wrm7jJpGH/99zWTioiP48mNrqW5sCXWxRKQPcc7x9w/2sfDXy1ifV8lPrp3MX2+Zw4D+/Tq9zwH9+/Hw573p1770V02/JiIiItKXKaC30+IthcRGhXPtjIH87tMz2Ftezz1Prdc0RyLSLrmlddz0yCq+++xGpg7uz+t3n8eiOUM6XGt+NJMHJfGbG6exIb+Sf39K06+JiIiI9FUK6O0QCDiWbCni/DHpxESGM2d4Ct+9bDyLtxTxh3d2hbp4ItKLbTlQzVef+JCLfvE2a/dW8KNrJvG3L57BoOTYLj3OgolZ3HvZeF7dVMj/vr6tS/ctIiIiIj1Do7i3w4b9VRRVN7FgYubBZbfMHcZHeZX8YvE2pgxK0gjKPeDh9/bwl+W5nD8mnUsmZnHGiBQiw3WNSXqn1bnl/P6tnby1rYS4qHBuPXcEXzxn+BHzmnelL54znD2ldTzwzi6GpcZyo6ZfExEREelTFNDb4fXNhUSEGReN/Tigmxk/++RkthfW8G9PfMiLXz2ny2vE5GNbDlTz01e3MrB/P55em8djK/eS1C+SeeMyWDAxi/PGpBEbpY+zhJZzjre3l/CHt3axKreclLgovnHxGG46axhJsZHdfnwz4z+vmkheRQP3PreJQcmxnDM6rduPKyIiIiJdw5zrW30VZ82a5dasWdOjx5z3i7fJTurH3750xhHr9pTWcdV97zEsLY6nv3wWMZHhPVq200GzL8BV979HaW0zS+4+j5jIcN7dUcLrm4t4M6eIyvoWYiLDOHe0V7M+f3wG/WOjQl1sOY34A45XNhbwh7d3saWgmgFJMdx63ghumD04JBeOahpbuO4PKzhQ1cC/7jib0ZkJPV4GERERETk6M1vrnJt11HUK6Me3s7iW+b98h/+6eiI3nTXsqNss2VLErX9dww2zBvOz66b0WNlOF79YvI37lu7kjzfN4uIJmYes8/kDrNpTzuubC1m8pYiCqkbCw4wzhqewYEImCyZmndQI2SLH0+Tz8+y6/Tzwzi5yy+oZkR7HHeeP5OppA4mKCG33i/yKeq753XJiIsN49s65pCdEh7Q8IiIiIuJRQD8Jf3h7Fz97LYfl377ouEHv569v4/63dvKTayez6BTt91lW28Tu0jpmD0vpsWOuz6vk2j8s5+ppA/jl9dOOu61zjo37q3h9cyGvby5iZ3EtAFMGJXHJxCwWTMhkVEZ8l4ya3ZP8Acf7O0t5ak0eG/dX0S8ynPjoCOKiI4K34cRGRbRZFk7cIesjiIvylqXERamVRxeoa/LxxKp9/PHd3RRVNzF5YBJ3XjCSBROzCA/rPZ+v9XmV3PDQCsZlJfLkbWfqdy8iIiLSDtWNLWwrrCGnoJrqRh9njUxl6qD+XXaep4B+Ej7x+/fxBxwv3HXOcbfzBxw3P7qalbvKePrLZzF1cP8eKmHPqGvy8ck/LCensIbff2YGl03O7vZjNrb4ueK+96ht9PH63eeR1K9jfXh3ldR6Neubi/gorxKAISmxTB/Sn2mDvZ8JAxKJjuidoSW3tI5n1ubzz3X5FFQ10j82krNHptLsc9Q1+ahr9nm3TX7qmnzUNvs40Z9zTGQYCydm8alZgzlrRCphvShM9gUVdc08ujyXv6zIpbK+hbNGpHLnhSM5Z1Rar73w89qmQu54fC2XTcrmvkXT++zv3OcPUNfk75G+/CJdwTnHjuJa3t9Zyvs7yyira2L++EyunDKAIak9N2bNvrJ6XtlUwPq8SmYOTWbBhKwePb6ISG/m8wfYU1rH1mAY31ZYQ05hDfsrG47Ytn9sJOeMSuOCsRmcNzrtpAb+VUDvpKLqRs74nze5Z8EY7rpo9Am3r6hr5or73sM5x4tfPYfU+FOjSWkg4Ljj8bUs2VLEiPR48ivqefr2s5k8KKlbj/uTV7by4LLdPHrzbC4Ym3FS+yqsamTJlkLe31nGR3mVFFY3AhAVHsb4AYlMH9yfqYOTmDY4mWGpsSELW3VNPl7eWMAza/JZlVtOmMF5Y9L51MzBzJ+QcdyLCc45Glr81Db5qG/ybluDfG0wxG/aX8WL6w9Q3ehjYP9+fHLGQK6bObhHTtaafQFqm3ykxPWt8QFa/AFW7Crj5Q0FvLjhAPXNfi6ekMkdF4xkxpDkUBevXR5atov/eSWHm84ayp0XjCIrqftGku9Kzb4A7+8q5bWNhSzeUkhFfQtDU2OZMSSZGUP6M2NoMmMzE4jQbA7SS+yvbOD9naUs31nK+7vKKKlpAryLw8mxkazPrwJg6qAkrpw6gMunZJOd1PXdsPaU1vHKxgJe2VjA5gPVAGQlxhz83zcmM5754zO5eEImUwf177MX7kRE2ss5R0ltEzkFNeQUVpNTWENOQQ07i2tp9gcAiAgzRqbHMzYrgXHZCYzPSmRsVgL9IsN5d2cp72wr4Z3tJZTWet/tE7ITOX9sOuePSWfm0OQOzS6lgN5Jf1u5l+89t4kld5/X7kGWNu2v4to/LGf2sGT+cvOcLj1x3F/ZQGlNU4/Xzv9qyXZ+8+YOvnf5eK6ZPpCr7/daFTx/11wyu2nKqLV7y7nugRXcOHswP7m26/v1F1Y18lFeBR/mVfLRvko27q+ivtkPeFfHpg4K1rIP6c+0Qf1J7sZQ6ZxjdW4FT63J45WNBdQ3+xmRFsd1swZx7fRBXR6mGlv8LN5SxDNr83l3RwnOwZzhKXxq5iAum5xNXHTXDGrm8wfYdKCa5btKWbGrjNW55TS2BBiSEsvsYSnMGZ7M7GEpDE+L63W1zz5/gJW7y3l54wFe2+QFw/joCBZOyuLWc0cwNqtvDbrmnOP7z2/msZV7AZg4IJF54zK4aHwmUwYm9aqT88YWP+/uKOXVjQUs2VpETaOP+OgI5o3PYExmAhvzq1i7r+Jg8ImNCmfa4P7MGJLMzKHJTB/SX4NESo+pqGtmxe6yYC15Kbll9QCkxUdx9sg05o5K5eyRaQxO8S6C5lfUH7zYt2m/F5xnD0vmiikDuHRyFhkJnf++31VSyysbCnhlUyFbC7x9Txvcn8snZ7NwUhaDU2LZV1bPG1uLWLKliFW55fgDjrT4aOaPz2D++EzOGZ3WpV1hnHOU1TWzu6SOFn+A2cNSQj4+h8ixOOcorW0mr6Ke/IoG8sq92/yKeuqb/YxMj2N0RgKjM+MZk5lAdlJMrzt/kUO1+AP8a10+L6w/QE5BDWV1zQfXZSZGMy4rkXHBMD42M5GRGXEnbFkbCDi2FlbzzvYS3tlWwtq9FfgCjvjoCM4emerVro9JO+HsXgronXTTI6vIK69n6TfO79Af4FNr8vjmMxu444KRfGvhuJMux6b9VTy0bDcvbywg4By/un4a10wfeNL7bY9XNxZwx+PruG7mIP7vuimYGVsLqvnkH5YzKiOef9x2Fv2iuraJeEOzn8t++y7NvgCv330e8V0UGI/H5w+wo7iWj4KB/aO8SrYX1xxsMj40NZZpg/szcUAiWUn9yEqMISsxhozE6E6fzByobOBf6/J5Zm0+uWX1xEWFc8WUAVw/exAzhiT3yJd+QVUD/1q3n6fX5JFbVk9sVDiXT87mupmDmDM8pUNlCAQcOYU1LN9VysrdZXywu5yaJh8A47ISOHNEKtlJMazbV8Hq3ArKg1+SafFRzBqawuzhKcwZlsL47NDUiLYOOPjSxgJe21RIeV0zcVHhzJ+QyeWTszlvTHqf7sPd2tx2aU4xS7cWs2ZvOQHnvf8XjM1g3rgMzhmdRkJMzzchr2/28fa2El7dVMjSrUXUNftJ6hfJxRMyuWxyFnNHpR3yD9M5R35FA+v2VbBubwVr91WwtaAGf8D7gx2ZHncwsM8Ymsyo9PgevwgRCDia/QGafAGafH6afQGcg4SYCBJiInvVWAVt1Tf7yCtvYF95PXvL6sgrr2df8KeqoeXg2BYJMRHER0cGb4OPYyJIiPZeX3x08HFMBAnRkQfvd6R2oTeqb/axOreC5TtLeW9nKVsKqnEO4qMjOGN4CmeP8kL52MyEE35/7imt4+UNB3hxfQHbimoIMzhzRCpXTBnAwklZ7WpttKOohlc2FvLKRm8fADOHJnPppCwunZzNwOOMnVNV38Lb24tZvKWId7aVUNvkOzgjysXjM7lofAZp7WwJ2OTzs7esnt0ltewqqWN3SR27S2vZXVJHVUPLwe2S+kWycGIWV04dwJkjUtT65TRQXN3Ib5fuYOXuckakxTEuO5HxWQmMy05kSEpsj34XOueorG85IoC3Ps6vqKexJXDIc1Liohic3I/oyHB2l9RSWvtxwIuPjmBURjxjgoHdu6/g3hu0BvP7lu4kv6KBMZnxTB+czLjshIOhvKsq32oaW3h/ZxnvbC9h2faSg03jR2XEc/4Yr3Z9zvCUI84he0VAN7NHgCuAYufcpDbLvwrcBfiAl51z3zzefnoqoFc3tjDzR0u4Ze5wvnPZ+A4//7vPbuTvH+zjgc/OZOGkrA4/v3U+5T8u283yXWXER0ewaM5gNu6vYnVuBfcvms6l3dwPfGtBNdf+fjnjshN48rYzDzlBXrKliNseW8Plk71+rV35RfTDFzbz6PJc/n7rGZw9MnRzONc2+diYX+WF9rwKPsqrpKi66YjtkmMjyUyMITMY2jOTvNuspGgyEmLISoohJTaKsDCjscXPki1FPLUmj/d2luIcnDkihU/NHMylk7NCNpe7c441eyt4Zk0+L204QF2zn6GpsVw3YxDXzhx01JM85xy7SupYsauUFbvLWLGrjIp670RseFocZ41M5eyRqZw5IvWIk7zW567OLWf1nnJW7y0nr9z7QouLCmfGUK92ffawFKYP6d9twdgfcHywx2u+/vrmQkprm4mNCmfeeC+UXzC2b4fy46msb+ad7SW8ubWYt7cVU93oIzLcOGN4KheNy+CicRkMS4vrtuPXNLawNKeYVzcW8vb2YhpbAqTGRbFgYiaXTsrmrJGpHQpz9c0+1udVHQzt6/ZVHPw8JsREMH1IMmMy4jGDgPN+9845Ag4CrbcBd/C+t87hD653zuHzB0N3SyAYvr3g3eQLHHbrp8V//P+tcVHhJPbzAm5iTPC2zeOjrYuP9gJuZLgRFR7m3Y/4+HF7vocDAUdxTdPB0L2vvJ68YBjfV95wsNleq/joCIakxDI0NZbkuCjqm3zUNPqoafJR2+ijpqnFu2304Quc+HwiOiKMhJhIElvDezDMt95PCC5vfd3xbZZHR4TR0OynrtlPfbPXlae+xU99k4/61mXN/oP365r93vbB9c2+AGYQHmaEmRFmEBa8H26GGd79sEPvhwXvV9a38GFeBS1+R2S4MWNIMnODgXzKoP4ndfFhe1ENL60/wIsbCthTWkdEmDF3VBpXTMlmwcSsg2OwOOfYXlTLyxsLeHVjATuKazGD2UNTuHRyFpdOyu5Uq6tmX4AP9pSxZEsRb2wp4kBVI2YwY0jywabwI9PjKKlp8gJ4MHy3BvL8inra/vozE6MZkRbPiPQ4RqR7ty2+AK9sLGDJFu8iXGpcFJdOzuLKKQOYPSylV7XkkZNX09jCQ8t286d399DiD3D2qDTyK+rJLa07+FmJiQxjbKYXmNo2Ke5scKpr8lFQ1UhhVSMFVQ3ebbX3+EBlA/kVDdQGKw5aJfWLZFByPwYl92Nwcqx3mxLLoOD9w1sVltc1s72ohh3FtewoqmF7kddEum1wT4iOYFRmPKODgX10ZgITshM1m0oPaPEHeHbdfu57awd55Q1MHZTE1+eP4YKx6T1y0cQ7v63l7WBT+A/2lNPsCxATGcbK78w7pIVfbwno5wG1wF9bA7qZXQjcC1zunGsyswznXPHx9tNTAf35j/bztSc/4p93nMXMoR0ftbzJ5+f6B1eyq7iW574yl1EZ8e1+3gsfHeCP7+5me1EtWYkx3Dx3GIvOGEJiTCR1TT5uemQV6/MqefBzM5k3PvPEO+2E8rpmrrr/PXx+xwt3zT3qIAgPvLOLn76aw93zx/C1+Sfuo98eK3aVseiPK/n8WUP5z6snnfgJPayqoYWi4Jd9YXUjRa231Y0UVTdRWN1IaW3TEYO1RYYbGQkx1DS2fNz/e+YgrpsxqNcN1lPf7OPVjYU8vTaPlbvLMYO5I9P41KxBTB6YxJrcCpbvKmX5rjKKg82MByTFcPaoNM4emcpZI1M71aeyoKqB1bkVXmDPLWdbkdeCITLcmDwwidnDU5g0IImkfh+fxLee3MdGhbf7i9cfcKzOLeflDQW8uqmQ0tom+kWGM298BldMyeb8MRld3iqkt/P5A6zdW8HSnGLezCk+OAPCiPQ4ryn8uExmDetY36qjqapvYcnWIl7bVMCy7aU0+wNkJESzcFIWCydlMWdY19WoOefILatnbTCsr9tbQW5ZXTCYHRrOwgwseOsFNSMsjEO3DYa16IgwoiLCiI4ID96GHXZ7+PKPHwNeuG1soboheNvYQk2j7+PbhpZ2h93DRYZbMMB7P1HhFgzw3k+zz09+RQNNvo9riMIMspP6MSQl1vtJjf34fkos/WMj2/W35ZyjyRegptFHbZP32mrbBvng66tt8lHd5vHHt979umBXo86KCDNig7NW9IsKJy6q9db7PQSmOE4AACAASURBVLRefPEH2l6ccQQC4A9eiGld55zDH1wXcI6YyPCDteSzhyV3ywVV5xybD1Tz0oYCXlx/gP2VDUSFh3HemHRGZsSxZEsRu0vqMIM5w1K4fEo2l0zM6tLuZs45thRUe2F9a9HBpvgxkWGH1C7GRIYxPBjCR6Z5QXxkejzD0+OO2/KtscXP29uKeXF9AW/mFNHYEiAzMZrLJw/giqnZTB/cX7WPfViTz8/fVu7j/qU7qKhv4cqpA/jGxWMOXvBtbPGzo6iWrYXVh/QFLj+s6fHYrNaadi/AZyXGUFLbFAzgDW2CuBfGC6oaqWn0HVGe1LgospJiyE6KYVBybDB8e2F8YHK/Dg9AfCxltU0HQ/uO4lovxBfVHtKketbQZC6bnM1lkzt3Ia2jWr9PlmwpIqewmn6R4cQGZ/bpF+Xdtj6Ojfp4VqC46HBiIyOIjfa+Q2Mi23cBOJRa/AGe/XA/9y/dyb7yeqYMSuLr80dz4diMkJa9odnPyt1lbD5QdcR4Zr0ioAcLMgx4qU1Afwp4yDn3Rnv30VMB/St/X8cHu8tZ9d15nb6qe6CygSvve4/kuCie+8rc4/7Dqmpo4fEP9vLo+7kU1zQxLiuB284bwRVTBhzRX6u6sYXP/ukDcgpqePgLszh3dHqnyncsLf4An3v4A9btq+Tp2489Ir1zjnue3sA/1+Vz/6enc8WUASd13NomHwt/vYyIMOOVr50bstrkk9XiD1BS03QwwBdVN1JY3URRdSMRYcbV0wZy9si+MYJ6Xnk9z6z1muG3Hc0yLT76YA352SNTGZLS9QPrVdW3sGZvuRfac8vZkF95zFrJMCNYC/dxeG99/HEz2wiKa5p4dVMhJTVNxESGMW9cJpdPyebCsadfKD+evWV1XlP4nGI+2F1Osz9AQkwEUwf1x8y7yHHwxzkCwVufP1jrfMg68AUC+ANerb0v4BiQFMPCSdlcNjmLGUOS+8TfQk9qHfCxNbBXBy/s1TX5vFp8n1eD33Lwx1t2yGN/gBbfoY8jwozBKd4J6tBgAB/Qv1+v6hPsD7iDAb9tcK9p9NHsC3hhOzqcfpEfn0zGtgnivem1nCznHB/lVfLi+gJe3niAkpomzhyRyqWTs7lkYuZJ9VfviAOVDbyZU8zuklqGpcYdrBXPTow56b/duiYfb2wt4qUNBbyzrYRmf4CB/ftxxdRsrpwygIkDEnt9MBCPP+B4/qP9/GLxdvZXNnDu6DS+ecm4dg0o3J7Buw5n5p2LZAdbLWYnxZCV1I8B/Vsf9zupbohdpTW4r9pTzisbC8gp9LqidFdYb/L5WbGrjDe2FvHGlmIKqxsJM69loy/gqGv6uLVRe5l5FzrGZycyaWASkwYkMWlgYrec+3WUrzWYv7WTvWX1TB7oBfOLxoU2mLdHbw7oHwHPAwuBRuAe59zq4+2jJwJ6k8/PjP9awlXTBvKTayef1L6W7yzlsw9/wKWTsrn/00c2Bc+vqOeR93L5x+p91DX7OXd0GreeO4JzRx9/2qbK+mZufGgluWV1PHrzHM4ckXpS5WzrP57bxGMr9/LrG07c173J5+czf/yAjfurePrLZzFlUOcHsPvusxt5YtU+nr79LGb14FzrcmKBgGPl7jJyy+qZPSw5JPPJN7Z4fRxrGluoCTazba2Zq21tdnvY47Yn+k2+ANERYVw0LoPLp2Rz0biMPnsRqCfVNvl4b0cpS3OK2FZYg5kREWaEhXm3rc2FW5eFmxEe7t0eviwlNor5EzKZOiip1//jFOlNAgHvok1XDeLZG1U3trB4cxEvbTjAeztK8QUcw1JjuXLqAK6YMqDPDc4JXvCsamihoKqRMDPGZPb8/87u1tol82ev5pBTWMOkgYl8a+G4Lqk8avEHyA1Of1Vc3UjmwSAeQ0ZCTJ+8INc6mOPLbcL6zKHJXD45m0snZ3WqBWJ5XTNv5RTzxtYilm0voa7ZT2xUOOeNTmf+hEwuHJt+xMxSrd8pda3dhdp0Dapv8h3sStQa6IuqG9l8oJrtRTUHK0sSYiKYOCCRyQOTmDQwiYkDkhieFtcj4wr4/AGe++gA9y3dwd6yeiYNTOTr88Ywb3zvD+atenNA3wQsBb4GzAb+AYxwhxXKzG4DbgMYMmTIzL1793ZrOd/aVszNf17Nn2+ezYUnOb0XwIPv7OInr+Zw72XjufW8EcChA78ZcOXUAXzp3OFMHND+qctKa5u48aGVFFQ28NcvnsHMoSc/5dPjH+zl3mc3cft5I9rd9760tomr738fXyDA8185p1NXApdtL+GmR1Zx67nDuffyCR1+vsiJNPn8GNYn/6GLiJxOKuqaeW1zIS9tOMCKXWUEHMwY0p9Hb5lDYggGsjyatuG7sKqRA8E+zwcqGymsbqCg0mt+3dDycU3l+OxEPj1nMFdPH9hrXsfJ+HBfBT99NYcP9pQzNDWWexaM5fLJ2WoV1U67S2p5ZWMBL204NKx7NevHD+u7S2oP1pK3DvqamRjN/PGZzJ+QyVkjUrul9UCTz+uisGl/FRv3V7HpQDVbC6ppDnadio0KZ0JrTftAr6Z9VHp8l3Vf8/kDPB8M5rll9UwckMjX549hfh8K5q16c0B/Dfipc+7t4ONdwJnOuZJj7aMnatC/86+NvPDRftZ9/+ITDrXfHs457nx8HYu3FPGdS8exNKf4kIHfbp47nAHHGWn1eIqqG7n+wRWU1zXzxK1nMmlg5+cm/2B3GZ/50wecMzqNhz8/u0NXwHIKq/nk75czIj2ep27v2MjuVQ0tLPz1MmKjwnn5384NeXMkERER6R1Kapp4Yf0BfvLKVs4bk84fb5rV47Mg5FfU89TqPPYfJ3yD192qtZY3O6nfwb7P2Un9KK9r4olVeWwpqCYmMowrpwxg0RlD+mSf+10ltfz89W28uqmQtPgo/m3eaG6cPUQXwE9Ca1h/eePH0yS2DesZCd4sOG9sKWLJVm8sCvDm4Z4/IZOLx2cyaWBouoS0+APsKqll0/5qNu2vYtP+KrYUVB9sRh8dEcaI9HhS46JIio0kOTaS5Ngo+sdG0b9fJMlxkR/fj40isd+RM534/AFeWH+A+5buZE9pHROyE/n6/NFcPCGzz/39tOrNAf3LwADn3PfNbAzwJjDk8Br0tro7oPsDjjP+503OGJHC7z49o8v2W9vk4+r732NXSd0RA7+drP2VDVz/wArqmn08eduZjMtK7PA+8ivquer+9+kfG8mzd87t1KAZb24t4kt/XcNlk7yR3dt7BfWep9fzr3X5/OvOuUzr4TneRUREpPd7bEUu//H8Zu66cBT3XDK2x45bVtvENb9/n/0VDYeE79am1tlJ/cju7y1Pj48+bk2hc46N+6t4YtU+nv/oAPXNfsZlJbBozhCumT6wywYs6y5F1Y38+o0dPLUmj5iIMG47byRfOnf4Kd31IhSOFtYTYiKoCc62cuaIVC6ekMm88ZnHnUoxlPwBx57SOjYf8AL7rpI6KuubqaxvoaK+maqGFo41FqqZN7p+/35ecE+OjSS3rJ49pXWMDwbzBX04mLfqFQHdzJ4ALgDSgCLgB8BjwCPANKAZrw/60uPtp7sD+tq95XzyDyv47aLpXDX15AY9O1xBVQPr8yq5aFxml19l3FdWz/UPrsAXCPDkbWe1e9R48Ebt/uQfVpBfUc9zX5nLyPT2P/dwDy3bxf+8ksPX5o3m7ovHnHD7N7cW8cW/rOErF47k/11y8nPGi4iIyKnHOce3/7mRf6zJ4/efmcFl3TzVLHhjn3z6jyvZfKCaJ287k+lDTr4rYavaJh8vfHSAJ1btY+P+KmIiw7h88gA+fcZgZgxJ7jXhwzlHfkUDT67ex8Pv7cEfcHzmjKHcddGoI6ZQla63p7SOVzYWkFdez7mj0zlvTBoJp0D3iEDAUdPoo6K+mYpgcK9saKairoXK+mYq6luobGi930y/yHC+eM4IFkzIPGW6UPSKgN5Vujug/+SVrTzy/h7W/sfFfa5/0K6SWm54cCXhYfDU7WcxNPXEcxg757jr7x/yyqYCHvnCyfe5d87xzWc28PTafO5bNJ0rj3ORo6KumQW/XkZqXBTP3zW3S7oTiIiIyKmpyedn0UMr2VpQw7/uPJvx2R1vMdhegYDj3578kJc2FHT7BYGN+VU8sXofz3+4n7pmP2My41k0ZwjXTh9EUmzPnosGAs4bdTy3nFV7ylm9p5zC6kYArp42gG9cPLbXTQ8r0hcpoLeTc44Lf/42Q1Lj+Ostc7rlGN1tW2ENNz60gtioCJ768lknbPpy35s7+MWS7Xzn0nHcfv7ILilDk8/PZ//0ARvyq3jqONO0/dsTH/LKxgKev2tuhwbHExERkdNTcXUjV9z3HtGRYbzwlXNIjovqluP83+s5/O6tXXxr4TjuuKBrzo9OpK7Jx4vrvVr19flVREeEcfnkbBadMYRZQ7unVr3FH2DT/ipW55azak8Fa/aWU1nfAkBWYgyzh6cwZ1gyc0elMeIkWliKyKEU0NtpR1ENF/9qGT++ZhKfPXNotxyjJ2zaX8WiP64kJS6Kp24/i8zEo4+qvnhzIbc9tpZPTB/IL6+f2qVf/GW1TVz9u/dp9gV4/q65R4xE+erGAu54fB13zx/D1+aP7rLjioiIyKntw30V3PDgSmYPT+YvN8/pshGiWz21Jo9vPrOBG2YN5qefnByS5uab9lfx5Op9PPfhAWqbfGQnxTCgfz9S46JIS4gmLT6a9Pgo0uKjSY2PJi3eW54QHXHc8jY0+/lwXwWrcstZnVvOur2VBwe7G54Wx5xhKcFQnsLglH69pqm9yKlGAb2d7l+6g58v3s4H3513zFDbV6zbV8Hn/vQBWUkx/OP2s47oJ7StsIZrf/8+IzO8Ude7Y+T01mMMT4/jqdvPOjjndGltEwt+tYyB/fvxrzvPJrKL/7GKiIjIqa01RH/pnOF874qum551+c5SbnpkFWeMSOHRm+eE/BylvtnHS+sLeG9nKaW1TZTWNlFW20x5fTNHO4WPiggjrU2IT4uPIjU+Gn/AsTq3nI35VfgCDjMYn5XInOEpzBmewqxhyWQk9O1zX5G+RAG9na66/z3Cw4xn75zbLfvvaR/sLuPzf17FsNQ4nrztTPrHes3AKuqaufp379PQ4ufFuzo3b3l7Lc3xBoG7dFIW9y+agRnc8bd1LM0p5sWvnsPYrIRuO7aIiIicun74wmYeXZ7LL6+fyrUzBp30/nYW13Lt798nMzGGZ+44u1ePqu7zByivb6a0ppmyOi+4l9Y0U1rbREkwxLcN9GYwdVD/g7XjM4Ym9+rXJ3KqO15A17wIQQcqG9iQX8W3Fp46I4mfMSKVP900m1v+sprPPbyKx289g9jIcO56Yh2FVY08efuZ3RrOAS4al8m9l43nxy9v5dfp2xmZEc9rmwv55sKxCuciIiLSafdePp6cwmq+/a+NjMqIZ8qgzk/VWlbbxM2PriIyPIxHvjC714fXiPAwMhJi2lXrHQg4/M6FvDWAiLSP/lKD3thaBMCCiZkhLknXOmd0Gg98dgY5hdV84ZFVfP+Fzby/s4z//sQkZnThdCHH88VzhnP9rEH8dulOvv3PjUwb3J/bzh3RI8cWERGRU1NkeBi/+/QM0uOjuf2xtZTUNHVqP40tfm796xqKq5v44+dnMTjl1BqlPCzMFM5F+hD9tQYt3lzEyPS4k5oDvLe6aFwm9y2azvr8Kv7+wT5umTucT80a3GPHNzN+fM1k5gxPweH4xfVTu3xAFxERETn9pMZH8+DnZlJR38ydj6+l2Rfo0PMDAcc9T69n3b5KfnXDtB6rvBARORalJKCqvoWVu8u4ZGJWqIvSbRZOyub3n5nBl84Zzncv6/lm/FERYTz2xTm8dc8Fp+RFEBEREQmNSQOT+Nknp7A6t4L/emlzh577yyXbeWlDAd9cOLZb5zoXEWkv9UEHlm4rwhdwLDiFAzrAJROzQnoRIjoi/Ijp1kRERERO1tXTBrKloJoH39nNxAFJLJoz5ITPeXpNHve/tZMbZg3mjvN7Zq5zEZETUQ06XvP2zMRopgxMCnVRRERERKQTvnnJOM4bk873n9/E2r3lx912+a5SvvOvjcwdlcqPPzFJ832LSK9x2gf0xhY/72wv4eIJmYSF6ctZREREpC8KDzPuu3E6A/v348t/82asOZqdxbV8+bG1DEuL4/efmakB1ESkVzntv5He21FKfbOfBRNO7ebtIiIiIqe6pNhIHrppFvVNPm5/bA2NLf5D1pfVNnHLo6uJDA/jz31gOjUROf2c9gF98ZZCEmIiOHNEaqiLIiIiIiInaUxmAr+8YRrr86u499lNOOcAr9XkbY+tpai68ZScTk1ETg2ndUD3BxxvbC3monEZREWc1m+FiIiIyCnjkolZfG3eaP65Lp9Hl+cSCDj+3zMbWLu3gl9er+nURKT3Oq1HcV+7t4LyumY1bxcRERE5xXxt3mi2FlTz45e3sia3gpc3etOpXT5F06mJSO91WlcbL95cSFREGOePTQ91UURERESkC4WFGb+8YRoj0uJ4eWOBplMTkT6hwwHdzDLN7GEzezX4eIKZfbEdz3vEzIrNbNNR1t1jZs7M0jpans5yzvH6lkLOGZVGfPRp3ZBARERE5JQUHx3Bn2+ezb2XjedH12g6NRHp/TpTg/4o8DowIPh4O/D1dj5v4eELzWwwcDGwrxNl6bScwhryyhtYMCGzJw8rIiIiIj1oUHIst543QuMNiUif0JlvqjTn3FNAAMA55wP8x38KOOeWAeVHWfUr4JuA60RZOm3x5iLMYN54BXQREREREREJvc4E9DozSyUYqM3sTKCqMwc3s6uA/c659SfY7jYzW2Nma0pKSjpzqCMs3lLIzCHJpCdEd8n+RERERERERE5GZwL6vwMvACPN7H3gr8BXO7oTM4sF7gW+f6JtnXMPOedmOedmpaef/IBu+RX1bD5QzYKJqj0XERERERGR3qHDo6M559aZ2fnAWMCAbc65lk4ceyQwHFgfHLBjELDOzOY45wo7sb92W7y5CEDTq4mIiIiIiEiv0eGAbmY3HbZohpnhnPtrR/bjnNsIZLTZby4wyzlX2tEyddTiLYWMzUxgWFpcdx9KREREREREpF0608R9dpufc4EfAled6Elm9gSwAhhrZvntmZqtO1TUNbNqT7mat4uIiIiIiEiv0pkm7of0NzezJOCxdjxv0QnWD+toWTrjzZxiAk7N20VERERERKR36YoJIeuB0V2wnx7x+uZCBiTFMGlgYqiLIiIiIiIiInJQZ/qgv8jHc5aHAROAp7qyUN2lodnPuztKuHH2EIID04mIiIiIiIj0Ch0O6MDP29z3AXudc/ldVJ5utWxHCY0tARZMUP9zERERERER6V060wf9ne4oSE9YsqWIxJgIZg9PCXVRRERERERERA7R7oBuZjV83LT9kFWAc8716k7dgYDj7W3FnD82g8jwruh6LyIiIiIiItJ12h3QnXMJ3VmQ7rZxfxWltc1cNC491EUREREREREROUJn+qADYGYZQEzrY+fcvi4pUTdZmlNMmMH5YzJCXRQRERERERGRI3S4rbeZXWVmO4A9wDtALvBqF5ery721rZjpQ5JJiYsKdVFEREREREREjtCZztg/As4EtjvnhgPzgPe7tFRdrLimkQ35VVw0TrXnIiIiIiIi0jt1JqC3OOfKgDAzC3POvQVM6+Jydam3t5UAcOFYBXQRERERERHpnTrTB73SzOKBd4HHzawYbz70XuutnGKyk2IYn92nx7kTERERERGRU1hnatCXAf2BrwGvAbuAK7uyUF2p2Rfg3R2lXDA2AzMLdXFEREREREREjqozAd2A14G3gXjgH8Em773S6txyapt86n8uIiIiIiIivVqHA7pz7j+dcxOBrwADgHfM7I0uL1kXWZpTTFREGHNHpYa6KCIiIiIiIiLH1Jka9FbFQCFQBvTa6um3coo5c0QqsVGdnvJdREREREREpNt1Zh70O8zsbeBNIA241Tk3pR3Pe8TMis1sU5tl/2dmOWa2wcyeNbP+HS3P8eSW1rG7tI6LxqZ35W5FRERE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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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WxJjbasZFiAiIiIiIiLS7KjFXURERERERMSLKXEXERERERER8WJK3EVERERERES8mBJ3ERERERERES+mxF1ERERERETEiylxFxERacWMMe2MMb91344xxrzr6ZhERETklzQdnIiISCtmjOkBfGKtTfBwKCIiIlILP08HICIiIh71OBBnjEkGtgD9rf3/9u4ftYsgjOPwZxS00dIT2Ab/IFh4BBttbBRFEEs7A17ASiy18AqWHsBKrEUFG/EEihoIpMlYJEIQ0oQYlvyep9rd2Rne7ebLO7BzbYxxv7pZnazWqufVqeputVVdn3P+GGOcr15U56rN6uGc88vRfwYAHF+OygPAantSfZ1zXqrW/xlbq25XV6un1eac83L1vrq3+86r6tGc80r1uHp5JFUDwArRcQcA9vN2zrlRbYwxflVvdp9/rC6MMc5U16rXY4y/c04ffZkAcLwJ7gDAfrb2XG/vud9uZw9xovq5260HAP4TR+UBYLVtVGcPMnHO+bv6Nsa4VTV2XDzM4gAAwR0AVtqc83v1bozxqXp2gCXuVA/GGB+qz9WNw6wPAPA7OAAAAFg0HXcAAABYMMEdAAAAFkxwBwAAgAUT3AEAAGDBBHcAAABYMMEdAAAAFkxwBwAAgAUT3AEAAGDB/gBPXDB9tHTn1wAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 11;\n", - " var nbb_unformatted_code = \"for k, h in results.items():\\n plot_history(h)\";\n", - " var nbb_formatted_code = \"for k, h in results.items():\\n plot_history(h)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "for k, h in results.items():\n", - " plot_history(h)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/notebooks/tutorial.ipynb b/notebooks/tutorial.ipynb index d142ccc..d602f35 100644 --- a/notebooks/tutorial.ipynb +++ b/notebooks/tutorial.ipynb @@ -16,254 +16,61 @@ "source": [ "## Setup\n", "\n", - "This notebook uses `nrm`'s python library bindings and needs the `nrmd` daemon in the `$PATH`. \n", - "\n", - "Assuming the project is cloned **with submodules updated** (and the code unmodified), one needs to run the following from the root of the project before running it:" + "This notebook uses `nrm`'s python library bindings. " ] }, { "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/home/fre/workspace/hnrm\n" - ] - } - ], - "source": [ - "cd .." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The next cell builds the shared libraries. This should take about a minute on a modern laptop." - ] - }, - { - "cell_type": "code", - "execution_count": 2, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ - "%%capture\n", - "%%bash\n", - "./shake.sh build # for the daemon \n", - "./shake.sh client # for the upstream client\n", - "./shake.sh pyclient # for the shared client library" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This allows to use the command-line daemon and client in the working directory, should you need to for debugging purposes. Those should be available in jupyter-lab terminal tabs once the previous cell finishes. You should however only need them for debugging purposes: this notebook shows how to use the python nrm interface. " - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "nrmd\n", - "\n", - "Usage: [-i|--stdin] [CONFIG] [-y|--yaml]\n", - " NRM Daemon\n", - "\n", - "Available options:\n", - " -h,--help Show this help text\n", - " -i,--stdin Read configuration on stdin.\n", - " CONFIG Input configuration with .yml/.yaml/.dh/.dhall\n", - " extension. Leave void for stdin (dhall) input.\n", - " -y,--yaml Assume configuration to be yaml(json is valid yaml)\n", - " instead of dhall.\n", - " -h,--help Show this help text\n" - ] - } - ], - "source": [ - "%%bash\n", - "nrmd --help" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "nrm\n", - "\n", - "Usage: nrm COMMAND\n", - " NRM Client\n", - "\n", - "Available options:\n", - " -h,--help Show this help text\n", - " COMMAND Choice of operation.\n", - "\n", - "Available commands:\n", - " run Run the application via NRM\n", - " killcmd Kill cmd\n", - " killslice Kill slice\n", - " actuate Send actuator action\n", - " cpd Show current CPD\n", - " list List existing slices\n", - " state Show NRM state\n", - " config Show NRM configuration\n", - " listen-raw Listen to raw NRM upstream pub messages\n", - " listen-cpd Listen to CPD messages\n", - " listen-all Listen to all upstream pub messages\n", - "\n", - "Usage: nrm run [-i|--stdin] [-y|--yaml] [-d|--detach] [--manifest MANIFEST]\n", - " [-s|--slice CONTAINER] CMD [ARG] [-v|--verbose] [-j|--json]\n", - " [-c|--color] [--pub_port PORT] [--rpc_port PORT]\n", - " [--bind_address ADDRESS]\n", - " Run the application via NRM\n", - "\n", - "Available options:\n", - " -i,--stdin Read configuration on stdin.\n", - " -y,--yaml Assume stdin to be yaml(json is valid yaml) instead\n", - " of dhall.\n", - " -d,--detach Detach the command.\n", - " --manifest MANIFEST Input manifest with .yml/.yaml/.dh/.dhall extension.\n", - " -s,--slice CONTAINER Slice name/ID\n", - " CMD Command name\n", - " ARG Command arguments\n", - " -v,--verbose Enable verbose mode.\n", - " -j,--json Enable json printing.\n", - " -c,--color Enable color printing.\n", - " --pub_port PORT upstream pub port (default 2345).\n", - " --rpc_port PORT upstream rpc port (default 3456).\n", - " --bind_address ADDRESS upstream bind address (default localhost).\n", - " -h,--help Show this help text\n" - ] - } - ], - "source": [ - "%%bash \n", - "nrm --help\n", - "echo \"\"\n", - "nrm run --help" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Defining experiments\n", - "\n", - "Now that the daemon is properly set-up, we will configure and run some experiments using the python interface.\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 5;\n", - " var nbb_unformatted_code = \"%load_ext nb_black\\nimport nrm.tooling as nrm\\nimport time\\nimport json\\nimport pandas as pd\\nimport matplotlib.pyplot as plt\";\n", - " var nbb_formatted_code = \"%load_ext nb_black\\nimport nrm.tooling as nrm\\nimport time\\nimport json\\nimport pandas as pd\\nimport matplotlib.pyplot as plt\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ + "# the nrm python bindings\n", "import nrm.tooling as nrm\n", + "# other imports\n", "import time\n", "import json\n", "import pandas as pd\n", - "import matplotlib.pyplot as plt" + "import inspect\n", + "import matplotlib.pyplot as plt\n", + "from collections import defaultdict" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "This notebook will start `nrmd` on the same machine as the notebok, but the same interface should be available for remote execution:" + "The `nrmd` context manager is the preffered way to use the `nrm.tooling` module:" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 2, "metadata": {}, "outputs": [ { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 6;\n", - " var nbb_unformatted_code = \"host = nrm.Local()\\n# host=Remote( target=\\\"cc@129.114.108.201\\\")\";\n", - " var nbb_formatted_code = \"host = nrm.Local()\\n# host=Remote( target=\\\"cc@129.114.108.201\\\")\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stdout", + "output_type": "stream", + "text": [ + "{'pubMeasurements': [1604027239391853.5, [{'time': 1604027239391853.5, 'sensorValue': 6.367862870816432, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n" + ] } ], "source": [ - "host = nrm.Local()\n", - "# host=Remote( target=\"cc@129.114.108.201\")" + "with nrm.nrmd({}) as d:\n", + " print(d.upstream_recv())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Note that the two classes (`Local` and `Remote`) offer the same methods to start nrmd and interact via blocking message passing primitives. The supported methods are the following:" + "`nrmd` returns an object of type `NRMD`, which supports the following methods:" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 3, "metadata": { "jupyter": { "source_hidden": true @@ -275,102 +82,41 @@ "output_type": "stream", "text": [ "__init__: None\n", - "check_daemon: checks if nrmd is alive \n", - "get_cpd: Obtain the current Control Problem Description \n", - "get_state: Obtain the current daemon state \n", - "run_workload: Runs a workload via NRM. The `nrmd` daemon must be running. \n", - "start_daemon: start nrmd \n", - "stop_daemon: stops nrmd \n", - "workload_action: Send a message to NRM's upstream API. \n", - "workload_exit_status: Check the workload's exit status. \n", - "workload_finished: Checks NRM to see whether all tasks are finished. \n", - "workload_recv: Receive a message from NRM's upstream API. \n" + "actuate: Upstream request: Run an available action \n", + "all_finished: Upstream request: Checks NRM to see whether all tasks are finished. \n", + "get_cpd: Upstream request: Obtain the current Control Problem Description \n", + "get_state: Upstream request: Obtain the current daemon state \n", + "run: Upstream request: Run an application via NRM.\n", + "upstream_recv: Upstream listen: Receive a message from NRM's upstream API. \n" ] - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 7;\n", - " var nbb_unformatted_code = \"import inspect\\n\\nfor a, x in inspect.getmembers(host, predicate=inspect.ismethod):\\n print(\\\"%s: %s\\\" % (a, x.__doc__))\";\n", - " var nbb_formatted_code = \"import inspect\\n\\nfor a, x in inspect.getmembers(host, predicate=inspect.ismethod):\\n print(\\\"%s: %s\\\" % (a, x.__doc__))\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ - "import inspect\n", - "\n", - "for a, x in inspect.getmembers(host, predicate=inspect.ismethod):\n", - " print(\"%s: %s\" % (a, x.__doc__))" + "for a, x in inspect.getmembers(nrm.NRMD(\"\"), predicate=inspect.ismethod): print(\"%s: %s\" % (a, x.__doc__))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The next cell defines some node experimental node (`nrmd`) daemon configurations and some workloads. Please see notebook [notebooks/configuration.ipynb](notebooks/configuration.ipynb) for an overview of `nrmd`'s and the \"Manifest\"'s configuration format." + "The next cell defines some daemon configurations and workloads. Please see notebook [notebooks/configuration.ipynb](notebooks/configuration.ipynb) for an overview of `nrmd`'s configuration format configuration format, as well as for an overview of manifests." ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 4, "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 8;\n", - " var nbb_unformatted_code = \"powerCaps = [60, 75, 60, 100, 110, 120, 150, 180, 210]\\ndaemonCfgs = {\\n \\\"manyActions\\\": {\\n \\\"raplCfg\\\": {\\n \\\"raplActions\\\": [{\\\"fromuW\\\": 1000000 * p} for p in powerCaps],\\n \\\"raplFrequency\\\": {\\\"fromHz\\\": 1},\\n \\\"raplPath\\\": \\\"/sys/devices/virtual/powercap/intel-rapl\\\",\\n }\\n }\\n}\\n\\nworkloads = {\\n \\\"dummy\\\": [\\n {\\n \\\"cmd\\\": \\\"sleep\\\",\\n \\\"args\\\": [\\\"10\\\"], # running the sleep command for 10 seconds.\\n \\\"sliceID\\\": \\\"toto\\\",\\n \\\"manifest\\\": {\\n \\\"app\\\": {\\n \\\"slice\\\": {\\\"cpus\\\": 1, \\\"mems\\\": 1},\\n \\\"perfwrapper\\\": {\\n \\\"perfLimit\\\": {\\\"fromOps\\\": 100000},\\n \\\"perfFreq\\\": {\\\"fromHz\\\": 1},\\n },\\n },\\n \\\"name\\\": \\\"perfwrap\\\",\\n },\\n }\\n ],\\n # \\\"other\\\":your code\\n}\";\n", - " var nbb_formatted_code = \"powerCaps = [60, 75, 60, 100, 110, 120, 150, 180, 210]\\ndaemonCfgs = {\\n \\\"manyActions\\\": {\\n \\\"raplCfg\\\": {\\n \\\"raplActions\\\": [{\\\"fromuW\\\": 1000000 * p} for p in powerCaps],\\n \\\"raplFrequency\\\": {\\\"fromHz\\\": 1},\\n \\\"raplPath\\\": \\\"/sys/devices/virtual/powercap/intel-rapl\\\",\\n }\\n }\\n}\\n\\nworkloads = {\\n \\\"dummy\\\": [\\n {\\n \\\"cmd\\\": \\\"sleep\\\",\\n \\\"args\\\": [\\\"10\\\"], # running the sleep command for 10 seconds.\\n \\\"sliceID\\\": \\\"toto\\\",\\n \\\"manifest\\\": {\\n \\\"app\\\": {\\n \\\"slice\\\": {\\\"cpus\\\": 1, \\\"mems\\\": 1},\\n \\\"perfwrapper\\\": {\\n \\\"perfLimit\\\": {\\\"fromOps\\\": 100000},\\n \\\"perfFreq\\\": {\\\"fromHz\\\": 1},\\n },\\n },\\n \\\"name\\\": \\\"perfwrap\\\",\\n },\\n }\\n ],\\n # \\\"other\\\":your code\\n}\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "powerCaps = [60, 75, 60, 100, 110, 120, 150, 180, 210]\n", "daemonCfgs = {\n", " \"manyActions\": {\n", " \"raplCfg\": {\n", - " \"raplActions\": [{\"fromuW\": 1000000 * p} for p in powerCaps],\n", - " \"raplFrequency\": {\"fromHz\": 1},\n", + " \"raplActions\": [{\"microwatts\": 1_000_000 * p} for p in powerCaps],\n", + " \"referencePower\": {\"microwatts\": 250_000_000},\n", " \"raplPath\": \"/sys/devices/virtual/powercap/intel-rapl\",\n", - " }\n", + " },\n", + " \"passiveSensorFrequency\" : { \"hertz\" : 10 }\n", " }\n", "}\n", "\n", @@ -382,10 +128,9 @@ " \"sliceID\": \"toto\",\n", " \"manifest\": {\n", " \"app\": {\n", - " \"slice\": {\"cpus\": 1, \"mems\": 1},\n", " \"perfwrapper\": {\n", - " \"perfLimit\": {\"fromOps\": 100000},\n", - " \"perfFreq\": {\"fromHz\": 1},\n", + " \"perfLimit\": 100000,\n", + " \"perfFreq\": {\"hertz\": 10},\n", " },\n", " },\n", " \"name\": \"perfwrap\",\n", @@ -405,37 +150,9 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 5, "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 9;\n", - " var nbb_unformatted_code = \"experiments = {\\\"example\\\": (daemonCfgs[\\\"manyActions\\\"], workloads[\\\"dummy\\\"])}\";\n", - " var nbb_formatted_code = \"experiments = {\\\"example\\\": (daemonCfgs[\\\"manyActions\\\"], workloads[\\\"dummy\\\"])}\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "experiments = {\"example\": (daemonCfgs[\"manyActions\"], workloads[\"dummy\"])}" ] @@ -446,243 +163,71 @@ "source": [ "## Running experiments\n", "\n", - "Previous to those example experiments, you want to set correct permissions on your RAPL sysfs interface." + "First, we set correct permissions on the RAPL sysfs interface." ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 6, "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 10;\n", - " var nbb_unformatted_code = \"%%bash\\ncd /sys/devices/virtual/powercap/intel-rapl\\n#sudo chown user:users -R *\";\n", - " var nbb_formatted_code = \"%%bash\\ncd /sys/devices/virtual/powercap/intel-rapl\\n#sudo chown user:users -R *\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "%%bash\n", - "cd /sys/devices/virtual/powercap/intel-rapl\n", - "#sudo chown user:users -R *" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The next cell shows how to start the daemon. This acts as a silent restart in case the daemon was still running beforehand." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "connecting\n", - "connected to tcp://localhost:2345\n" - ] - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 11;\n", - " var nbb_unformatted_code = \"host.start_daemon(daemonCfgs[\\\"manyActions\\\"])\\nassert host.check_daemon()\";\n", - " var nbb_formatted_code = \"host.start_daemon(daemonCfgs[\\\"manyActions\\\"])\\nassert host.check_daemon()\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "host.start_daemon(daemonCfgs[\"manyActions\"])\n", - "assert host.check_daemon()" + "#cd /sys/devices/virtual/powercap/intel-rapl\n", + "#sudo chown $(whoami):users -R *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We can obtain the current control description problem:" + "We can start the daemon and obtain the current control description problem in the following way:" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Pretty-printing the control problem description:\n", - " Problem \n", - " \u001b[1m\u001b[96m{\u001b[0m sensors = Map \n", - " \u001b[1m\u001b[93m[\u001b[0m \n", - " \u001b[35m(\u001b[0m SensorID \u001b[36m{\u001b[0m sensorID = \u001b[1m\u001b[97m\"\u001b[0m\u001b[1m\u001b[94mRaplKey (PackageID 0)\u001b[0m\u001b[1m\u001b[97m\"\u001b[0m \u001b[36m}\u001b[0m\n", - " \u001b[35m,\u001b[0m Sensor \n", - " \u001b[36m{\u001b[0m range = 0.0 ... 300.0\n", - " \u001b[36m,\u001b[0m maxFrequency = 3.0\n", - " \u001b[36m}\u001b[0m \n", - " \u001b[35m)\u001b[0m \n", - " \u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m,\u001b[0m actuators = Map \n", - " \u001b[1m\u001b[93m[\u001b[0m \n", - " \u001b[35m(\u001b[0m ActuatorID \u001b[36m{\u001b[0m actuatorID = \u001b[1m\u001b[97m\"\u001b[0m\u001b[1m\u001b[94mRaplKey (PackageID 0)\u001b[0m\u001b[1m\u001b[97m\"\u001b[0m \u001b[36m}\u001b[0m\n", - " \u001b[35m,\u001b[0m Actuator \n", - " \u001b[36m{\u001b[0m actions = \n", - " \u001b[33m[\u001b[0m DiscreteDouble 60.0\n", - " \u001b[33m,\u001b[0m DiscreteDouble 75.0\n", - " \u001b[33m,\u001b[0m DiscreteDouble 60.0\n", - " \u001b[33m,\u001b[0m DiscreteDouble 100.0\n", - " \u001b[33m,\u001b[0m DiscreteDouble 110.0\n", - " \u001b[33m,\u001b[0m DiscreteDouble 120.0\n", - " \u001b[33m,\u001b[0m DiscreteDouble 150.0\n", - " \u001b[33m,\u001b[0m DiscreteDouble 180.0\n", - " \u001b[33m,\u001b[0m DiscreteDouble 210.0\n", - " \u001b[33m]\u001b[0m \n", - " \u001b[36m}\u001b[0m\n", - " \u001b[35m)\u001b[0m \n", - " \u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m,\u001b[0m objectives = \u001b[1m\u001b[93m[\u001b[0m\u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m,\u001b[0m constraints = \u001b[1m\u001b[93m[\u001b[0m\u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m}\u001b[0m \n", - "Python dictionary version: {'objectives': [], 'constraints': [], 'sensors': [['RaplKey (PackageID 0)', {'maxFrequency': 3, 'range': {'i': [0, 300]}}]], 'actuators': [['RaplKey (PackageID 0)', {'actions': [60, 75, 60, 100, 110, 120, 150, 180, 210]}]]}\n" + "Actuators:\n", + " - RaplKey (PackageID 0) : Actuator {actions = [DiscreteDouble {getDiscrete = 60.0},DiscreteDouble {getDiscrete = 75.0},DiscreteDouble {getDiscrete = 60.0},DiscreteDouble {getDiscrete = 100.0},DiscreteDouble {getDiscrete = 110.0},DiscreteDouble {getDiscrete = 120.0},DiscreteDouble {getDiscrete = 150.0},DiscreteDouble {getDiscrete = 180.0},DiscreteDouble {getDiscrete = 210.0}]}\n", + "Sensors:\n", + " - RaplKey (PackageID 0) : Sensor {range = 0.0 ... 150.0, maxFrequency = 10.0}\n", + "Objectives:\n", + " \n", + "Constraints:\n", + " \n", + "\n" ] - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 12;\n", - " var nbb_unformatted_code = \"cpd = host.get_cpd()\\nprint(\\\"Pretty-printing the control problem description:\\\\n %s\\\" % cpd)\\ncpdd = dict(cpd)\\nprint(\\\"Python dictionary version: %s\\\" % cpdd)\";\n", - " var nbb_formatted_code = \"cpd = host.get_cpd()\\nprint(\\\"Pretty-printing the control problem description:\\\\n %s\\\" % cpd)\\ncpdd = dict(cpd)\\nprint(\\\"Python dictionary version: %s\\\" % cpdd)\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ - "cpd = host.get_cpd()\n", - "print(\"Pretty-printing the control problem description:\\n %s\" % cpd)\n", - "cpdd = dict(cpd)\n", - "print(\"Python dictionary version: %s\" % cpdd)" + "with nrm.nrmd(daemonCfgs[\"manyActions\"]) as d:\n", + " print(d.get_cpd())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "As you can see, there is one sensor and one actuator, both corresponding to the same RAPL package. Not very interesting until we start a workload. We can take an action like so:" + "As you can see, there is one sensor and one actuator, both corresponding to the same RAPL package. Not very interesting until we start a workload. The following cell triggers the first available action from the first actuator." ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 8, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "We take the first available action (60) for the first actuator (RaplKey (PackageID 0)).\n" - ] - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 13;\n", - " var nbb_unformatted_code = \"actuator0 = cpdd[\\\"actuators\\\"][0]\\nactuator0ID = actuator0[0]\\nactuator0FirstAction = actuator0[1][\\\"actions\\\"][0]\\nprint(\\n \\\"We take the first available action (%s) for the first actuator (%s).\\\"\\n % (actuator0FirstAction, actuator0ID)\\n)\\nhost.workload_action([nrm.Action(actuator0ID, actuator0FirstAction)])\";\n", - " var nbb_formatted_code = \"actuator0 = cpdd[\\\"actuators\\\"][0]\\nactuator0ID = actuator0[0]\\nactuator0FirstAction = actuator0[1][\\\"actions\\\"][0]\\nprint(\\n \\\"We take the first available action (%s) for the first actuator (%s).\\\"\\n % (actuator0FirstAction, actuator0ID)\\n)\\nhost.workload_action([nrm.Action(actuator0ID, actuator0FirstAction)])\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "actuator0 = cpdd[\"actuators\"][0]\n", - "actuator0ID = actuator0[0]\n", - "actuator0FirstAction = actuator0[1][\"actions\"][0]\n", - "print(\n", - " \"We take the first available action (%s) for the first actuator (%s).\"\n", - " % (actuator0FirstAction, actuator0ID)\n", - ")\n", - "host.workload_action([nrm.Action(actuator0ID, actuator0FirstAction)])" + "with nrm.nrmd(daemonCfgs[\"manyActions\"]) as d:\n", + " a = d.get_cpd().actuators()[0]\n", + " actuatorID = a.actuatorID\n", + " action = a.admissibleActions[0]\n", + " d.actuate([nrm.Action(actuatorID, action)])" ] }, { @@ -694,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 9, "metadata": { "scrolled": false }, @@ -704,33 +249,33 @@ "output_type": "stream", "text": [ "NRMState \n", - " \u001b[1m\u001b[96m{\u001b[0m pus = Map \n", + " \u001b[1m\u001b[96m{\u001b[0m pus = fromList \n", " \u001b[1m\u001b[93m[\u001b[0m \n", " \u001b[35m(\u001b[0m PUID 0\n", " \u001b[35m,\u001b[0m PU\n", " \u001b[35m)\u001b[0m \n", " \u001b[1m\u001b[93m,\u001b[0m \n", - " \u001b[35m(\u001b[0m PUID 4\n", + " \u001b[35m(\u001b[0m PUID 1\n", " \u001b[35m,\u001b[0m PU\n", " \u001b[35m)\u001b[0m \n", " \u001b[1m\u001b[93m,\u001b[0m \n", - " \u001b[35m(\u001b[0m PUID 1\n", + " \u001b[35m(\u001b[0m PUID 2\n", " \u001b[35m,\u001b[0m PU\n", " \u001b[35m)\u001b[0m \n", " \u001b[1m\u001b[93m,\u001b[0m \n", - " \u001b[35m(\u001b[0m PUID 5\n", + " \u001b[35m(\u001b[0m PUID 3\n", " \u001b[35m,\u001b[0m PU\n", " \u001b[35m)\u001b[0m \n", " \u001b[1m\u001b[93m,\u001b[0m \n", - " \u001b[35m(\u001b[0m PUID 2\n", + " \u001b[35m(\u001b[0m PUID 4\n", " \u001b[35m,\u001b[0m PU\n", " \u001b[35m)\u001b[0m \n", " \u001b[1m\u001b[93m,\u001b[0m \n", - " \u001b[35m(\u001b[0m PUID 6\n", + " \u001b[35m(\u001b[0m PUID 5\n", " \u001b[35m,\u001b[0m PU\n", " \u001b[35m)\u001b[0m \n", " \u001b[1m\u001b[93m,\u001b[0m \n", - " \u001b[35m(\u001b[0m PUID 3\n", + " \u001b[35m(\u001b[0m PUID 6\n", " \u001b[35m,\u001b[0m PU\n", " \u001b[35m)\u001b[0m \n", " \u001b[1m\u001b[93m,\u001b[0m \n", @@ -738,7 +283,7 @@ " \u001b[35m,\u001b[0m PU\n", " \u001b[35m)\u001b[0m \n", " \u001b[1m\u001b[93m]\u001b[0m \n", - " \u001b[1m\u001b[96m,\u001b[0m cores = Map \n", + " \u001b[1m\u001b[96m,\u001b[0m cores = fromList \n", " \u001b[1m\u001b[93m[\u001b[0m \n", " \u001b[35m(\u001b[0m CoreID 0\n", " \u001b[35m,\u001b[0m Core\n", @@ -756,16 +301,29 @@ " \u001b[35m,\u001b[0m Core\n", " \u001b[35m)\u001b[0m \n", " \u001b[1m\u001b[93m]\u001b[0m \n", - " \u001b[1m\u001b[96m,\u001b[0m packages = Map \n", + " \u001b[1m\u001b[96m,\u001b[0m packages = fromList \n", " \u001b[1m\u001b[93m[\u001b[0m \n", " \u001b[35m(\u001b[0m PackageID 0\n", " \u001b[35m,\u001b[0m Package \n", " \u001b[36m{\u001b[0m rapl = Just \n", " \u001b[33m(\u001b[0m Rapl \n", - " \u001b[1m\u001b[35m{\u001b[0m raplPath = \u001b[1m\u001b[97m\"\u001b[0m\u001b[1m\u001b[94m/sys/devices/virtual/powercap/intel-rapl/intel-rapl:0\u001b[0m\u001b[1m\u001b[97m\"\u001b[0m \n", - " \u001b[1m\u001b[35m,\u001b[0m max = 3.0e8\n", + " \u001b[1m\u001b[35m{\u001b[0m raplCfg = RAPLConfig \n", + " \u001b[1m\u001b[36m{\u001b[0m configPath = \u001b[1m\u001b[97m\"\u001b[0m\u001b[1m\u001b[94m/sys/devices/virtual/powercap/intel-rapl/intel-rapl:0\u001b[0m\u001b[1m\u001b[97m\"\u001b[0m \n", + " \u001b[1m\u001b[36m,\u001b[0m enabled = True\n", + " \u001b[1m\u001b[36m,\u001b[0m constraintShortTermMaxPowerUw = RAPLConstraint \n", + " \u001b[1m\u001b[33m{\u001b[0m timeWindow = 2440.0\n", + " \u001b[1m\u001b[33m,\u001b[0m maxPower = MaxPower 0.0\n", + " \u001b[1m\u001b[33m}\u001b[0m \n", + " \u001b[1m\u001b[36m,\u001b[0m constraintLongTermMaxPowerUw = RAPLConstraint \n", + " \u001b[1m\u001b[33m{\u001b[0m timeWindow = 2.7983872e7\n", + " \u001b[1m\u001b[33m,\u001b[0m maxPower = MaxPower 1.5e7\n", + " \u001b[1m\u001b[33m}\u001b[0m \n", + " \u001b[1m\u001b[36m,\u001b[0m shortTermID = 1\n", + " \u001b[1m\u001b[36m,\u001b[0m longTermID = 0\n", + " \u001b[1m\u001b[36m}\u001b[0m \n", + " \u001b[1m\u001b[35m,\u001b[0m max = 1.5e8\n", " \u001b[1m\u001b[35m,\u001b[0m maxEnergyCounterValue = 2.6214332885e11\n", - " \u001b[1m\u001b[35m,\u001b[0m frequency = 3.0\n", + " \u001b[1m\u001b[35m,\u001b[0m frequency = 10.0\n", " \u001b[1m\u001b[35m,\u001b[0m discreteChoices = \n", " \u001b[1m\u001b[36m[\u001b[0m 6.0e7\n", " \u001b[1m\u001b[36m,\u001b[0m 7.5e7\n", @@ -777,101 +335,25 @@ " \u001b[1m\u001b[36m,\u001b[0m 1.8e8\n", " \u001b[1m\u001b[36m,\u001b[0m 2.1e8\n", " \u001b[1m\u001b[36m]\u001b[0m \n", - " \u001b[1m\u001b[35m,\u001b[0m defaultPower = 2.0e8\n", + " \u001b[1m\u001b[35m,\u001b[0m defaultPower = 2.5e8\n", " \u001b[1m\u001b[35m,\u001b[0m lastRead = Nothing\n", - " \u001b[1m\u001b[35m,\u001b[0m history = Refined \u001b[1m\u001b[36m[\u001b[0m\u001b[1m\u001b[36m]\u001b[0m\n", + " \u001b[1m\u001b[35m,\u001b[0m history = MemBuffer \u001b[1m\u001b[36m{\u001b[0m getMemBuffer = Refined \u001b[1m\u001b[33m[\u001b[0m\u001b[1m\u001b[33m]\u001b[0m \u001b[1m\u001b[36m}\u001b[0m\n", " \u001b[1m\u001b[35m}\u001b[0m \n", " \u001b[33m)\u001b[0m\n", " \u001b[36m}\u001b[0m\n", " \u001b[35m)\u001b[0m \n", " \u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m,\u001b[0m slices = Map \u001b[1m\u001b[93m[\u001b[0m\u001b[1m\u001b[93m]\u001b[0m\n", - " \u001b[1m\u001b[96m,\u001b[0m dummyRuntime = Just \n", - " \u001b[1m\u001b[93m(\u001b[0m Dummy \u001b[35m(\u001b[0m fromList \u001b[36m[\u001b[0m\u001b[36m]\u001b[0m \u001b[35m)\u001b[0m \u001b[1m\u001b[93m)\u001b[0m\n", - " \u001b[1m\u001b[96m,\u001b[0m singularityRuntime = Nothing\n", - " \u001b[1m\u001b[96m,\u001b[0m nodeosRuntime = Nothing\n", + " \u001b[1m\u001b[96m,\u001b[0m slices = fromList \u001b[1m\u001b[93m[\u001b[0m\u001b[1m\u001b[93m]\u001b[0m\n", " \u001b[1m\u001b[96m,\u001b[0m controller = Nothing\n", - " \u001b[1m\u001b[96m}\u001b[0m \n", - "{'controller': None, 'slices': [], 'pus': [[0, []], [4, []], [1, []], [5, []], [2, []], [6, []], [3, []], [7, []]], 'packages': [[0, {'rapl': {'max': 300000000, 'defaultPower': 200000000, 'frequency': 3, 'history': [], 'raplPath': '/sys/devices/virtual/powercap/intel-rapl/intel-rapl:0', 'lastRead': None, 'discreteChoices': [60000000, 75000000, 60000000, 100000000, 110000000, 120000000, 150000000, 180000000, 210000000], 'maxEnergyCounterValue': 262143328850}}]], 'dummyRuntime': [], 'nodeosRuntime': None, 'cores': [[0, []], [1, []], [2, []], [3, []]], 'singularityRuntime': None}\n" + " \u001b[1m\u001b[96m,\u001b[0m extraStaticActuators = fromList \u001b[1m\u001b[93m[\u001b[0m\u001b[1m\u001b[93m]\u001b[0m\n", + " \u001b[1m\u001b[96m,\u001b[0m extraStaticPassiveSensors = fromList \u001b[1m\u001b[93m[\u001b[0m\u001b[1m\u001b[93m]\u001b[0m\n", + " \u001b[1m\u001b[96m}\u001b[0m \n" ] - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 14;\n", - " var nbb_unformatted_code = \"s = host.get_state()\\nprint(s)\\nprint(dict(s))\";\n", - " var nbb_formatted_code = \"s = host.get_state()\\nprint(s)\\nprint(dict(s))\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "s = host.get_state()\n", - "print(s)\n", - "print(dict(s))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The next cell just stops the daemon cleanly." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 15;\n", - " var nbb_unformatted_code = \"host.stop_daemon()\\nassert host.check_daemon() == False\";\n", - " var nbb_formatted_code = \"host.stop_daemon()\\nassert host.check_daemon() == False\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ - "host.stop_daemon()\n", - "assert host.check_daemon() == False" + "with nrm.nrmd(daemonCfgs[\"manyActions\"]) as d:\n", + " print(d.get_state())" ] }, { @@ -880,129 +362,806 @@ "source": [ "### Dummy experiment: printing measurements\n", "\n", - "We now are ready to run an external resource management strategy. The next cell uses the low-level \"upstream\" message passing interface to run a dummy strategy that takes a constant action. Message schemas for this API can be browsed in the [./resources/](./resources/) folder." + "We now are ready to run an external resource management strategy. The next cell uses the low-level \"upstream listening\" message passing interface. Message schemas for this API can be browsed in the [./resources/](./resources/) folder." ] }, { "cell_type": "code", - "execution_count": 16, - "metadata": {}, + "execution_count": 10, + "metadata": { + "scrolled": true + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "connecting\n", - "connected to tcp://localhost:2345\n", - "Starting the workload\n", - "1585803231.5284595\n", + "received upstream message: {'pubMeasurements': [1604027243846976.8, [{'time': 1604027243846976.8, 'sensorValue': 17.587646857205787, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027243.8531184\n", "Sensor identifier list:\n", - "- DownstreamCmdKey (DownstreamCmdID 9b63738d-1426-4307-8e2d-842d83c35445)\n", + "- DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)\n", "- RaplKey (PackageID 0)\n", "Actuator identifier list:\n", "- RaplKey (PackageID 0)\n", - "measured at time 1585803231527137.2: sensor RaplKey (PackageID 0), value 11.30911500000002\n", - "1585803232.5476637\n", - "measured at time 1585803232527184.5: sensor RaplKey (PackageID 0), value 9.075172000000748\n", - "1585803233.5281143\n", - "measured at time 1585803233527007.5: sensor RaplKey (PackageID 0), value 7.450114999999641\n", - "1585803234.1337261\n", - "measured at time 1585803234132703.8: sensor DownstreamCmdKey (DownstreamCmdID 9b63738d-1426-4307-8e2d-842d83c35445), value 0\n", - "1585803234.5284696\n", - "measured at time 1585803234527442.8: sensor RaplKey (PackageID 0), value 7.9661660000001575\n", - "1585803235.1345613\n", - "measured at time 1585803235133367.5: sensor DownstreamCmdKey (DownstreamCmdID 9b63738d-1426-4307-8e2d-842d83c35445), value 0\n", - "1585803235.529306\n", - "measured at time 1585803235528051.8: sensor RaplKey (PackageID 0), value 15.378989000000729\n", - "1585803236.1344712\n", - "measured at time 1585803236133290.8: sensor DownstreamCmdKey (DownstreamCmdID 9b63738d-1426-4307-8e2d-842d83c35445), value 0\n", - "1585803236.5282028\n", - "measured at time 1585803236527005: sensor RaplKey (PackageID 0), value 16.851213999998436\n", - "1585803237.134349\n", - "measured at time 1585803237133406.8: sensor DownstreamCmdKey (DownstreamCmdID 9b63738d-1426-4307-8e2d-842d83c35445), value 0\n", - "1585803237.527531\n", - "measured at time 1585803237526441: sensor RaplKey (PackageID 0), value 13.05373900000086\n", - "1585803238.134748\n", - "measured at time 1585803238133580.5: sensor DownstreamCmdKey (DownstreamCmdID 9b63738d-1426-4307-8e2d-842d83c35445), value 0\n", - "1585803238.5282598\n", - "measured at time 1585803238527038.8: sensor RaplKey (PackageID 0), value 9.916172999999617\n", - "1585803239.1349437\n", - "measured at time 1585803239133953: sensor DownstreamCmdKey (DownstreamCmdID 9b63738d-1426-4307-8e2d-842d83c35445), value 0\n", - "1585803239.5283322\n", - "measured at time 1585803239527050.8: sensor RaplKey (PackageID 0), value 11.422334000000774\n", - "1585803240.1352584\n", - "measured at time 1585803240134316.8: sensor DownstreamCmdKey (DownstreamCmdID 9b63738d-1426-4307-8e2d-842d83c35445), value 0\n", - "1585803240.5285597\n", - "measured at time 1585803240527461: sensor RaplKey (PackageID 0), value 13.025234999999157\n", - "1585803241.529183\n", - "measured at time 1585803241528135.5: sensor RaplKey (PackageID 0), value 13.282803000000058\n" + "measured at time 1604027243846976.8: sensor RaplKey (PackageID 0), value 17.587646857205787\n", + "received upstream message: {'pubMeasurements': [1604027243947954, [{'time': 1604027243947954, 'sensorValue': 17.907231579390388, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027244.8597093\n", + "measured at time 1604027243947954: sensor RaplKey (PackageID 0), value 17.907231579390388\n", + "received upstream message: {'pubMeasurements': [1604027244046995.2, [{'time': 1604027244046995.2, 'sensorValue': 16.373975490114137, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027244.8651237\n", + "measured at time 1604027244046995.2: sensor RaplKey (PackageID 0), value 16.373975490114137\n", + "received upstream message: {'pubMeasurements': [1604027244147978.2, [{'time': 1604027244147978.2, 'sensorValue': 16.536624976477206, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027244.8677225\n", + "measured at time 1604027244147978.2: sensor RaplKey (PackageID 0), value 16.536624976477206\n", + "received upstream message: {'pubMeasurements': [1604027244246901.2, [{'time': 1604027244246901.2, 'sensorValue': 8.513298221927798, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027244.8718128\n", + "measured at time 1604027244246901.2: sensor RaplKey (PackageID 0), value 8.513298221927798\n", + "received upstream message: {'pubMeasurements': [1604027244347068.8, [{'time': 1604027244347068.8, 'sensorValue': 6.438176054942159, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027244.874542\n", + "measured at time 1604027244347068.8: sensor RaplKey (PackageID 0), value 6.438176054942159\n", + "received upstream message: {'pubMeasurements': [1604027244448343.8, [{'time': 1604027244448343.8, 'sensorValue': 5.743401629415298, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027244.877786\n", + "measured at time 1604027244448343.8: sensor RaplKey (PackageID 0), value 5.743401629415298\n", + "received upstream message: {'pubMeasurements': [1604027244483980.8, [{'time': 1604027244483980.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027244.8803325\n", + "measured at time 1604027244483980.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027244483980.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027244548001.5, [{'time': 1604027244548001.5, 'sensorValue': 19.5119195446669, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027244.8851225\n", + "measured at time 1604027244548001.5: sensor RaplKey (PackageID 0), value 19.5119195446669\n", + "received upstream message: {'pubMeasurements': [1604027244582902, [{'time': 1604027244582902, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027244.8881328\n", + "measured at time 1604027244582902: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027244582902, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027244646954.5, [{'time': 1604027244646954.5, 'sensorValue': 18.36052469342518, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027244.8939288\n", + "measured at time 1604027244646954.5: sensor RaplKey (PackageID 0), value 18.36052469342518\n", + "received upstream message: {'pubMeasurements': [1604027244683293.5, [{'time': 1604027244683293.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027244.8967824\n", + "measured at time 1604027244683293.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027244683293.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027244746995.8, [{'time': 1604027244746995.8, 'sensorValue': 28.309172466375873, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027244.9018874\n", + "measured at time 1604027244746995.8: sensor RaplKey (PackageID 0), value 28.309172466375873\n", + "received upstream message: {'pubMeasurements': [1604027244784652.2, [{'time': 1604027244784652.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027244.9046836\n", + "measured at time 1604027244784652.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027244784652.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027244846986, [{'time': 1604027244846986, 'sensorValue': 22.61079455248688, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027244.9103477\n", + "measured at time 1604027244846986: sensor RaplKey (PackageID 0), value 22.61079455248688\n", + "received upstream message: {'pubMeasurements': [1604027244887597.5, [{'time': 1604027244887597.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027244.913107\n", + "measured at time 1604027244887597.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027244887597.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027244946983.2, [{'time': 1604027244946983.2, 'sensorValue': 21.25113440601856, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027244.948058\n", + "measured at time 1604027244946983.2: sensor RaplKey (PackageID 0), value 21.25113440601856\n", + "received upstream message: {'pubMeasurements': [1604027244984431.2, [{'time': 1604027244984431.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027244.985712\n", + "measured at time 1604027244984431.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027244984431.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027245046939.2, [{'time': 1604027245046939.2, 'sensorValue': 24.88576973894434, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027245.0478961\n", + "measured at time 1604027245046939.2: sensor RaplKey (PackageID 0), value 24.88576973894434\n", + "received upstream message: {'pubMeasurements': [1604027245083086.2, [{'time': 1604027245083086.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027245.0841186\n", + "measured at time 1604027245083086.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027245083086.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027245148001.5, [{'time': 1604027245148001.5, 'sensorValue': 16.805087953022138, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027245.1491985\n", + "measured at time 1604027245148001.5: sensor RaplKey (PackageID 0), value 16.805087953022138\n", + "received upstream message: {'pubMeasurements': [1604027245184080, [{'time': 1604027245184080, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027245.1852775\n", + "measured at time 1604027245184080: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027245184080, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027245247029.8, [{'time': 1604027245247029.8, 'sensorValue': 16.750250559978625, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027245.2484896\n", + "measured at time 1604027245247029.8: sensor RaplKey (PackageID 0), value 16.750250559978625\n", + "received upstream message: {'pubMeasurements': [1604027245284389.2, [{'time': 1604027245284389.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027245.2855775\n", + "measured at time 1604027245284389.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n" ] }, { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 16;\n", - " var nbb_unformatted_code = \"from collections import defaultdict\\n\\nfor name, (daemonCfg, workload) in experiments.items():\\n host.start_daemon(daemonCfg)\\n print(\\\"Starting the workload\\\")\\n host.run_workload(workload)\\n history = defaultdict(list)\\n getCPD = True\\n while host.check_daemon() and not host.workload_finished():\\n measurement_message = host.workload_recv()\\n msg = json.loads(measurement_message)\\n # print(\\\"received raw message: %s\\\" %msg)\\n if \\\"pubMeasurements\\\" in msg:\\n # print(msg)\\n ts = time.time()\\n print(ts)\\n if getCPD:\\n getCPD = False\\n time.sleep(1)\\n cpd = dict(host.get_cpd())\\n print(\\\"Sensor identifier list:\\\")\\n for sensorID in [sensor[0] for sensor in cpd[\\\"sensors\\\"]]:\\n print(\\\"- %s\\\" % sensorID)\\n print(\\\"Actuator identifier list:\\\")\\n for sensorID in [sensor[0] for sensor in cpd[\\\"actuators\\\"]]:\\n print(\\\"- %s\\\" % sensorID)\\n content = msg[\\\"pubMeasurements\\\"][1][0]\\n t = content[\\\"time\\\"]\\n sensorID = content[\\\"sensorID\\\"]\\n x = content[\\\"sensorValue\\\"]\\n print(\\\"measured at time %s: sensor %s, value %s\\\" % (t, sensorID, x))\\n history[sensorID].append((t, x))\\n host.workload_action([nrm.Action(\\\"RaplKey (PackageID 0)\\\", 210)])\\n host.check_daemon()\\n\\nhost.stop_daemon()\";\n", - " var nbb_formatted_code = \"from collections import defaultdict\\n\\nfor name, (daemonCfg, workload) in experiments.items():\\n host.start_daemon(daemonCfg)\\n print(\\\"Starting the workload\\\")\\n host.run_workload(workload)\\n history = defaultdict(list)\\n getCPD = True\\n while host.check_daemon() and not host.workload_finished():\\n measurement_message = host.workload_recv()\\n msg = json.loads(measurement_message)\\n # print(\\\"received raw message: %s\\\" %msg)\\n if \\\"pubMeasurements\\\" in msg:\\n # print(msg)\\n ts = time.time()\\n print(ts)\\n if getCPD:\\n getCPD = False\\n time.sleep(1)\\n cpd = dict(host.get_cpd())\\n print(\\\"Sensor identifier list:\\\")\\n for sensorID in [sensor[0] for sensor in cpd[\\\"sensors\\\"]]:\\n print(\\\"- %s\\\" % sensorID)\\n print(\\\"Actuator identifier list:\\\")\\n for sensorID in [sensor[0] for sensor in cpd[\\\"actuators\\\"]]:\\n print(\\\"- %s\\\" % sensorID)\\n content = msg[\\\"pubMeasurements\\\"][1][0]\\n t = content[\\\"time\\\"]\\n sensorID = content[\\\"sensorID\\\"]\\n x = content[\\\"sensorValue\\\"]\\n print(\\\"measured at time %s: sensor %s, value %s\\\" % (t, sensorID, x))\\n history[sensorID].append((t, x))\\n host.workload_action([nrm.Action(\\\"RaplKey (PackageID 0)\\\", 210)])\\n host.check_daemon()\\n\\nhost.stop_daemon()\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stdout", + "output_type": "stream", + "text": [ + "received upstream message: {'pubPerformance': [1604027245284389.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027245346959, [{'time': 1604027245346959, 'sensorValue': 22.873182776599776, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027245.347903\n", + "measured at time 1604027245346959: sensor RaplKey (PackageID 0), value 22.873182776599776\n", + "received upstream message: {'pubMeasurements': [1604027245384609.8, [{'time': 1604027245384609.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027245.3859277\n", + "measured at time 1604027245384609.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027245384609.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027245446905.2, [{'time': 1604027245446905.2, 'sensorValue': 23.942859286899996, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027245.4478226\n", + "measured at time 1604027245446905.2: sensor RaplKey (PackageID 0), value 23.942859286899996\n", + "received upstream message: {'pubMeasurements': [1604027245483913.2, [{'time': 1604027245483913.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027245.4847977\n", + "measured at time 1604027245483913.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027245483913.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027245547988.5, [{'time': 1604027245547988.5, 'sensorValue': 20.569362381986586, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027245.5495698\n", + "measured at time 1604027245547988.5: sensor RaplKey (PackageID 0), value 20.569362381986586\n", + "received upstream message: {'pubMeasurements': [1604027245584250, [{'time': 1604027245584250, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027245.5852087\n", + "measured at time 1604027245584250: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027245584250, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027245648029.2, [{'time': 1604027245648029.2, 'sensorValue': 18.836274218265558, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027245.6491952\n", + "measured at time 1604027245648029.2: sensor RaplKey (PackageID 0), value 18.836274218265558\n", + "received upstream message: {'pubMeasurements': [1604027245683951.8, [{'time': 1604027245683951.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027245.6848602\n", + "measured at time 1604027245683951.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027245683951.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027245746990.8, [{'time': 1604027245746990.8, 'sensorValue': 18.55260884276877, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027245.7480402\n", + "measured at time 1604027245746990.8: sensor RaplKey (PackageID 0), value 18.55260884276877\n", + "received upstream message: {'pubMeasurements': [1604027245786032, [{'time': 1604027245786032, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027245.787078\n", + "measured at time 1604027245786032: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027245786032, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027245846984.5, [{'time': 1604027245846984.5, 'sensorValue': 20.81972123271853, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027245.8479934\n", + "measured at time 1604027245846984.5: sensor RaplKey (PackageID 0), value 20.81972123271853\n", + "received upstream message: {'pubMeasurements': [1604027245884949.5, [{'time': 1604027245884949.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027245.886423\n", + "measured at time 1604027245884949.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027245884949.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027245946938.2, [{'time': 1604027245946938.2, 'sensorValue': 22.087795605508603, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027245.9481761\n", + "measured at time 1604027245946938.2: sensor RaplKey (PackageID 0), value 22.087795605508603\n", + "received upstream message: {'pubMeasurements': [1604027245984907.8, [{'time': 1604027245984907.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027245.9861248\n", + "measured at time 1604027245984907.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027245984907.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027246047008, [{'time': 1604027246047008, 'sensorValue': 20.80757671509718, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027246.0481198\n", + "measured at time 1604027246047008: sensor RaplKey (PackageID 0), value 20.80757671509718\n", + "received upstream message: {'pubMeasurements': [1604027246085024.8, [{'time': 1604027246085024.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027246.0859783\n", + "measured at time 1604027246085024.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027246085024.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027246146997, [{'time': 1604027246146997, 'sensorValue': 21.371320845478078, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027246.1482563\n", + "measured at time 1604027246146997: sensor RaplKey (PackageID 0), value 21.371320845478078\n", + "received upstream message: {'pubMeasurements': [1604027246185072.5, [{'time': 1604027246185072.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027246.1859639\n", + "measured at time 1604027246185072.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027246185072.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027246246925.8, [{'time': 1604027246246925.8, 'sensorValue': 23.60990205506017, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027246.24798\n", + "measured at time 1604027246246925.8: sensor RaplKey (PackageID 0), value 23.60990205506017\n", + "received upstream message: {'pubMeasurements': [1604027246285687.2, [{'time': 1604027246285687.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027246.2865787\n", + "measured at time 1604027246285687.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027246285687.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027246346972, [{'time': 1604027246346972, 'sensorValue': 23.83900446046756, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027246.347983\n", + "measured at time 1604027246346972: sensor RaplKey (PackageID 0), value 23.83900446046756\n", + "received upstream message: {'pubMeasurements': [1604027246385791.2, [{'time': 1604027246385791.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027246.3869145\n", + "measured at time 1604027246385791.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027246385791.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027246446955.8, [{'time': 1604027246446955.8, 'sensorValue': 25.47282933489213, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027246.448086\n", + "measured at time 1604027246446955.8: sensor RaplKey (PackageID 0), value 25.47282933489213\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "received upstream message: {'pubMeasurements': [1604027246485836.5, [{'time': 1604027246485836.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027246.4868572\n", + "measured at time 1604027246485836.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027246485836.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027246547084.5, [{'time': 1604027246547084.5, 'sensorValue': 19.282983159210048, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027246.548445\n", + "measured at time 1604027246547084.5: sensor RaplKey (PackageID 0), value 19.282983159210048\n", + "received upstream message: {'pubMeasurements': [1604027246586536.8, [{'time': 1604027246586536.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027246.5878615\n", + "measured at time 1604027246586536.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027246586536.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027246646951, [{'time': 1604027246646951, 'sensorValue': 15.78946894090259, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027246.6483464\n", + "measured at time 1604027246646951: sensor RaplKey (PackageID 0), value 15.78946894090259\n", + "received upstream message: {'pubMeasurements': [1604027246686680.8, [{'time': 1604027246686680.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027246.6875513\n", + "measured at time 1604027246686680.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027246686680.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027246746956, [{'time': 1604027246746956, 'sensorValue': 14.241807909575204, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027246.7483768\n", + "measured at time 1604027246746956: sensor RaplKey (PackageID 0), value 14.241807909575204\n", + "received upstream message: {'pubMeasurements': [1604027246785930.8, [{'time': 1604027246785930.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027246.7872663\n", + "measured at time 1604027246785930.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027246785930.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027246846967.2, [{'time': 1604027246846967.2, 'sensorValue': 14.250066867562541, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027246.8484159\n", + "measured at time 1604027246846967.2: sensor RaplKey (PackageID 0), value 14.250066867562541\n", + "received upstream message: {'pubMeasurements': [1604027246886671.2, [{'time': 1604027246886671.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027246.8877032\n", + "measured at time 1604027246886671.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027246886671.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027246946923, [{'time': 1604027246946923, 'sensorValue': 16.038557061585397, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027246.9479117\n", + "measured at time 1604027246946923: sensor RaplKey (PackageID 0), value 16.038557061585397\n", + "received upstream message: {'pubMeasurements': [1604027246985975.8, [{'time': 1604027246985975.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027246.9869285\n", + "measured at time 1604027246985975.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027246985975.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027247046996.8, [{'time': 1604027247046996.8, 'sensorValue': 13.470255686404212, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027247.048112\n", + "measured at time 1604027247046996.8: sensor RaplKey (PackageID 0), value 13.470255686404212\n", + "received upstream message: {'pubMeasurements': [1604027247086140.5, [{'time': 1604027247086140.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027247.0871127\n", + "measured at time 1604027247086140.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027247086140.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027247146962.2, [{'time': 1604027247146962.2, 'sensorValue': 15.729866803950916, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027247.148402\n", + "measured at time 1604027247146962.2: sensor RaplKey (PackageID 0), value 15.729866803950916\n", + "received upstream message: {'pubMeasurements': [1604027247186010, [{'time': 1604027247186010, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027247.1869726\n", + "measured at time 1604027247186010: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027247186010, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027247246980, [{'time': 1604027247246980, 'sensorValue': 23.046389265997934, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027247.2481415\n", + "measured at time 1604027247246980: sensor RaplKey (PackageID 0), value 23.046389265997934\n", + "received upstream message: {'pubMeasurements': [1604027247288043.8, [{'time': 1604027247288043.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027247.2890244\n", + "measured at time 1604027247288043.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027247288043.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027247346938.2, [{'time': 1604027247346938.2, 'sensorValue': 25.040294322795333, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027247.3479557\n", + "measured at time 1604027247346938.2: sensor RaplKey (PackageID 0), value 25.040294322795333\n", + "received upstream message: {'pubMeasurements': [1604027247387036.5, [{'time': 1604027247387036.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027247.388288\n", + "measured at time 1604027247387036.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027247387036.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027247446934.8, [{'time': 1604027247446934.8, 'sensorValue': 17.247873675513002, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027247.4480891\n", + "measured at time 1604027247446934.8: sensor RaplKey (PackageID 0), value 17.247873675513002\n", + "received upstream message: {'pubMeasurements': [1604027247486703.5, [{'time': 1604027247486703.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027247.4877796\n", + "measured at time 1604027247486703.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027247486703.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027247548019, [{'time': 1604027247548019, 'sensorValue': 20.50818005780017, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027247.549447\n", + "measured at time 1604027247548019: sensor RaplKey (PackageID 0), value 20.50818005780017\n", + "received upstream message: {'pubMeasurements': [1604027247587348.5, [{'time': 1604027247587348.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027247.5883818\n", + "measured at time 1604027247587348.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "received upstream message: {'pubPerformance': [1604027247587348.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027247647978.2, [{'time': 1604027247647978.2, 'sensorValue': 18.31003133771174, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027247.6492672\n", + "measured at time 1604027247647978.2: sensor RaplKey (PackageID 0), value 18.31003133771174\n", + "received upstream message: {'pubMeasurements': [1604027247686307.5, [{'time': 1604027247686307.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027247.6872225\n", + "measured at time 1604027247686307.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027247686307.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027247747003.2, [{'time': 1604027247747003.2, 'sensorValue': 22.52732138357524, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027247.748029\n", + "measured at time 1604027247747003.2: sensor RaplKey (PackageID 0), value 22.52732138357524\n", + "received upstream message: {'pubMeasurements': [1604027247786622.8, [{'time': 1604027247786622.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027247.7877808\n", + "measured at time 1604027247786622.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027247786622.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027247846951.8, [{'time': 1604027247846951.8, 'sensorValue': 18.76266277117861, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027247.8479629\n", + "measured at time 1604027247846951.8: sensor RaplKey (PackageID 0), value 18.76266277117861\n", + "received upstream message: {'pubMeasurements': [1604027247887106.5, [{'time': 1604027247887106.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027247.8881218\n", + "measured at time 1604027247887106.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027247887106.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027247946971, [{'time': 1604027247946971, 'sensorValue': 15.796479177758766, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027247.9483616\n", + "measured at time 1604027247946971: sensor RaplKey (PackageID 0), value 15.796479177758766\n", + "received upstream message: {'pubMeasurements': [1604027247988800, [{'time': 1604027247988800, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027247.9898348\n", + "measured at time 1604027247988800: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027247988800, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027248046935.8, [{'time': 1604027248046935.8, 'sensorValue': 18.440900417366294, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027248.047974\n", + "measured at time 1604027248046935.8: sensor RaplKey (PackageID 0), value 18.440900417366294\n", + "received upstream message: {'pubMeasurements': [1604027248088012.5, [{'time': 1604027248088012.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027248.0890505\n", + "measured at time 1604027248088012.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027248088012.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027248146971.2, [{'time': 1604027248146971.2, 'sensorValue': 17.789664669270564, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027248.1480536\n", + "measured at time 1604027248146971.2: sensor RaplKey (PackageID 0), value 17.789664669270564\n", + "received upstream message: {'pubMeasurements': [1604027248188159.5, [{'time': 1604027248188159.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027248.1891713\n", + "measured at time 1604027248188159.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027248188159.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027248246927, [{'time': 1604027248246927, 'sensorValue': 16.533766191486368, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027248.2481933\n", + "measured at time 1604027248246927: sensor RaplKey (PackageID 0), value 16.533766191486368\n", + "received upstream message: {'pubMeasurements': [1604027248290429.2, [{'time': 1604027248290429.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027248.291424\n", + "measured at time 1604027248290429.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027248290429.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027248346931.2, [{'time': 1604027248346931.2, 'sensorValue': 20.51725801651649, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027248.3479636\n", + "measured at time 1604027248346931.2: sensor RaplKey (PackageID 0), value 20.51725801651649\n", + "received upstream message: {'pubMeasurements': [1604027248387526.8, [{'time': 1604027248387526.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027248.388565\n", + "measured at time 1604027248387526.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027248387526.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027248447937, [{'time': 1604027248447937, 'sensorValue': 20.43891560619152, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027248.4489076\n", + "measured at time 1604027248447937: sensor RaplKey (PackageID 0), value 20.43891560619152\n", + "received upstream message: {'pubMeasurements': [1604027248487290.5, [{'time': 1604027248487290.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027248.4882112\n", + "measured at time 1604027248487290.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027248487290.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027248546961.5, [{'time': 1604027248546961.5, 'sensorValue': 19.61635756812361, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027248.5480232\n", + "measured at time 1604027248546961.5: sensor RaplKey (PackageID 0), value 19.61635756812361\n", + "received upstream message: {'pubMeasurements': [1604027248587270.5, [{'time': 1604027248587270.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027248.5881295\n", + "measured at time 1604027248587270.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027248587270.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027248646958.2, [{'time': 1604027248646958.2, 'sensorValue': 18.340396062829946, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027248.6480246\n", + "measured at time 1604027248646958.2: sensor RaplKey (PackageID 0), value 18.340396062829946\n", + "received upstream message: {'pubMeasurements': [1604027248688164.2, [{'time': 1604027248688164.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027248.6892667\n", + "measured at time 1604027248688164.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027248688164.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027248747970.8, [{'time': 1604027248747970.8, 'sensorValue': 15.902784308991416, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027248.749185\n", + "measured at time 1604027248747970.8: sensor RaplKey (PackageID 0), value 15.902784308991416\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "received upstream message: {'pubMeasurements': [1604027248787612, [{'time': 1604027248787612, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027248.788485\n", + "measured at time 1604027248787612: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027248787612, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027248847003.5, [{'time': 1604027248847003.5, 'sensorValue': 17.978416231058258, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027248.8480318\n", + "measured at time 1604027248847003.5: sensor RaplKey (PackageID 0), value 17.978416231058258\n", + "received upstream message: {'pubMeasurements': [1604027248889265.2, [{'time': 1604027248889265.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027248.8901458\n", + "measured at time 1604027248889265.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027248889265.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027248946965.5, [{'time': 1604027248946965.5, 'sensorValue': 22.994517916680078, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027248.9479392\n", + "measured at time 1604027248946965.5: sensor RaplKey (PackageID 0), value 22.994517916680078\n", + "received upstream message: {'pubMeasurements': [1604027248987427.5, [{'time': 1604027248987427.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027248.9882793\n", + "measured at time 1604027248987427.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027248987427.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027249046979.8, [{'time': 1604027249046979.8, 'sensorValue': 23.010580992273198, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027249.0479984\n", + "measured at time 1604027249046979.8: sensor RaplKey (PackageID 0), value 23.010580992273198\n", + "received upstream message: {'pubMeasurements': [1604027249091225, [{'time': 1604027249091225, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027249.0924816\n", + "measured at time 1604027249091225: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027249091225, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027249146960, [{'time': 1604027249146960, 'sensorValue': 25.189844994325487, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027249.1479135\n", + "measured at time 1604027249146960: sensor RaplKey (PackageID 0), value 25.189844994325487\n", + "received upstream message: {'pubMeasurements': [1604027249188104.8, [{'time': 1604027249188104.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027249.1892433\n", + "measured at time 1604027249188104.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027249188104.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027249247926, [{'time': 1604027249247926, 'sensorValue': 18.568745914412407, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027249.248879\n", + "measured at time 1604027249247926: sensor RaplKey (PackageID 0), value 18.568745914412407\n", + "received upstream message: {'pubMeasurements': [1604027249287882.2, [{'time': 1604027249287882.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027249.2887943\n", + "measured at time 1604027249287882.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027249287882.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027249346989.5, [{'time': 1604027249346989.5, 'sensorValue': 19.43611925680186, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027249.3480804\n", + "measured at time 1604027249346989.5: sensor RaplKey (PackageID 0), value 19.43611925680186\n", + "received upstream message: {'pubMeasurements': [1604027249388156.8, [{'time': 1604027249388156.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027249.389138\n", + "measured at time 1604027249388156.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027249388156.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027249446991.2, [{'time': 1604027249446991.2, 'sensorValue': 20.223596087140837, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027249.4480436\n", + "measured at time 1604027249446991.2: sensor RaplKey (PackageID 0), value 20.223596087140837\n", + "received upstream message: {'pubMeasurements': [1604027249491023, [{'time': 1604027249491023, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027249.4920385\n", + "measured at time 1604027249491023: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027249491023, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027249548006.2, [{'time': 1604027249548006.2, 'sensorValue': 19.226798000401352, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027249.5491035\n", + "measured at time 1604027249548006.2: sensor RaplKey (PackageID 0), value 19.226798000401352\n", + "received upstream message: {'pubMeasurements': [1604027249588181.5, [{'time': 1604027249588181.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027249.5890744\n", + "measured at time 1604027249588181.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027249588181.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027249648022.5, [{'time': 1604027249648022.5, 'sensorValue': 21.881764213316565, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027249.6498983\n", + "measured at time 1604027249648022.5: sensor RaplKey (PackageID 0), value 21.881764213316565\n", + "received upstream message: {'pubMeasurements': [1604027249689670.2, [{'time': 1604027249689670.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027249.6906192\n", + "measured at time 1604027249689670.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027249689670.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027249747954.2, [{'time': 1604027249747954.2, 'sensorValue': 15.955059327848224, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027249.748938\n", + "measured at time 1604027249747954.2: sensor RaplKey (PackageID 0), value 15.955059327848224\n", + "received upstream message: {'pubMeasurements': [1604027249793145, [{'time': 1604027249793145, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027249.7948956\n", + "measured at time 1604027249793145: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027249793145, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027249846945.8, [{'time': 1604027249846945.8, 'sensorValue': 20.431218842071107, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027249.8478837\n", + "measured at time 1604027249846945.8: sensor RaplKey (PackageID 0), value 20.431218842071107\n", + "received upstream message: {'pubMeasurements': [1604027249889842.8, [{'time': 1604027249889842.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027249.890985\n", + "measured at time 1604027249889842.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027249889842.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027249947024.8, [{'time': 1604027249947024.8, 'sensorValue': 20.14699387491068, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027249.9482446\n", + "measured at time 1604027249947024.8: sensor RaplKey (PackageID 0), value 20.14699387491068\n", + "received upstream message: {'pubMeasurements': [1604027249989042.5, [{'time': 1604027249989042.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027249.990047\n", + "measured at time 1604027249989042.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027249989042.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027250046957.2, [{'time': 1604027250046957.2, 'sensorValue': 20.79461636589292, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027250.0480423\n", + "measured at time 1604027250046957.2: sensor RaplKey (PackageID 0), value 20.79461636589292\n", + "received upstream message: {'pubMeasurements': [1604027250088567, [{'time': 1604027250088567, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027250.0894027\n", + "measured at time 1604027250088567: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027250088567, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "received upstream message: {'pubMeasurements': [1604027250147001.5, [{'time': 1604027250147001.5, 'sensorValue': 23.241615585135616, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027250.1484926\n", + "measured at time 1604027250147001.5: sensor RaplKey (PackageID 0), value 23.241615585135616\n", + "received upstream message: {'pubMeasurements': [1604027250193092.5, [{'time': 1604027250193092.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027250.194858\n", + "measured at time 1604027250193092.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027250193092.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027250246970.5, [{'time': 1604027250246970.5, 'sensorValue': 19.50977803118639, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027250.2484818\n", + "measured at time 1604027250246970.5: sensor RaplKey (PackageID 0), value 19.50977803118639\n", + "received upstream message: {'pubMeasurements': [1604027250293549, [{'time': 1604027250293549, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027250.2951913\n", + "measured at time 1604027250293549: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027250293549, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027250346977.8, [{'time': 1604027250346977.8, 'sensorValue': 18.78765789477005, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027250.3481104\n", + "measured at time 1604027250346977.8: sensor RaplKey (PackageID 0), value 18.78765789477005\n", + "received upstream message: {'pubMeasurements': [1604027250389583.8, [{'time': 1604027250389583.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027250.3908784\n", + "measured at time 1604027250389583.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027250389583.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027250446922.5, [{'time': 1604027250446922.5, 'sensorValue': 25.111464083984018, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027250.4480207\n", + "measured at time 1604027250446922.5: sensor RaplKey (PackageID 0), value 25.111464083984018\n", + "received upstream message: {'pubMeasurements': [1604027250489560.5, [{'time': 1604027250489560.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027250.490461\n", + "measured at time 1604027250489560.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027250489560.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027250550429.5, [{'time': 1604027250550429.5, 'sensorValue': 21.94162713649056, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027250.5517678\n", + "measured at time 1604027250550429.5: sensor RaplKey (PackageID 0), value 21.94162713649056\n", + "received upstream message: {'pubMeasurements': [1604027250590470.2, [{'time': 1604027250590470.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027250.591423\n", + "measured at time 1604027250590470.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027250590470.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027250646980.8, [{'time': 1604027250646980.8, 'sensorValue': 19.186432076071466, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027250.6479163\n", + "measured at time 1604027250646980.8: sensor RaplKey (PackageID 0), value 19.186432076071466\n", + "received upstream message: {'pubMeasurements': [1604027250689262, [{'time': 1604027250689262, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027250.6902912\n", + "measured at time 1604027250689262: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027250689262, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027250747924.2, [{'time': 1604027250747924.2, 'sensorValue': 22.63730700849281, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027250.7488897\n", + "measured at time 1604027250747924.2: sensor RaplKey (PackageID 0), value 22.63730700849281\n", + "received upstream message: {'pubMeasurements': [1604027250789602.2, [{'time': 1604027250789602.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027250.7904868\n", + "measured at time 1604027250789602.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027250789602.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027250847010.5, [{'time': 1604027250847010.5, 'sensorValue': 20.66299814535757, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027250.8484755\n", + "measured at time 1604027250847010.5: sensor RaplKey (PackageID 0), value 20.66299814535757\n", + "received upstream message: {'pubMeasurements': [1604027250892934.5, [{'time': 1604027250892934.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027250.8940098\n", + "measured at time 1604027250892934.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027250892934.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027250946972.5, [{'time': 1604027250946972.5, 'sensorValue': 21.686040695643904, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027250.9484115\n", + "measured at time 1604027250946972.5: sensor RaplKey (PackageID 0), value 21.686040695643904\n", + "received upstream message: {'pubMeasurements': [1604027250990047.2, [{'time': 1604027250990047.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027250.9911017\n", + "measured at time 1604027250990047.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027250990047.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027251046955.5, [{'time': 1604027251046955.5, 'sensorValue': 23.545202684492406, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027251.0481405\n", + "measured at time 1604027251046955.5: sensor RaplKey (PackageID 0), value 23.545202684492406\n", + "received upstream message: {'pubMeasurements': [1604027251091060.8, [{'time': 1604027251091060.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027251.092136\n", + "measured at time 1604027251091060.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027251091060.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027251147021.2, [{'time': 1604027251147021.2, 'sensorValue': 21.758104046565318, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027251.1481452\n", + "measured at time 1604027251147021.2: sensor RaplKey (PackageID 0), value 21.758104046565318\n", + "received upstream message: {'pubMeasurements': [1604027251193953.5, [{'time': 1604027251193953.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027251.1950784\n", + "measured at time 1604027251193953.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027251193953.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027251246946.8, [{'time': 1604027251246946.8, 'sensorValue': 20.756983952909895, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027251.2480526\n", + "measured at time 1604027251246946.8: sensor RaplKey (PackageID 0), value 20.756983952909895\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "received upstream message: {'pubMeasurements': [1604027251292401, [{'time': 1604027251292401, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027251.2936049\n", + "measured at time 1604027251292401: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027251292401, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027251346966, [{'time': 1604027251346966, 'sensorValue': 22.059903468515163, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027251.348062\n", + "measured at time 1604027251346966: sensor RaplKey (PackageID 0), value 22.059903468515163\n", + "received upstream message: {'pubMeasurements': [1604027251389900.5, [{'time': 1604027251389900.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027251.3907607\n", + "measured at time 1604027251389900.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027251389900.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027251446964.8, [{'time': 1604027251446964.8, 'sensorValue': 20.383504793823427, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027251.4480278\n", + "measured at time 1604027251446964.8: sensor RaplKey (PackageID 0), value 20.383504793823427\n", + "received upstream message: {'pubMeasurements': [1604027251490695, [{'time': 1604027251490695, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027251.4918423\n", + "measured at time 1604027251490695: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027251490695, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027251546963, [{'time': 1604027251546963, 'sensorValue': 21.47065573654224, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027251.5481803\n", + "measured at time 1604027251546963: sensor RaplKey (PackageID 0), value 21.47065573654224\n", + "received upstream message: {'pubMeasurements': [1604027251590179, [{'time': 1604027251590179, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027251.591102\n", + "measured at time 1604027251590179: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027251590179, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027251646950.2, [{'time': 1604027251646950.2, 'sensorValue': 20.985905703106116, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027251.6481228\n", + "measured at time 1604027251646950.2: sensor RaplKey (PackageID 0), value 20.985905703106116\n", + "received upstream message: {'pubMeasurements': [1604027251690173.5, [{'time': 1604027251690173.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027251.691154\n", + "measured at time 1604027251690173.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027251690173.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027251747939.5, [{'time': 1604027251747939.5, 'sensorValue': 20.359454100281635, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027251.7490962\n", + "measured at time 1604027251747939.5: sensor RaplKey (PackageID 0), value 20.359454100281635\n", + "received upstream message: {'pubMeasurements': [1604027251791359.2, [{'time': 1604027251791359.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027251.7922878\n", + "measured at time 1604027251791359.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027251791359.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027251846907.2, [{'time': 1604027251846907.2, 'sensorValue': 20.15365611532177, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027251.8479033\n", + "measured at time 1604027251846907.2: sensor RaplKey (PackageID 0), value 20.15365611532177\n", + "received upstream message: {'pubMeasurements': [1604027251890728, [{'time': 1604027251890728, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027251.8915753\n", + "measured at time 1604027251890728: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027251890728, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027251947098, [{'time': 1604027251947098, 'sensorValue': 23.393427037747895, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027251.9489954\n", + "measured at time 1604027251947098: sensor RaplKey (PackageID 0), value 23.393427037747895\n", + "received upstream message: {'pubMeasurements': [1604027251990691.5, [{'time': 1604027251990691.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027251.9920259\n", + "measured at time 1604027251990691.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027251990691.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027252046945.8, [{'time': 1604027252046945.8, 'sensorValue': 19.645340030317865, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027252.0481746\n", + "measured at time 1604027252046945.8: sensor RaplKey (PackageID 0), value 19.645340030317865\n", + "received upstream message: {'pubMeasurements': [1604027252091378.8, [{'time': 1604027252091378.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027252.0923278\n", + "measured at time 1604027252091378.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027252091378.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027252147013.8, [{'time': 1604027252147013.8, 'sensorValue': 19.47706559535982, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027252.1484113\n", + "measured at time 1604027252147013.8: sensor RaplKey (PackageID 0), value 19.47706559535982\n", + "received upstream message: {'pubMeasurements': [1604027252190661.2, [{'time': 1604027252190661.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027252.191542\n", + "measured at time 1604027252190661.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027252190661.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027252246929.2, [{'time': 1604027252246929.2, 'sensorValue': 23.858600517400358, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027252.2478876\n", + "measured at time 1604027252246929.2: sensor RaplKey (PackageID 0), value 23.858600517400358\n", + "received upstream message: {'pubMeasurements': [1604027252290677.2, [{'time': 1604027252290677.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027252.291491\n", + "measured at time 1604027252290677.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027252290677.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027252346992.5, [{'time': 1604027252346992.5, 'sensorValue': 19.983030732977962, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027252.34798\n", + "measured at time 1604027252346992.5: sensor RaplKey (PackageID 0), value 19.983030732977962\n", + "received upstream message: {'pubMeasurements': [1604027252394486, [{'time': 1604027252394486, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027252.3954523\n", + "measured at time 1604027252394486: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "received upstream message: {'pubPerformance': [1604027252394486, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027252446926.2, [{'time': 1604027252446926.2, 'sensorValue': 13.920932617815959, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027252.4479437\n", + "measured at time 1604027252446926.2: sensor RaplKey (PackageID 0), value 13.920932617815959\n", + "received upstream message: {'pubMeasurements': [1604027252490943.8, [{'time': 1604027252490943.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027252.4919004\n", + "measured at time 1604027252490943.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027252490943.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027252547001.2, [{'time': 1604027252547001.2, 'sensorValue': 19.364706470342337, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027252.5481431\n", + "measured at time 1604027252547001.2: sensor RaplKey (PackageID 0), value 19.364706470342337\n", + "received upstream message: {'pubMeasurements': [1604027252591547.8, [{'time': 1604027252591547.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027252.5924864\n", + "measured at time 1604027252591547.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027252591547.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027252647043, [{'time': 1604027252647043, 'sensorValue': 15.875891815035459, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027252.6479933\n", + "measured at time 1604027252647043: sensor RaplKey (PackageID 0), value 15.875891815035459\n", + "received upstream message: {'pubMeasurements': [1604027252691770.5, [{'time': 1604027252691770.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027252.69273\n", + "measured at time 1604027252691770.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027252691770.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027252747046.2, [{'time': 1604027252747046.2, 'sensorValue': 19.03681130365841, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027252.748342\n", + "measured at time 1604027252747046.2: sensor RaplKey (PackageID 0), value 19.03681130365841\n", + "received upstream message: {'pubMeasurements': [1604027252791683.5, [{'time': 1604027252791683.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027252.792569\n", + "measured at time 1604027252791683.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027252791683.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027252846946, [{'time': 1604027252846946, 'sensorValue': 17.624438499725446, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027252.847919\n", + "measured at time 1604027252846946: sensor RaplKey (PackageID 0), value 17.624438499725446\n", + "received upstream message: {'pubMeasurements': [1604027252891654.2, [{'time': 1604027252891654.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027252.8929675\n", + "measured at time 1604027252891654.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027252891654.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027252946913, [{'time': 1604027252946913, 'sensorValue': 22.10257384914603, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027252.9479723\n", + "measured at time 1604027252946913: sensor RaplKey (PackageID 0), value 22.10257384914603\n", + "received upstream message: {'pubMeasurements': [1604027252994545.2, [{'time': 1604027252994545.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027252.995567\n", + "measured at time 1604027252994545.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027252994545.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027253047896.2, [{'time': 1604027253047896.2, 'sensorValue': 18.24825404215305, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027253.0489206\n", + "measured at time 1604027253047896.2: sensor RaplKey (PackageID 0), value 18.24825404215305\n", + "received upstream message: {'pubMeasurements': [1604027253091442, [{'time': 1604027253091442, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027253.0922527\n", + "measured at time 1604027253091442: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027253091442, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027253147177.5, [{'time': 1604027253147177.5, 'sensorValue': 17.66169342151698, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027253.1483154\n", + "measured at time 1604027253147177.5: sensor RaplKey (PackageID 0), value 17.66169342151698\n", + "received upstream message: {'pubMeasurements': [1604027253191768.2, [{'time': 1604027253191768.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027253.1928225\n", + "measured at time 1604027253191768.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027253191768.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027253246946, [{'time': 1604027253246946, 'sensorValue': 18.209224354288743, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027253.247984\n", + "measured at time 1604027253246946: sensor RaplKey (PackageID 0), value 18.209224354288743\n", + "received upstream message: {'pubMeasurements': [1604027253291997, [{'time': 1604027253291997, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027253.292952\n", + "measured at time 1604027253291997: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027253291997, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027253346979.8, [{'time': 1604027253346979.8, 'sensorValue': 16.958956352322993, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027253.3484652\n", + "measured at time 1604027253346979.8: sensor RaplKey (PackageID 0), value 16.958956352322993\n", + "received upstream message: {'pubMeasurements': [1604027253393992.2, [{'time': 1604027253393992.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027253.3948913\n", + "measured at time 1604027253393992.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027253393992.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027253446997, [{'time': 1604027253446997, 'sensorValue': 17.90091209264446, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027253.448188\n", + "measured at time 1604027253446997: sensor RaplKey (PackageID 0), value 17.90091209264446\n", + "received upstream message: {'pubMeasurements': [1604027253494819.8, [{'time': 1604027253494819.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027253.4957113\n", + "measured at time 1604027253494819.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027253494819.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027253547070.5, [{'time': 1604027253547070.5, 'sensorValue': 21.982692720941007, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027253.548139\n", + "measured at time 1604027253547070.5: sensor RaplKey (PackageID 0), value 21.982692720941007\n", + "received upstream message: {'pubMeasurements': [1604027253592197.8, [{'time': 1604027253592197.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027253.5930293\n", + "measured at time 1604027253592197.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027253592197.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027253647080.8, [{'time': 1604027253647080.8, 'sensorValue': 17.82893253433957, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027253.647991\n", + "measured at time 1604027253647080.8: sensor RaplKey (PackageID 0), value 17.82893253433957\n", + "received upstream message: {'pubMeasurements': [1604027253693383.8, [{'time': 1604027253693383.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027253.694468\n", + "measured at time 1604027253693383.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027253693383.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "received upstream message: {'pubMeasurements': [1604027253746964.2, [{'time': 1604027253746964.2, 'sensorValue': 20.242041979083943, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027253.7480612\n", + "measured at time 1604027253746964.2: sensor RaplKey (PackageID 0), value 20.242041979083943\n", + "received upstream message: {'pubMeasurements': [1604027253792321.5, [{'time': 1604027253792321.5, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027253.793257\n", + "measured at time 1604027253792321.5: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027253792321.5, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027253847135, [{'time': 1604027253847135, 'sensorValue': 19.28403251433273, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027253.8485909\n", + "measured at time 1604027253847135: sensor RaplKey (PackageID 0), value 19.28403251433273\n", + "received upstream message: {'pubMeasurements': [1604027253892313, [{'time': 1604027253892313, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027253.893322\n", + "measured at time 1604027253892313: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027253892313, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027253947030.5, [{'time': 1604027253947030.5, 'sensorValue': 19.497254631237148, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027253.948208\n", + "measured at time 1604027253947030.5: sensor RaplKey (PackageID 0), value 19.497254631237148\n", + "received upstream message: {'pubMeasurements': [1604027253993312.2, [{'time': 1604027253993312.2, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027253.9943373\n", + "measured at time 1604027253993312.2: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027253993312.2, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027254046964, [{'time': 1604027254046964, 'sensorValue': 20.390099415963572, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027254.0481875\n", + "measured at time 1604027254046964: sensor RaplKey (PackageID 0), value 20.390099415963572\n", + "received upstream message: {'pubMeasurements': [1604027254096391.8, [{'time': 1604027254096391.8, 'sensorValue': 0, 'sensorID': 'DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0)'}]]}\n", + "1604027254.0972788\n", + "measured at time 1604027254096391.8: sensor DownstreamCmdKey (DownstreamCmdID 3654019c-d97a-41d4-a5e4-3fc27657b3b0), value 0\n", + "received upstream message: {'pubPerformance': [1604027254096391.8, '08383fd1-1a5d-11eb-8001-8c1645edb774', 0]}\n", + "received upstream message: {'pubMeasurements': [1604027254147059.2, [{'time': 1604027254147059.2, 'sensorValue': 19.262602371343462, 'sensorID': 'RaplKey (PackageID 0)'}]]}\n", + "1604027254.1483793\n", + "measured at time 1604027254147059.2: sensor RaplKey (PackageID 0), value 19.262602371343462\n", + "received upstream message: {'pubEnd': '08383fd1-1a5d-11eb-8001-8c1645edb774'}\n" + ] } ], "source": [ - "from collections import defaultdict\n", - "\n", - "for name, (daemonCfg, workload) in experiments.items():\n", - " host.start_daemon(daemonCfg)\n", - " print(\"Starting the workload\")\n", - " host.run_workload(workload)\n", - " history = defaultdict(list)\n", - " getCPD = True\n", - " while host.check_daemon() and not host.workload_finished():\n", - " measurement_message = host.workload_recv()\n", - " msg = json.loads(measurement_message)\n", - " # print(\"received raw message: %s\" %msg)\n", - " if \"pubMeasurements\" in msg:\n", - " # print(msg)\n", - " ts = time.time()\n", - " print(ts)\n", - " if getCPD:\n", - " getCPD = False\n", - " time.sleep(1)\n", - " cpd = dict(host.get_cpd())\n", - " print(\"Sensor identifier list:\")\n", - " for sensorID in [sensor[0] for sensor in cpd[\"sensors\"]]:\n", - " print(\"- %s\" % sensorID)\n", - " print(\"Actuator identifier list:\")\n", - " for sensorID in [sensor[0] for sensor in cpd[\"actuators\"]]:\n", - " print(\"- %s\" % sensorID)\n", - " content = msg[\"pubMeasurements\"][1][0]\n", - " t = content[\"time\"]\n", - " sensorID = content[\"sensorID\"]\n", - " x = content[\"sensorValue\"]\n", - " print(\"measured at time %s: sensor %s, value %s\" % (t, sensorID, x))\n", - " history[sensorID].append((t, x))\n", - " host.workload_action([nrm.Action(\"RaplKey (PackageID 0)\", 210)])\n", - " host.check_daemon()\n", - "\n", - "host.stop_daemon()" + "for name, (daemonCfg, workloads) in experiments.items():\n", + " with nrm.nrmd(daemonCfg) as d:\n", + " for w in workloads: d.run(**w)\n", + " history = defaultdict(list)\n", + " getCPD = True\n", + " d.actuate([nrm.Action(\"RaplKey (PackageID 0)\", 210)])\n", + " while not d.all_finished():\n", + " msg = d.upstream_recv()\n", + " print(\"received upstream message: %s\" %msg)\n", + " if \"pubMeasurements\" in msg:\n", + " ts = time.time()\n", + " print(ts)\n", + " if getCPD:\n", + " getCPD = False\n", + " time.sleep(1)\n", + " cpd = dict(d.get_cpd())\n", + " print(\"Sensor identifier list:\")\n", + " for sensorID in [sensor[0] for sensor in cpd[\"sensors\"]]:\n", + " print(\"- %s\" % sensorID)\n", + " print(\"Actuator identifier list:\")\n", + " for sensorID in [sensor[0] for sensor in cpd[\"actuators\"]]:\n", + " print(\"- %s\" % sensorID)\n", + " content = msg[\"pubMeasurements\"][1][0]\n", + " t = content[\"time\"]\n", + " sensorID = content[\"sensorID\"]\n", + " x = content[\"sensorValue\"]\n", + " print(\"measured at time %s: sensor %s, value %s\" % (t, sensorID, x))\n", + " history[sensorID].append((t, x))" ] }, { @@ -1014,12 +1173,12 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 11, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -1031,7 +1190,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -1040,33 +1199,6 @@ "needs_background": "light" }, "output_type": "display_data" - }, - { - "data": { - "application/javascript": [ - "\n", - " setTimeout(function() {\n", - " var nbb_cell_id = 18;\n", - " var nbb_unformatted_code = \"for sensorID, measurements in history.items():\\n dataframe = pd.DataFrame(\\n data=[(pd.Timestamp(t, unit=\\\"us\\\"), m) for t, m in measurements]\\n )\\n dataframe.columns = [\\\"time\\\", \\\"value\\\"]\\n dataframe = dataframe.set_index(\\\"time\\\")\\n ax = dataframe.plot(\\n marker=\\\"o\\\", linestyle=\\\"-\\\", title='values for sensor \\\"%s[..]\\\"' % sensorID[:20]\\n )\";\n", - " var nbb_formatted_code = \"for sensorID, measurements in history.items():\\n dataframe = pd.DataFrame(\\n data=[(pd.Timestamp(t, unit=\\\"us\\\"), m) for t, m in measurements]\\n )\\n dataframe.columns = [\\\"time\\\", \\\"value\\\"]\\n dataframe = dataframe.set_index(\\\"time\\\")\\n ax = dataframe.plot(\\n marker=\\\"o\\\", linestyle=\\\"-\\\", title='values for sensor \\\"%s[..]\\\"' % sensorID[:20]\\n )\";\n", - " var nbb_cells = Jupyter.notebook.get_cells();\n", - " for (var i = 0; i < nbb_cells.length; ++i) {\n", - " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", - " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", - " nbb_cells[i].set_text(nbb_formatted_code);\n", - " }\n", - " break;\n", - " }\n", - " }\n", - " }, 500);\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ diff --git a/pynrm/nrm/tooling.py b/pynrm/nrm/tooling.py index 03cbace..538e85c 100644 --- a/pynrm/nrm/tooling.py +++ b/pynrm/nrm/tooling.py @@ -1,18 +1,33 @@ import nrm.sharedlib +import signal import os import yaml import json import subprocess import shutil +from contextlib import contextmanager import nrm.messaging - +from multiprocessing import Process from typing import NamedTuple, List, NewType ActuatorID = NewType("ActuatorID", str) +SensorID = NewType("SensorID", str) ActuatorValue = NewType("ActuatorValue", float) +class Actuator(NamedTuple): + actuatorID: ActuatorID + admissibleActions: List[ActuatorValue] + + +class Sensor(NamedTuple): + sensorID: SensorID + maxFrequency: float + lowerbound: float + upperbound: float + + class Action(NamedTuple): actuatorID: ActuatorID actuatorValue: ActuatorValue @@ -33,19 +48,35 @@ def _exitCodeBool(*args, **kwargs): return _doesntThrow(subprocess.check_call, *args, **kwargs) -class CPD(object): - def __init__(self, cpd): +class CPD: + def __init__(self, cpd: str): self.cpd = cpd def __str__(self): return lib.showCpd(self.cpd) def __iter__(self): - for key, value in json.loads(lib.jsonCpd(self.cpd)).items(): - yield key, value + yield from json.loads(lib.jsonCpd(self.cpd)).items() + + def actuators(self) -> List[Actuator]: + return [ + Actuator(actuatorID=a[0], admissibleActions=a[1]["actions"]) + for a in json.loads(lib.jsonCpd(self.cpd))["actuators"] + ] + + def sensors(self) -> List[Sensor]: + return [ + Sensor( + sensorID=a[0], + maxFrequency=a[1]["maxFrequency"], + lowerbound=a[1]["range"]["i"][0], + upperbound=a[1]["range"]["i"][1], + ) + for a in json.loads(lib.jsonCpd(self.cpd))["sensors"] + ] -class NRMState(object): +class NRMState: def __init__(self, cpd): self.state = cpd @@ -53,146 +84,89 @@ class NRMState(object): return lib.showState(self.state) def __iter__(self): - for key, value in json.loads(lib.jsonState(self.state)).items(): - yield key, value - - -class Remote(object): - def __init__(self, target): - self.target = target - - def start_daemon(self, configuration): - """ start nrmd """ - if self.check_daemon(): - self.stop_daemon() - return subprocess.check_call( - [ - "ssh", - "%s" % (self.target), - "/home/cc/.nix-profile/bin/daemonize /home/cc/.nix-profile/bin/nrmd " - + configuration, - ], - stderr=subprocess.STDOUT, + yield from json.loads(lib.jsonState(self.state)).items() + + +@contextmanager +def nrmd(configuration): + """ + The nrmd context manager is the proper way to initialize the NRM daemon + via this module. + SIGTERM will be sent to the process that performed the resource acquisition + if the daemon terminates illegally. + + Example: + with nrmd({}) as d: + cpd = d.get_cpd() + print(cpd.actuators()) + print(cpd.sensors()) + print(d.upstream_recv()) + print("done.") + + """ + + def daemon(): + subprocess.run(["pkill", "-f", "nrmd"]) + subprocess.run(["pkill", "nrmd"]) + completed = subprocess.run( + [shutil.which("nrmd"), "-y", json.dumps(configuration),] ) + if completed.returncode != 0: + print("NRM daemon exited with exit code %d" % completed.returncode) + os.kill(os.getppid(), signal.SIGTERM) - def check_daemon(self): - """ checks if nrmd is alive """ - return _exitCodeBool(["ssh", "%s" % self.target, "pgrep nrmd"]) - - def stop_daemon(self): - """ stops nrmd """ - subprocess.check_call(["ssh", "%s" % self.target, "pkill nrmd"]) - - def run_workload(self, workload): - """ Runs a workload via NRM. The `nrmd` daemon must be running. """ - pass - - def get_state(self): - pass - - def get_cpd(self): - pass - - def workload_finished(self): - """ Checks NRM to see whether all tasks are finished. """ - return True - - def workload_recv(self): - """ Receive a message from NRM's upstream API. """ - pass - - def workload_send(self, message): - """ Send a message to NRM's upstream API. """ - pass - - def workload_exit_status(self): - """ Check the workload's exit status. """ - pass + p = Process(target=daemon) + p.start() + try: + yield NRMD(p) + finally: + p.kill() + subprocess.run(["pkill", "-f", "nrmd"]) + subprocess.run(["pkill", "nrmd"]) -class Local(object): - def __init__(self): +class NRMD: + def __init__(self, daemon): + self.daemon = daemon self.commonOpts = lib.defaultCommonOpts() - - def start_daemon( - self, configuration, outfile="/tmp/nrmd_out", errfile="/tmp/nrmd_err" - ): - """ start nrmd """ - if self.check_daemon(): - self.stop_daemon() - subprocess.Popen( - [ - "daemonize", - "-o", - outfile, - "-e", - errfile, - shutil.which("nrmd"), - "-y", - json.dumps(configuration), - ], - stderr=subprocess.STDOUT, - stdin=subprocess.PIPE, - ) self.upstreampub = nrm.messaging.UpstreamPubClient( lib.pubAddress(self.commonOpts) ) - print("connecting") self.upstreampub.connect(wait=False) - print("connected to %s" % lib.pubAddress(self.commonOpts)) - return - def check_daemon(self): - """ checks if nrmd is alive """ - return _exitCodeBool(["pgrep", "-f", "nrmd"]) or _exitCodeBool( - ["pgrep", "nrmd"] + def run(self, cmd: str, args: List[str], manifest, sliceID: str): + """ Upstream request: Run an application via NRM.""" + lib.run( + self.commonOpts, + lib.mkSimpleRun( + cmd, + args, + list(dict(os.environ).items()), + json.dumps(manifest), + sliceID, + ), ) - def stop_daemon(self): - """ stops nrmd """ - if not ( - _exitCodeBool(["pkill", "-f", "nrmd"]) or _exitCodeBool(["pkill", "nrmd"]) - ): - raise (Exception) - - def run_workload(self, workloads): - """ Runs a workload via NRM. The `nrmd` daemon must be running. """ - for w in workloads: - lib.run( - self.commonOpts, - lib.mkSimpleRun( - w["cmd"], - w["args"], - list(dict(os.environ).items()), - json.dumps(w["manifest"]), - w["sliceID"], - ), - ) + def actuate(self, actionList: List[Action]) -> None: + """ Upstream request: Run an available action """ + actionList = [(str(a.actuatorID), float(a.actuatorValue)) for a in actionList] + if lib.action(self.commonOpts, actionList): + pass + else: + raise (Exception("couldn't actuate")) - def get_cpd(self): - """ Obtain the current Control Problem Description """ + def get_cpd(self) -> str: + """ Upstream request: Obtain the current Control Problem Description """ return CPD(lib.cpd(self.commonOpts)) - def get_state(self): - """ Obtain the current daemon state """ + def get_state(self) -> str: + """ Upstream request: Obtain the current daemon state """ return NRMState(lib.state(self.commonOpts)) - def workload_finished(self): - """ Checks NRM to see whether all tasks are finished. """ + def all_finished(self) -> None: + """ Upstream request: Checks NRM to see whether all tasks are finished. """ return lib.finished(self.commonOpts) - def workload_recv(self): - """ Receive a message from NRM's upstream API. """ - return self.upstreampub.recv() - - def workload_action(self, actionList: List[Action]): - """ Send a message to NRM's upstream API. """ - actionList = [(str(a.actuatorID), float(a.actuatorValue)) for a in actionList] - if lib.action(self.commonOpts, actionList): - pass - else: - raise (Exception("couldn't actuate")) - - def workload_exit_status(self): - """ Check the workload's exit status. """ - pass + def upstream_recv(self) -> {}: + """ Upstream listen: Receive a message from NRM's upstream API. """ + return json.loads(self.upstreampub.recv()) diff --git a/shell.nix b/shell.nix index 1e3c901..eede094 100644 --- a/shell.nix +++ b/shell.nix @@ -49,6 +49,7 @@ in mkShell { withHoogle = true; buildInputs = [ pkgs.git + pkgs.pythonPackages.mypy pkgs.hwloc pkgs.htop pkgs.jq @@ -78,7 +79,6 @@ in mkShell { ] ++ lib.optional ihaskell [ pkgs.ihaskell ] ++ lib.optionals experiment [ pandoc - daemonize pythonPackages.pandas pythonPackages.matplotlib pythonPackages.seaborn diff --git a/tests/example-test.sh b/tests/example-test.sh index 3007f4a..b04b1a0 100755 --- a/tests/example-test.sh +++ b/tests/example-test.sh @@ -8,7 +8,7 @@ for file in ./examples/nrmd/*.dhall ; do echo "merged file $rootname.yaml with defaults:" yq -s '.[0] * .[1]' ./resources/defaults/nrmd.json ./examples/nrmd/${rootname}.yaml echo "diffing with file: $file" - dhall diff " $file " " $(yq -s '.[0] * .[1]' ./resources/defaults/nrmd.json ./examples/nrmd/${rootname}.yaml | json-to-dhall ' (./hsnrm/hsnrm/dhall/types/nrmd.dhall).Cfg ' --records-loose) " + dhall diff " $file " " $(yq -s '.[0] * .[1]' ./resources/defaults/nrmd.json ./examples/nrmd/${rootname}.yaml | json-to-dhall ' (./hsnrm/hsnrm/dhall/types/nrmd.dhall).Cfg ' ) " cat ./examples/nrmd/${rootname}.yaml | yq '' > ./examples/nrmd/${rootname}.json done @@ -18,7 +18,7 @@ for file in ./examples/manifests/*.dhall ; do echo "merged file $rootname.yaml with defaults:" yq -s '.[0] * .[1]' ./resources/defaults/manifest.json ./examples/manifests/${rootname}.yaml echo "diffing with file: $file" - dhall diff " $file " " $(yq -s '.[0] * .[1]' ./resources/defaults/manifest.json ./examples/manifests/${rootname}.yaml | json-to-dhall ' (./hsnrm/hsnrm/dhall/types/manifest.dhall).Manifest ' --records-loose) " + dhall diff " $file " " $(yq -s '.[0] * .[1]' ./resources/defaults/manifest.json ./examples/manifests/${rootname}.yaml | json-to-dhall ' (./hsnrm/hsnrm/dhall/types/manifest.dhall).Manifest ' ) " cat ./examples/manifests/${rootname}.yaml | yq '' > ./examples/manifests/${rootname}.json done -- GitLab From 5b550345824b354e1a65ece7369dd321f0a8bfc7 Mon Sep 17 00:00:00 2001 From: Valentin Reis Date: Fri, 30 Oct 2020 11:05:30 -0500 Subject: [PATCH 2/2] [refactor] Removes rendered notebook (gitlab now does visualisation) --- .gitlab-ci.dhall | 1 - .gitlab-ci.yml | 6 - Makefile | 10 - doc/notebooks/notebooks/configuration.html | 13598 --------------- doc/notebooks/notebooks/internal-control.html | 14257 --------------- doc/notebooks/notebooks/tutorial.html | 14460 ---------------- 6 files changed, 42332 deletions(-) delete mode 100644 doc/notebooks/notebooks/configuration.html delete mode 100644 doc/notebooks/notebooks/internal-control.html delete mode 100644 doc/notebooks/notebooks/tutorial.html diff --git a/.gitlab-ci.dhall b/.gitlab-ci.dhall index f3cdd68..0d77f6f 100644 --- a/.gitlab-ci.dhall +++ b/.gitlab-ci.dhall @@ -29,7 +29,6 @@ in { stages = [ "source", "build", "test", "deploy" ] , nix/pynrm = mkNixB "pythonPackages.pynrm" , nix/libnrm = mkNixB "libnrm" , nix/stream = mkNixB "stream" - , notebooks = mkT "notebooks" , tests/kvm = mkT "tests-kvm" , tests/apps = mkT "app-tests" , tests/rapl = mkT "tests-rapl" ⫽ { tags = [ "chimera" ] } diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4173e2f..3d07f28 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -89,12 +89,6 @@ nixfmt: tags: - nix - kvm -notebooks: - script: "nix-shell -p gnumake --run 'make notebooks'" - stage: test - tags: - - nix - - kvm pynrm/black: script: "nix-shell -p gnumake --run 'make pynrm/black'" stage: source diff --git a/Makefile b/Makefile index 5959334..34c1651 100644 --- a/Makefile +++ b/Makefile @@ -38,16 +38,6 @@ pre-commit: hsnrm/pre-commit\ resource-propagation\ .gitlab-ci.yml -.PHONY: notebooks -notebooks: - @nix-shell --pure --run <<< bash ' - notebooks/batchnb.py notebooks/configuration.ipynb - jupyter nbconvert doc/notebooks/notebooks/configuration.ipynb --output-dir=doc/notebooks/notebooks - rm doc/notebooks/notebooks/configuration.ipynb - jupyter nbconvert notebooks/tutorial.ipynb --output-dir=doc/notebooks/notebooks - jupyter nbconvert notebooks/internal-control.ipynb --output-dir=doc/notebooks/notebooks - ' - app-tests: @nix-shell --pure -p \ 'with (import {}); stream.override { nrmSupport = true; }' \ diff --git a/doc/notebooks/notebooks/configuration.html b/doc/notebooks/notebooks/configuration.html deleted file mode 100644 index 476067e..0000000 --- a/doc/notebooks/notebooks/configuration.html +++ /dev/null @@ -1,13598 +0,0 @@ - - - - -configuration - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-

NRM Configuration/Manifest guide

This notebook documents NRM's configuration and manifest format. The two next cells are for setup purposes.

- -
-
-
-
-
-
In [1]:
-
-
-
%%capture
-cd ..
-
- -
-
-
- -
-
-
-
In [2]:
-
-
-
import json
-import pprint
-
-pp = pprint.PrettyPrinter(indent=4)
-
- -
-
-
- -
-
-
-
-

Daemon configuration

-
-
-
-
-
-
-

nrmd's configuration can be defined in the json/yaml/Dhall formats. Admissible values are defined in file resources/configurationSchema.json, and alternatively available as a Dhall type in resources/types/Cfg.dhall. Schema files get large, so the next cells shows the Dhall Configuration type as a more readable alternative.

- -
-
-
-
-
-
In [3]:
-
-
-
%%script dhall resolve
-./hsnrm/resources/defaults/Cfg.dhall
-
- -
-
-
- -
-
- - -
- -
- - -
-
{ activeSensorFrequency =
-    { fromHz = 1.0 }
-, argo_nodeos_config =
-    "argo_nodeos_config"
-, argo_perf_wrapper =
-    "nrm-perfwrapper"
-, controlCfg =
-    < ControlCfg :
-        { hint :
-            < Full
-            | Only :
-                { only :
-                    List (List { actuatorID : Text, actuatorValue : Double })
-                }
-            >
-        , learnCfg :
-            < Contextual :
-                { contextual : { horizon : Integer } }
-            | Lagrange :
-                { lagrange : Double }
-            | Random :
-                { random : Optional Integer }
-            >
-        , minimumControlInterval :
-            { fromuS : Double }
-        , referenceMeasurementRoundInterval :
-            Integer
-        , speedThreshold :
-            Double
-        , staticPower :
-            { fromuW : Double }
-        }
-    | FixedCommand :
-        { fixedPower : { fromuW : Double } }
-    >.FixedCommand
-    { fixedPower = { fromuW = 2.5e8 } }
-, downstreamCfg =
-    { downstreamBindAddress = "ipc:///tmp/nrm-downstream-event" }
-, dummy =
-    True
-, hwloc =
-    "hwloc"
-, hwmonCfg =
-    { hwmonEnabled = True, hwmonPath = "/sys/class/hwmon" }
-, libnrmPath =
-    None Text
-, logfile =
-    "/tmp/nrm.log"
-, nodeos =
-    False
-, perf =
-    "perf"
-, pmpi_lib =
-    "pmpi_lib"
-, raplCfg =
-    Some
-    { raplActions =
-        [ { fromuW = 1.0e8 }, { fromuW = 2.0e8 } ]
-    , raplPath =
-        "/sys/devices/virtual/powercap/intel-rapl"
-    , referencePower =
-        { fromuW = 2.5e8 }
-    }
-, singularity =
-    False
-, slice_runtime =
-    < Dummy | Nodeos | Singularity >.Dummy
-, upstreamCfg =
-    { pubPort = +2345, rpcPort = +3456, upstreamBindAddress = "*" }
-, verbose =
-    < Debug | Error | Info >.Error
-}
-
-
-
- -
-
- -
-
-
-
-

Optional values are filled using defaults that can be found in resources/defaults/Cfg.json (also available in the Dhall format):

- -
-
-
-
-
-
In [4]:
-
-
-
%%bash
-cat ./hsnrm/resources/defaults/Cfg.json | jq
-
- -
-
-
- -
-
- - -
- -
- - -
-
{
-  "pmpi_lib": "pmpi_lib",
-  "verbose": "Error",
-  "logfile": "/tmp/nrm.log",
-  "singularity": false,
-  "argo_nodeos_config": "argo_nodeos_config",
-  "controlCfg": {
-    "fixedPower": {
-      "fromuW": 250000000
-    }
-  },
-  "upstreamCfg": {
-    "upstreamBindAddress": "*",
-    "rpcPort": 3456,
-    "pubPort": 2345
-  },
-  "libnrmPath": null,
-  "activeSensorFrequency": {
-    "fromHz": 1
-  },
-  "perf": "perf",
-  "argo_perf_wrapper": "nrm-perfwrapper",
-  "downstreamCfg": {
-    "downstreamBindAddress": "ipc:///tmp/nrm-downstream-event"
-  },
-  "nodeos": false,
-  "hwloc": "hwloc",
-  "raplCfg": {
-    "referencePower": {
-      "fromuW": 250000000
-    },
-    "raplActions": [
-      {
-        "fromuW": 100000000
-      },
-      {
-        "fromuW": 200000000
-      }
-    ],
-    "raplPath": "/sys/devices/virtual/powercap/intel-rapl"
-  },
-  "dummy": true,
-  "slice_runtime": "Dummy",
-  "hwmonCfg": {
-    "hwmonPath": "/sys/class/hwmon",
-    "hwmonEnabled": true
-  }
-}
-
-
-
- -
-
- -
-
-
-
-

Manifest configuration

-
-
-
-
-
-
-

Example manifest files are in resources/examples in JSON/YAML/Dhall format. For instance, the manifest file resources/examples/perfwrap.json enables enables performance monitoring:

- -
-
-
-
-
-
In [5]:
-
-
-
%%bash
-cat ./hsnrm/resources/examples/perfwrap.json | jq
-
- -
-
-
- -
-
- - -
- -
- - -
-
{
-  "image": null,
-  "hwbind": false,
-  "app": {
-    "scheduler": "FIFO",
-    "instrumentation": null,
-    "power": {
-      "slowdown": 1,
-      "profile": false,
-      "policy": "NoPowerPolicy"
-    },
-    "perfwrapper": {
-      "perfLimit": {
-        "fromOps": 100000
-      },
-      "perfFreq": {
-        "fromHz": 1
-      }
-    },
-    "slice": {
-      "cpus": 1,
-      "mems": 1
-    }
-  },
-  "name": "default"
-}
-
-
-
- -
-
- -
-
-
-
-

Manifest options are documented in schema file resources/manifestSchema.json. The next cell shows the corresponding Dhall type.

- -
-
-
-
-
-
In [6]:
-
-
-
%%script dhall resolve
-./hsnrm/resources/types/Manifest.dhall
-
- -
-
-
- -
-
- - -
- -
- - -
-
{ app :
-    { instrumentation :
-        Optional { ratelimit : { fromHz : Double } }
-    , perfwrapper :
-        < Perfwrapper :
-            { perfFreq :
-                { fromHz : Double }
-            , perfLimit :
-                { fromOps : Integer }
-            }
-        | PerfwrapperDisabled
-        >
-    , power :
-        { policy :
-            < Combined | DDCM | DVFS | NoPowerPolicy >
-        , profile :
-            Bool
-        , slowdown :
-            Integer
-        }
-    , scheduler :
-        < FIFO | HPC | Other : { _1 : Integer } >
-    , slice :
-        { cpus : Integer, mems : Integer }
-    }
-, hwbind :
-    Bool
-, image :
-    Optional
-    { binds : Optional (List Text), imagetype : < Docker | Sif >, path : Text }
-, name :
-    Text
-}
-
-
-
- -
-
- -
-
-
-
-

Under-specified manifests like the one in our workloads above (with missing optional fields from the schema) fill missing values with defaults, which are located in file resources/defaults/Manifest.json:

- -
-
-
-
-
-
In [7]:
-
-
-
%%bash
-cat hsnrm/resources/defaults/Manifest.json | jq
-
- -
-
-
- -
-
- - -
- -
- - -
-
{
-  "image": null,
-  "hwbind": false,
-  "app": {
-    "scheduler": "FIFO",
-    "instrumentation": null,
-    "power": {
-      "slowdown": 1,
-      "profile": false,
-      "policy": "NoPowerPolicy"
-    },
-    "perfwrapper": "PerfwrapperDisabled",
-    "slice": {
-      "cpus": 1,
-      "mems": 1
-    }
-  },
-  "name": "default"
-}
-
-
-
- -
-
- -
-
-
-
-

The dhall and dhall-to-json utilities are available as convenience in this environment should you need them. Dhall is useful as a configuration language in itself:

- -
-
-
-
-
-
In [8]:
-
-
-
%%script bash
-dhall-to-json <<< 'let Manifest = ./hsnrm/resources/types/Manifest.dhall 
-    let appendName = \(m: Manifest) -> m // {name = m.name ++ "-appended" }
-    in appendName ./hsnrm/resources/defaults/Manifest.dhall
-' | jq
-
- -
-
-
- -
-
- - -
- -
- - -
-
{
-  "image": null,
-  "hwbind": false,
-  "app": {
-    "scheduler": "FIFO",
-    "instrumentation": null,
-    "power": {
-      "slowdown": 1,
-      "profile": false,
-      "policy": "NoPowerPolicy"
-    },
-    "perfwrapper": "PerfwrapperDisabled",
-    "slice": {
-      "cpus": 1,
-      "mems": 1
-    }
-  },
-  "name": "default-appended"
-}
-
-
-
- -
-
- -
-
-
-
-

Remember that any json document is one little step away from being a Python dictionaryy:

- -
-
-
-
-
- - - - - - diff --git a/doc/notebooks/notebooks/internal-control.html b/doc/notebooks/notebooks/internal-control.html deleted file mode 100644 index 16fbe9c..0000000 --- a/doc/notebooks/notebooks/internal-control.html +++ /dev/null @@ -1,14257 +0,0 @@ - - - - -internal-control - - - - - - -