blob: 64e752fbb4aaa2d43b3a735824aa49145432a439 [file] [log] [blame]
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<font size=\"8\">Energy Meter Examples</font>\n",
"<br>\n",
"<font size=\"5\">ARM Energy Probe</font>\n",
"<br>\n",
"<hr>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This notebook shows how to use the `AEP` energy meters.\n",
"\n",
"*NOTE*: `caiman` is required to collect data from the probe. Instructions on how to install it can be found here https://github.com/ARM-software/lisa/wiki/Energy-Meters-Requirements#arm-energy-probe-aep"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Import Required Modules"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import logging\n",
"from conf import LisaLogging\n",
"LisaLogging.setup()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Generate plots inline\n",
"%matplotlib inline\n",
"\n",
"import os\n",
"\n",
"# Support to access the remote target\n",
"import devlib\n",
"from env import TestEnv\n",
"\n",
"# RTApp configurator for generation of PERIODIC tasks\n",
"from wlgen import RTA, Ramp"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Target Configuration"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Setup target configuration\n",
"my_conf = {\n",
"\n",
" # Target platform and board\n",
" \"platform\" : 'linux',\n",
" \"board\" : 'juno',\n",
" \"host\" : '192.168.0.1',\n",
"\n",
" # Folder where all the results will be collected\n",
" \"results_dir\" : \"EnergyMeter_AEP\",\n",
"\n",
" # Define devlib modules to load\n",
" \"exclude_modules\" : [ 'hwmon' ],\n",
"\n",
" # Energy Meters Configuration for ARM Energy Probe\n",
" \"emeter\" : {\n",
" \"instrument\" : \"aep\",\n",
" \"conf\" : {\n",
" # Value of the shunt resistor in Ohm\n",
" 'resistor_values' : [0.099],\n",
" # Device entry assigned to the probe on the host\n",
" 'device_entry' : '/dev/ttyACM0',\n",
" },\n",
" 'channel_map' : {\n",
" 'BAT' : 'BAT'\n",
" }\n",
" },\n",
" \n",
" # Tools required by the experiments\n",
" \"tools\" : [ 'trace-cmd', 'rt-app' ],\n",
" \n",
" # Comment this line to calibrate RTApp in your own platform\n",
" \"rtapp-calib\" : {\"0\": 360, \"1\": 142, \"2\": 138, \"3\": 352, \"4\": 352, \"5\": 353},\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"03:58:29 INFO : Target - Using base path: /data/lisa\n",
"03:58:29 INFO : Target - Loading custom (inline) target configuration\n",
"03:58:29 INFO : Target - Devlib modules to load: ['bl', 'cpufreq']\n",
"03:58:29 INFO : Target - Connecting linux target:\n",
"03:58:29 INFO : Target - username : root\n",
"03:58:29 INFO : Target - host : 192.168.0.1\n",
"03:58:29 INFO : Target - password : \n",
"03:58:29 INFO : Target - Connection settings:\n",
"03:58:29 INFO : Target - {'username': 'root', 'host': '192.168.0.1', 'password': ''}\n",
"03:58:33 INFO : Target - Initializing target workdir:\n",
"03:58:33 INFO : Target - /root/devlib-target\n",
"03:58:39 INFO : Target - Topology:\n",
"03:58:39 INFO : Target - [[0, 3, 4, 5], [1, 2]]\n",
"03:58:40 INFO : Platform - Loading default EM:\n",
"03:58:40 INFO : Platform - /data/lisa/libs/utils/platforms/juno.json\n",
"03:58:40 WARNING : Target - Using configuration provided RTApp calibration\n",
"03:58:40 INFO : Target - Using RT-App calibration values:\n",
"03:58:40 INFO : Target - {\"0\": 360, \"1\": 142, \"2\": 138, \"3\": 352, \"4\": 352, \"5\": 353}\n",
"03:58:40 INFO : AEP - AEP configuration\n",
"03:58:40 INFO : AEP - {'instrument': 'aep', 'channel_map': {'BAT': 'BAT'}, 'conf': {'resistor_values': [0.099], 'device_entry': '/dev/ttyACM0'}}\n",
"03:58:40 INFO : AEP - Channels selected for energy sampling:\n",
"[CHAN(BAT_current), CHAN(BAT_power), CHAN(BAT_voltage)]\n",
"03:58:40 INFO : TestEnv - Set results folder to:\n",
"03:58:40 INFO : TestEnv - /data/lisa/results/EnergyMeter_AEP\n",
"03:58:40 INFO : TestEnv - Experiment results available also in:\n",
"03:58:40 INFO : TestEnv - /data/lisa/results_latest\n"
]
}
],
"source": [
"# Initialize a test environment using:\n",
"te = TestEnv(my_conf, wipe=False, force_new=True)\n",
"target = te.target"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Workload Execution and Power Consumptions Samping"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"03:58:42 INFO : WlGen - Setup new workload ramp\n",
"03:58:42 INFO : RTApp - Workload duration defined by longest task\n",
"03:58:42 INFO : RTApp - Default policy: SCHED_OTHER\n",
"03:58:42 INFO : RTApp - ------------------------\n",
"03:58:42 INFO : RTApp - task [ramp], sched: using default policy\n",
"03:58:42 INFO : RTApp - | calibration CPU: 1\n",
"03:58:42 INFO : RTApp - | loops count: 1\n",
"03:58:42 INFO : RTApp - + phase_000001: duration 0.500000 [s] (5 loops)\n",
"03:58:42 INFO : RTApp - | period 100000 [us], duty_cycle 60 %\n",
"03:58:42 INFO : RTApp - | run_time 60000 [us], sleep_time 40000 [us]\n",
"03:58:42 INFO : RTApp - + phase_000002: duration 0.500000 [s] (5 loops)\n",
"03:58:42 INFO : RTApp - | period 100000 [us], duty_cycle 55 %\n",
"03:58:42 INFO : RTApp - | run_time 55000 [us], sleep_time 45000 [us]\n",
"03:58:42 INFO : RTApp - + phase_000003: duration 0.500000 [s] (5 loops)\n",
"03:58:42 INFO : RTApp - | period 100000 [us], duty_cycle 50 %\n",
"03:58:42 INFO : RTApp - | run_time 50000 [us], sleep_time 50000 [us]\n",
"03:58:42 INFO : RTApp - + phase_000004: duration 0.500000 [s] (5 loops)\n",
"03:58:42 INFO : RTApp - | period 100000 [us], duty_cycle 45 %\n",
"03:58:42 INFO : RTApp - | run_time 45000 [us], sleep_time 55000 [us]\n",
"03:58:42 INFO : RTApp - + phase_000005: duration 0.500000 [s] (5 loops)\n",
"03:58:42 INFO : RTApp - | period 100000 [us], duty_cycle 40 %\n",
"03:58:42 INFO : RTApp - | run_time 40000 [us], sleep_time 60000 [us]\n",
"03:58:42 INFO : RTApp - + phase_000006: duration 0.500000 [s] (5 loops)\n",
"03:58:42 INFO : RTApp - | period 100000 [us], duty_cycle 35 %\n",
"03:58:42 INFO : RTApp - | run_time 35000 [us], sleep_time 65000 [us]\n",
"03:58:42 INFO : RTApp - + phase_000007: duration 0.500000 [s] (5 loops)\n",
"03:58:42 INFO : RTApp - | period 100000 [us], duty_cycle 30 %\n",
"03:58:42 INFO : RTApp - | run_time 30000 [us], sleep_time 70000 [us]\n",
"03:58:42 INFO : RTApp - + phase_000008: duration 0.500000 [s] (5 loops)\n",
"03:58:42 INFO : RTApp - | period 100000 [us], duty_cycle 25 %\n",
"03:58:42 INFO : RTApp - | run_time 25000 [us], sleep_time 75000 [us]\n",
"03:58:42 INFO : RTApp - + phase_000009: duration 0.500000 [s] (5 loops)\n",
"03:58:42 INFO : RTApp - | period 100000 [us], duty_cycle 20 %\n",
"03:58:42 INFO : RTApp - | run_time 20000 [us], sleep_time 80000 [us]\n",
"03:58:44 INFO : WlGen - Workload execution START:\n",
"03:58:44 INFO : WlGen - /root/devlib-target/bin/rt-app /root/devlib-target/ramp_00.json 2>&1\n"
]
}
],
"source": [
"# Create and RTApp RAMP task\n",
"rtapp = RTA(te.target, 'ramp', calibration=te.calibration())\n",
"rtapp.conf(kind='profile',\n",
" params={\n",
" 'ramp' : Ramp(\n",
" start_pct = 60,\n",
" end_pct = 20,\n",
" delta_pct = 5,\n",
" time_s = 0.5).get()\n",
" })\n",
"\n",
"# EnergyMeter Start\n",
"te.emeter.reset()\n",
"\n",
"rtapp.run(out_dir=te.res_dir)\n",
"\n",
"# EnergyMeter Stop and samples collection\n",
"nrg_report = te.emeter.report(te.res_dir)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"03:58:50 INFO : Collected data:\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[01;34m/data/lisa/results/EnergyMeter_AEP\u001b[00m\r\n",
"├── energy.json\r\n",
"├── output.log\r\n",
"├── ramp_00.json\r\n",
"├── rt-app-ramp-0.log\r\n",
"└── samples.csv\r\n",
"\r\n",
"0 directories, 5 files\r\n"
]
}
],
"source": [
"logging.info(\"Collected data:\")\n",
"!tree $te.res_dir"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Power Measurements Data"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"03:58:50 INFO : Measured channels energy:\n",
"03:58:50 INFO : {'BAT': 0.02506927080038548}\n"
]
}
],
"source": [
"logging.info(\"Measured channels energy:\")\n",
"logging.info(\"%s\", nrg_report.channels)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"03:58:51 INFO : Generated energy file:\n",
"03:58:51 INFO : /data/lisa/results/EnergyMeter_AEP/energy.json\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{\r\n",
" \"BAT\": 0.02506927080038548\r\n",
"}"
]
}
],
"source": [
"logging.info(\"Generated energy file:\")\n",
"logging.info(\" %s\", nrg_report.report_file)\n",
"!cat $nrg_report.report_file"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"03:58:52 INFO : Samples collected for the BAT channel (only first 10)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"BAT_current,BAT_power,BAT_voltage\r",
"\r\n",
"0.049,0.007,0.146\r",
"\r\n",
"0.035,0.004,0.142\r",
"\r\n",
"0.027,0.003,0.141\r",
"\r\n",
"0.029,0.004,0.151\r",
"\r\n",
"0.046,0.006,0.147\r",
"\r\n",
"0.033,0.004,0.143\r",
"\r\n",
"0.025,0.003,0.142\r",
"\r\n",
"0.029,0.004,0.154\r",
"\r\n",
"0.049,0.007,0.15\r",
"\r\n"
]
}
],
"source": [
"logging.info(\"Samples collected for the BAT channel (only first 10)\")\n",
"samples_file = os.path.join(te.res_dir, 'samples.csv')\n",
"!head $samples_file"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
},
"toc": {
"toc_cell": false,
"toc_number_sections": true,
"toc_threshold": 6,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 0
}