1{ 2 "cells": [ 3 { 4 "cell_type": "markdown", 5 "metadata": {}, 6 "source": [ 7 "# Executor API - Executor\n", 8 "\n", 9 " A tests executor is a module which supports the execution of a configured set of experiments.<br><br>\n", 10 " Each experiment is composed by:\n", 11 " - a target configuration\n", 12 " - a workload to execute\n", 13 "\n", 14 "The executor module can be configured to run a set of workloads (wloads) in each different target configuration of a specified set (confs). These wloads and confs can be specified by the \"experiments_conf\" input dictionary which is described below at **Experiments Configuration**.<br><br>\n", 15 "All the results generated by each experiment will be collected in a results folder. The format and content fo the results forlder is detailed in the last cell of **Tests execution** below.\n" 16 ] 17 }, 18 { 19 "cell_type": "code", 20 "execution_count": 1, 21 "metadata": { 22 "collapsed": false 23 }, 24 "outputs": [ 25 { 26 "name": "stderr", 27 "output_type": "stream", 28 "text": [ 29 "2016-12-08 11:58:22,693 INFO : root : Using LISA logging configuration:\n", 30 "2016-12-08 11:58:22,694 INFO : root : /home/vagrant/lisa/logging.conf\n" 31 ] 32 } 33 ], 34 "source": [ 35 "import logging\n", 36 "\n", 37 "from conf import LisaLogging\n", 38 "LisaLogging.setup()" 39 ] 40 }, 41 { 42 "cell_type": "code", 43 "execution_count": 2, 44 "metadata": { 45 "collapsed": false 46 }, 47 "outputs": [], 48 "source": [ 49 "import os\n", 50 "import json\n", 51 "\n", 52 "from env import TestEnv\n", 53 "from executor import Executor" 54 ] 55 }, 56 { 57 "cell_type": "markdown", 58 "metadata": {}, 59 "source": [ 60 "## Target Configuration\n", 61 "The target configuration it's used to describe and configure your test environment.\n", 62 "You can find more details in **examples/utils/testenv_example.ipynb**." 63 ] 64 }, 65 { 66 "cell_type": "code", 67 "execution_count": 3, 68 "metadata": { 69 "collapsed": false 70 }, 71 "outputs": [], 72 "source": [ 73 "# Setup a target configuration\n", 74 "my_target_conf = {\n", 75 " \n", 76 " # Target platform and board\n", 77 " \"platform\" : 'linux',\n", 78 " \"board\" : 'juno',\n", 79 " \n", 80 " # Target board IP/MAC address\n", 81 " \"host\" : '192.168.0.1',\n", 82 " \n", 83 " # Login credentials\n", 84 " \"username\" : 'root',\n", 85 " \"password\" : 'juno',\n", 86 "\n", 87 "}" 88 ] 89 }, 90 { 91 "cell_type": "markdown", 92 "metadata": {}, 93 "source": [ 94 "## Experiments Configuration\n", 95 "\n", 96 "The experiments configuration defines the software setups that we need on our hardware target.<br>\n", 97 "This can be given as an argument to an Executor instance or to a TestEnv one.<br> <br>\n", 98 "Elements of the experiments configuration:\n", 99 " - **confs**: **mandatory** platform configurations to be tested.\n", 100 " - tag: relevant string to identify your configuration.\n", 101 " - flags: ftrace (to enable ftrace events) is the only one supported at the moment.\n", 102 " - sched_features: features to be added to /sys/kernel/debug/sched_features.\n", 103 " - cpufreq: CpuFreq governor and tunables.\n", 104 " - cgroups: CGroups configuration (controller). The default CGroup will be used otherwise.\n", 105 " - **wloads**: **mandatory** workloads to run on each platform configuration.\n", 106 " - **iterations**: number of iterations for each workload.\n", 107 " - **tools**: binary tools (available under ./tools/$ARCH/) to install by default; these will be merged with the ones in the target configuration.\n", 108 " - **ftrace**: FTrace events to collect for all the experiments configurations which have the \"ftrace\" flag enabled.\n", 109 " - **modules**: modules required by the experiments resulted from the experiments configurations.\n", 110 " - **exclude_modules** - modules to be disabled.\n", 111 " - **results_dir**: results directory - experiments configuration results directory overrides target one." 112 ] 113 }, 114 { 115 "cell_type": "code", 116 "execution_count": 4, 117 "metadata": { 118 "collapsed": false, 119 "scrolled": false 120 }, 121 "outputs": [], 122 "source": [ 123 "my_experiments_conf = {\n", 124 "\n", 125 " # Folder where all the results will be collected\n", 126 " \"results_dir\" : \"ExecutorExample\",\n", 127 "\n", 128 " # Platform configurations to test: you can specify any number of configurations\n", 129 " \"confs\" : [\n", 130 " { \n", 131 " \"tag\" : \"base\", # Relevant string to identify configuration\n", 132 " \"flags\" : [\"ftrace\", \"freeze_userspace\"], # Enable FTrace events, freeze userspace while running \n", 133 " \"sched_features\" : \"NO_ENERGY_AWARE\", # Disable EAS\n", 134 " \"cpufreq\" : { # Use PERFORMANCE CpuFreq\n", 135 " \"governor\" : \"performance\",\n", 136 " },\n", 137 " },\n", 138 " {\n", 139 " \"tag\" : \"eas\", # Relevant string to identify configuration\n", 140 " \"flags\" : [\"ftrace\", \"freeze_userspace\"], # Enable FTrace events, freeze userspace while running\n", 141 " \"sched_features\" : \"ENERGY_AWARE\", # Enable EAS\n", 142 " \"cpufreq\" : { # Use PERFORMANCE CpuFreq\n", 143 " \"governor\" : \"performance\",\n", 144 " },\n", 145 " },\n", 146 " ],\n", 147 " \n", 148 " # Workloads to run (on each platform configuration)\n", 149 " \"wloads\" : {\n", 150 " # Run hackbench with 1 group using pipes\n", 151 " \"perf\" : {\n", 152 " \"type\" : \"perf_bench\",\n", 153 " \"conf\" : {\n", 154 " \"class\" : \"messaging\",\n", 155 " \"params\" : {\n", 156 " \"group\" : 1,\n", 157 " \"loop\" : 10,\n", 158 " \"pipe\" : True,\n", 159 " \"thread\": True,\n", 160 " }\n", 161 " }\n", 162 " },\n", 163 " # Run a 20% duty-cycle periodic task\n", 164 " \"rta\" : {\n", 165 " \"type\" : \"rt-app\",\n", 166 " \"loadref\" : \"big\",\n", 167 " \"conf\" : {\n", 168 " \"class\" : \"profile\",\n", 169 " \"params\" : {\n", 170 " \"p20\" : {\n", 171 " \"kind\" : \"Periodic\",\n", 172 " \"params\" : {\n", 173 " \"duty_cycle_pct\" : 20,\n", 174 " },\n", 175 " },\n", 176 " },\n", 177 " },\n", 178 " },\n", 179 " },\n", 180 " \n", 181 " # Number of iterations for each workloaditerations\n", 182 " \"iterations\" : 1,\n", 183 "}\n", 184 " \n", 185 "my_test_conf = {\n", 186 " # FTrace events to collect for all the tests configuration which have\n", 187 " # the \"ftrace\" flag enabled\n", 188 " \"ftrace\" : {\n", 189 " \"events\" : [\n", 190 " \"sched_switch\",\n", 191 " \"sched_wakeup\",\n", 192 " \"sched_wakeup_new\",\n", 193 " \"cpu_frequency\",\n", 194 " ],\n", 195 " \"buffsize\" : 80 * 1024,\n", 196 " },\n", 197 " \n", 198 " # Tools required by the experiments\n", 199 " \"tools\" : [ 'trace-cmd', 'perf' ],\n", 200 " \n", 201 " # Modules required by these experiments\n", 202 " \"modules\" : [ 'bl', 'cpufreq', 'cgroups' ],\n", 203 "\n", 204 "}" 205 ] 206 }, 207 { 208 "cell_type": "markdown", 209 "metadata": {}, 210 "source": [ 211 "## Tests execution" 212 ] 213 }, 214 { 215 "cell_type": "code", 216 "execution_count": 5, 217 "metadata": { 218 "collapsed": false 219 }, 220 "outputs": [ 221 { 222 "name": "stderr", 223 "output_type": "stream", 224 "text": [ 225 "2016-12-07 10:17:28,037 INFO : TestEnv : Using base path: /home/vagrant/lisa\n", 226 "2016-12-07 10:17:28,039 INFO : TestEnv : Loading custom (inline) target configuration\n", 227 "2016-12-07 10:17:28,039 INFO : TestEnv : Devlib modules to load: ['bl', 'hwmon', 'cpufreq']\n", 228 "2016-12-07 10:17:28,040 INFO : TestEnv : Connecting linux target:\n", 229 "2016-12-07 10:17:28,040 INFO : TestEnv : username : root\n", 230 "2016-12-07 10:17:28,041 INFO : TestEnv : host : 192.168.0.1\n", 231 "2016-12-07 10:17:28,041 INFO : TestEnv : password : juno\n", 232 "2016-12-07 10:17:28,041 INFO : TestEnv : Connection settings:\n", 233 "2016-12-07 10:17:28,042 INFO : TestEnv : {'username': 'root', 'host': '192.168.0.1', 'password': 'juno'}\n", 234 "2016-12-07 10:17:45,282 INFO : TestEnv : Initializing target workdir:\n", 235 "2016-12-07 10:17:45,283 INFO : TestEnv : /root/devlib-target\n", 236 "2016-12-07 10:17:51,006 INFO : TestEnv : Topology:\n", 237 "2016-12-07 10:17:51,007 INFO : TestEnv : [[0, 3, 4, 5], [1, 2]]\n", 238 "2016-12-07 10:17:52,248 INFO : EnergyMeter : Scanning for HWMON channels, may take some time...\n", 239 "2016-12-07 10:17:52,250 INFO : EnergyMeter : Channels selected for energy sampling:\n", 240 "2016-12-07 10:17:52,250 INFO : EnergyMeter : BOARDBIG_energy\n", 241 "2016-12-07 10:17:52,251 INFO : EnergyMeter : BOARDLITTLE_energy\n", 242 "2016-12-07 10:17:52,251 INFO : TestEnv : Set results folder to:\n", 243 "2016-12-07 10:17:52,251 INFO : TestEnv : /home/vagrant/lisa/results/20161207_101752\n", 244 "2016-12-07 10:17:52,252 INFO : TestEnv : Experiment results available also in:\n", 245 "2016-12-07 10:17:52,252 INFO : TestEnv : /home/vagrant/lisa/results_latest\n", 246 "2016-12-07 10:17:52,253 INFO : Executor : Loading custom (inline) test configuration\n", 247 "2016-12-07 10:17:52,253 INFO : Executor : \n", 248 "2016-12-07 10:17:52,254 INFO : Executor : ################################################################################\n", 249 "2016-12-07 10:17:52,254 INFO : Executor : Experiments configuration\n", 250 "2016-12-07 10:17:52,254 INFO : Executor : ################################################################################\n", 251 "2016-12-07 10:17:52,255 INFO : Executor : Configured to run:\n", 252 "2016-12-07 10:17:52,255 INFO : Executor : 2 target configurations:\n", 253 "2016-12-07 10:17:52,256 INFO : Executor : base, eas\n", 254 "2016-12-07 10:17:52,256 INFO : Executor : 2 workloads (1 iterations each)\n", 255 "2016-12-07 10:17:52,257 INFO : Executor : rta, perf\n", 256 "2016-12-07 10:17:52,257 INFO : Executor : Total: 4 experiments\n", 257 "2016-12-07 10:17:52,257 INFO : Executor : Results will be collected under:\n", 258 "2016-12-07 10:17:52,258 INFO : Executor : /home/vagrant/lisa/results/20161207_101752\n" 259 ] 260 } 261 ], 262 "source": [ 263 "executor = Executor(TestEnv(target_conf=my_target_conf, test_conf=my_test_conf), my_experiments_conf)" 264 ] 265 }, 266 { 267 "cell_type": "code", 268 "execution_count": 6, 269 "metadata": { 270 "collapsed": false 271 }, 272 "outputs": [ 273 { 274 "name": "stderr", 275 "output_type": "stream", 276 "text": [ 277 "2016-12-07 10:17:59,239 INFO : Executor : \n", 278 "2016-12-07 10:17:59,239 INFO : Executor : ################################################################################\n", 279 "2016-12-07 10:17:59,240 INFO : Executor : Experiments execution\n", 280 "2016-12-07 10:17:59,240 INFO : Executor : ################################################################################\n", 281 "2016-12-07 10:17:59,241 INFO : Executor : \n", 282 "2016-12-07 10:17:59,241 INFO : Executor : ================================================================================\n", 283 "2016-12-07 10:17:59,241 INFO : Executor : configuring target for [base] experiments\n", 284 "2016-12-07 10:18:00,663 INFO : Executor : Set scheduler feature: NO_ENERGY_AWARE\n", 285 "2016-12-07 10:18:01,469 INFO : Executor : Configuring all CPUs to use [performance] cpufreq governor\n", 286 "2016-12-07 10:18:02,274 INFO : Workload : Setup new workload rta\n", 287 "2016-12-07 10:18:02,274 INFO : Workload : Workload duration defined by longest task\n", 288 "2016-12-07 10:18:02,275 INFO : Workload : Default policy: SCHED_OTHER\n", 289 "2016-12-07 10:18:02,275 INFO : Workload : ------------------------\n", 290 "2016-12-07 10:18:02,276 INFO : Workload : task [task_p200], sched: using default policy\n", 291 "2016-12-07 10:18:02,276 INFO : Workload : | calibration CPU: 1\n", 292 "2016-12-07 10:18:02,277 INFO : Workload : | loops count: 1\n", 293 "2016-12-07 10:18:02,277 INFO : Workload : + phase_000001: duration 1.000000 [s] (10 loops)\n", 294 "2016-12-07 10:18:02,278 INFO : Workload : | period 100000 [us], duty_cycle 20 %\n", 295 "2016-12-07 10:18:02,278 INFO : Workload : | run_time 20000 [us], sleep_time 80000 [us]\n", 296 "2016-12-07 10:18:05,732 INFO : Executor : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n", 297 "2016-12-07 10:18:05,734 INFO : Executor : Experiment 0/4, [base:rta] 1/1\n", 298 "2016-12-07 10:18:06,361 INFO : Workload : Workload execution START:\n", 299 "2016-12-07 10:18:06,363 INFO : Workload : /root/devlib-target/bin/rt-app /root/devlib-target/run_dir/rta_00.json 2>&1\n", 300 "2016-12-07 10:18:13,384 INFO : Executor : --------------------------------------------------------------------------------\n", 301 "2016-12-07 10:18:13,386 INFO : Workload : Setup new workload perf\n", 302 "2016-12-07 10:18:13,712 INFO : Executor : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n", 303 "2016-12-07 10:18:13,712 INFO : Executor : Experiment 1/4, [base:perf] 1/1\n", 304 "2016-12-07 10:18:14,337 INFO : Workload : Workload execution START:\n", 305 "2016-12-07 10:18:14,338 INFO : Workload : /root/devlib-target/bin/perf bench sched messaging --pipe --thread --group 1 --loop 10\n", 306 "2016-12-07 10:18:14,664 INFO : perf_bench : PerfBench - Completion time: 0.010000, Performance 100.000000\n", 307 "2016-12-07 10:18:15,286 INFO : Executor : --------------------------------------------------------------------------------\n", 308 "2016-12-07 10:18:15,288 INFO : Executor : \n", 309 "2016-12-07 10:18:15,290 INFO : Executor : ================================================================================\n", 310 "2016-12-07 10:18:15,292 INFO : Executor : configuring target for [eas] experiments\n", 311 "2016-12-07 10:18:16,713 INFO : Executor : Set scheduler feature: ENERGY_AWARE\n", 312 "2016-12-07 10:18:17,519 INFO : Executor : Configuring all CPUs to use [performance] cpufreq governor\n", 313 "2016-12-07 10:18:18,325 INFO : Workload : Setup new workload rta\n", 314 "2016-12-07 10:18:18,326 INFO : Workload : Workload duration defined by longest task\n", 315 "2016-12-07 10:18:18,327 INFO : Workload : Default policy: SCHED_OTHER\n", 316 "2016-12-07 10:18:18,329 INFO : Workload : ------------------------\n", 317 "2016-12-07 10:18:18,330 INFO : Workload : task [task_p200], sched: using default policy\n", 318 "2016-12-07 10:18:18,331 INFO : Workload : | calibration CPU: 1\n", 319 "2016-12-07 10:18:18,332 INFO : Workload : | loops count: 1\n", 320 "2016-12-07 10:18:18,332 INFO : Workload : + phase_000001: duration 1.000000 [s] (10 loops)\n", 321 "2016-12-07 10:18:18,333 INFO : Workload : | period 100000 [us], duty_cycle 20 %\n", 322 "2016-12-07 10:18:18,333 INFO : Workload : | run_time 20000 [us], sleep_time 80000 [us]\n", 323 "2016-12-07 10:18:21,414 INFO : Executor : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n", 324 "2016-12-07 10:18:21,415 INFO : Executor : Experiment 2/4, [eas:rta] 1/1\n", 325 "2016-12-07 10:18:22,043 INFO : Workload : Workload execution START:\n", 326 "2016-12-07 10:18:22,045 INFO : Workload : /root/devlib-target/bin/rt-app /root/devlib-target/run_dir/rta_00.json 2>&1\n", 327 "2016-12-07 10:18:28,802 INFO : Executor : --------------------------------------------------------------------------------\n", 328 "2016-12-07 10:18:28,806 INFO : Workload : Setup new workload perf\n", 329 "2016-12-07 10:18:29,134 INFO : Executor : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n", 330 "2016-12-07 10:18:29,135 INFO : Executor : Experiment 3/4, [eas:perf] 1/1\n", 331 "2016-12-07 10:18:29,760 INFO : Workload : Workload execution START:\n", 332 "2016-12-07 10:18:29,761 INFO : Workload : /root/devlib-target/bin/perf bench sched messaging --pipe --thread --group 1 --loop 10\n", 333 "2016-12-07 10:18:30,089 INFO : perf_bench : PerfBench - Completion time: 0.009000, Performance 111.111111\n", 334 "2016-12-07 10:18:30,710 INFO : Executor : --------------------------------------------------------------------------------\n", 335 "2016-12-07 10:18:30,712 INFO : Executor : \n", 336 "2016-12-07 10:18:30,714 INFO : Executor : ################################################################################\n", 337 "2016-12-07 10:18:30,715 INFO : Executor : Experiments execution completed\n", 338 "2016-12-07 10:18:30,716 INFO : Executor : ################################################################################\n", 339 "2016-12-07 10:18:30,716 INFO : Executor : Results available in:\n", 340 "2016-12-07 10:18:30,717 INFO : Executor : /home/vagrant/lisa/results/20161207_101752\n" 341 ] 342 } 343 ], 344 "source": [ 345 "executor.run()" 346 ] 347 }, 348 { 349 "cell_type": "code", 350 "execution_count": 7, 351 "metadata": { 352 "collapsed": false 353 }, 354 "outputs": [ 355 { 356 "name": "stdout", 357 "output_type": "stream", 358 "text": [ 359 "/home/vagrant/lisa/results/20161207_101752\r\n", 360 "├── perf_bench_messaging:base:perf\r\n", 361 "│ ├── 1\r\n", 362 "│ │ ├── energy.json\r\n", 363 "│ │ ├── output.log\r\n", 364 "│ │ └── performance.json\r\n", 365 "│ ├── kernel.config\r\n", 366 "│ ├── kernel.version\r\n", 367 "│ └── platform.json\r\n", 368 "├── perf_bench_messaging:eas:perf\r\n", 369 "│ ├── 1\r\n", 370 "│ │ ├── energy.json\r\n", 371 "│ │ ├── output.log\r\n", 372 "│ │ └── performance.json\r\n", 373 "│ ├── kernel.config\r\n", 374 "│ ├── kernel.version\r\n", 375 "│ └── platform.json\r\n", 376 "├── rtapp:base:rta\r\n", 377 "│ ├── 1\r\n", 378 "│ │ ├── energy.json\r\n", 379 "│ │ ├── output.log\r\n", 380 "│ │ ├── rta_00.json\r\n", 381 "│ │ └── rt-app-task_p200-0.log\r\n", 382 "│ ├── kernel.config\r\n", 383 "│ ├── kernel.version\r\n", 384 "│ └── platform.json\r\n", 385 "└── rtapp:eas:rta\r\n", 386 " ├── 1\r\n", 387 " │ ├── energy.json\r\n", 388 " │ ├── output.log\r\n", 389 " │ ├── rta_00.json\r\n", 390 " │ └── rt-app-task_p200-0.log\r\n", 391 " ├── kernel.config\r\n", 392 " ├── kernel.version\r\n", 393 " └── platform.json\r\n", 394 "\r\n", 395 "8 directories, 26 files\r\n" 396 ] 397 } 398 ], 399 "source": [ 400 "!tree {executor.te.res_dir}" 401 ] 402 } 403 ], 404 "metadata": { 405 "kernelspec": { 406 "display_name": "Python 2", 407 "language": "python", 408 "name": "python2" 409 }, 410 "language_info": { 411 "codemirror_mode": { 412 "name": "ipython", 413 "version": 2 414 }, 415 "file_extension": ".py", 416 "mimetype": "text/x-python", 417 "name": "python", 418 "nbconvert_exporter": "python", 419 "pygments_lexer": "ipython2", 420 "version": "2.7.6" 421 } 422 }, 423 "nbformat": 4, 424 "nbformat_minor": 0 425} 426