1{ 2 "cells": [ 3 { 4 "cell_type": "markdown", 5 "metadata": {}, 6 "source": [ 7 "# Tutorial Goal" 8 ] 9 }, 10 { 11 "cell_type": "markdown", 12 "metadata": {}, 13 "source": [ 14 "This tutorial aims to show how to **configure and run** a **synthetic workload** using the **wlgen module** provided by LISA." 15 ] 16 }, 17 { 18 "cell_type": "markdown", 19 "metadata": {}, 20 "source": [ 21 "# Configure logging" 22 ] 23 }, 24 { 25 "cell_type": "code", 26 "execution_count": null, 27 "metadata": { 28 "collapsed": true 29 }, 30 "outputs": [], 31 "source": [ 32 "import logging\n", 33 "from conf import LisaLogging\n", 34 "LisaLogging.setup()" 35 ] 36 }, 37 { 38 "cell_type": "code", 39 "execution_count": 1, 40 "metadata": { 41 "collapsed": true 42 }, 43 "outputs": [], 44 "source": [ 45 "# Execute this cell to enabled devlib debugging statements\n", 46 "logging.getLogger('ssh').setLevel(logging.DEBUG)" 47 ] 48 }, 49 { 50 "cell_type": "code", 51 "execution_count": 2, 52 "metadata": { 53 "collapsed": false 54 }, 55 "outputs": [], 56 "source": [ 57 "# Other python modules required by this notebook\n", 58 "import json\n", 59 "import os" 60 ] 61 }, 62 { 63 "cell_type": "markdown", 64 "metadata": {}, 65 "source": [ 66 "# Test environment setup" 67 ] 68 }, 69 { 70 "cell_type": "code", 71 "execution_count": 3, 72 "metadata": { 73 "collapsed": false 74 }, 75 "outputs": [], 76 "source": [ 77 "# Setup a target configuration\n", 78 "conf = {\n", 79 " \n", 80 " # Target is localhost\n", 81 " \"platform\" : 'linux',\n", 82 " \"board\" : \"juno\",\n", 83 " \n", 84 " # Login credentials\n", 85 " \"host\" : \"192.168.0.1\",\n", 86 " \"username\" : \"root\",\n", 87 " \"password\" : \"\",\n", 88 "\n", 89 " # Binary tools required to run this experiment\n", 90 " # These tools must be present in the tools/ folder for the architecture\n", 91 " \"tools\" : ['rt-app', 'taskset', 'trace-cmd'],\n", 92 " \n", 93 " # Comment the following line to force rt-app calibration on your target\n", 94 "# \"rtapp-calib\" : {\n", 95 "# \"0\": 355, \"1\": 138, \"2\": 138, \"3\": 355, \"4\": 354, \"5\": 354\n", 96 "# },\n", 97 " \n", 98 " # FTrace events end buffer configuration\n", 99 " \"ftrace\" : {\n", 100 " \"events\" : [\n", 101 " \"sched_switch\",\n", 102 " \"cpu_frequency\"\n", 103 " ],\n", 104 " \"buffsize\" : 10240\n", 105 " },\n", 106 "\n", 107 " # Where results are collected\n", 108 " \"results_dir\" : \"WlgenExample\",\n", 109 " \n", 110 " # Devlib modules we'll need\n", 111 " \"modules\": [\"cpufreq\"]\n", 112 "}" 113 ] 114 }, 115 { 116 "cell_type": "code", 117 "execution_count": 4, 118 "metadata": { 119 "collapsed": false, 120 "scrolled": false 121 }, 122 "outputs": [ 123 { 124 "name": "stderr", 125 "output_type": "stream", 126 "text": [ 127 "12:22:12 INFO : Target - Using base path: /home/derkling/Code/lisa\n", 128 "12:22:12 INFO : Target - Loading custom (inline) target configuration\n", 129 "12:22:12 INFO : Target - Devlib modules to load: ['bl', 'hwmon', 'cpufreq']\n", 130 "12:22:12 INFO : Target - Connecting linux target:\n", 131 "12:22:12 INFO : Target - username : root\n", 132 "12:22:12 INFO : Target - host : 192.168.0.1\n", 133 "12:22:12 INFO : Target - password : \n", 134 "12:22:50 INFO : Target - Initializing target workdir:\n", 135 "12:22:50 INFO : Target - /root/devlib-target\n", 136 "12:22:59 INFO : Target - Topology:\n", 137 "12:22:59 INFO : Target - [[0, 3, 4, 5], [1, 2]]\n", 138 "12:23:01 INFO : Platform - Loading default EM:\n", 139 "12:23:01 INFO : Platform - /home/derkling/Code/lisa/libs/utils/platforms/juno.json\n", 140 "12:23:02 INFO : FTrace - Enabled tracepoints:\n", 141 "12:23:02 INFO : FTrace - sched_switch\n", 142 "12:23:02 INFO : FTrace - cpu_frequency\n", 143 "12:23:02 INFO : EnergyMeter - Scanning for HWMON channels, may take some time...\n", 144 "12:23:02 INFO : EnergyMeter - Channels selected for energy sampling:\n", 145 "12:23:02 INFO : EnergyMeter - a57_energy\n", 146 "12:23:02 INFO : EnergyMeter - a53_energy\n", 147 "12:23:02 WARNING : Target - Using configuration provided RTApp calibration\n", 148 "12:23:02 INFO : Target - Using RT-App calibration values:\n", 149 "12:23:02 INFO : Target - {\"0\": 355, \"1\": 138, \"2\": 138, \"3\": 355, \"4\": 354, \"5\": 354}\n", 150 "12:23:02 WARNING : TestEnv - Wipe previous contents of the results folder:\n", 151 "12:23:02 WARNING : TestEnv - /home/derkling/Code/lisa/results/WlgenExample\n", 152 "12:23:02 INFO : TestEnv - Set results folder to:\n", 153 "12:23:02 INFO : TestEnv - /home/derkling/Code/lisa/results/WlgenExample\n", 154 "12:23:02 INFO : TestEnv - Experiment results available also in:\n", 155 "12:23:02 INFO : TestEnv - /home/derkling/Code/lisa/results_latest\n" 156 ] 157 } 158 ], 159 "source": [ 160 "# Support to access the remote target\n", 161 "from env import TestEnv\n", 162 "\n", 163 "# Initialize a test environment using:\n", 164 "# the provided target configuration (my_target_conf)\n", 165 "# the provided test configuration (my_test_conf)\n", 166 "te = TestEnv(conf)\n", 167 "target = te.target" 168 ] 169 }, 170 { 171 "cell_type": "markdown", 172 "metadata": {}, 173 "source": [ 174 "## Workload execution utility" 175 ] 176 }, 177 { 178 "cell_type": "code", 179 "execution_count": 27, 180 "metadata": { 181 "collapsed": false 182 }, 183 "outputs": [], 184 "source": [ 185 "def execute(te, wload, res_dir):\n", 186 " \n", 187 " logging.info('# Create results folder for this execution')\n", 188 " !mkdir {res_dir}\n", 189 " \n", 190 " logging.info('# Setup FTrace')\n", 191 " te.ftrace.start()\n", 192 "\n", 193 " logging.info('## Start energy sampling')\n", 194 " te.emeter.reset()\n", 195 "\n", 196 " logging.info('### Start RTApp execution')\n", 197 " wload.run(out_dir=res_dir)\n", 198 "\n", 199 " logging.info('## Read energy consumption: %s/energy.json', res_dir)\n", 200 " nrg_report = te.emeter.report(out_dir=res_dir)\n", 201 "\n", 202 " logging.info('# Stop FTrace')\n", 203 " te.ftrace.stop()\n", 204 "\n", 205 " trace_file = os.path.join(res_dir, 'trace.dat')\n", 206 " logging.info('# Save FTrace: %s', trace_file)\n", 207 " te.ftrace.get_trace(trace_file)\n", 208 "\n", 209 " logging.info('# Save platform description: %s/platform.json', res_dir)\n", 210 " plt, plt_file = te.platform_dump(res_dir)\n", 211 " \n", 212 " logging.info('# Report collected data:')\n", 213 " logging.info(' %s', res_dir)\n", 214 " !ls -la {res_dir}\n", 215 " \n", 216 " return nrg_report, plt, plt_file, trace_file" 217 ] 218 }, 219 { 220 "cell_type": "markdown", 221 "metadata": {}, 222 "source": [ 223 "# Single task RTApp workload" 224 ] 225 }, 226 { 227 "cell_type": "markdown", 228 "metadata": {}, 229 "source": [ 230 "## 1) creation" 231 ] 232 }, 233 { 234 "cell_type": "code", 235 "execution_count": 28, 236 "metadata": { 237 "collapsed": false 238 }, 239 "outputs": [ 240 { 241 "name": "stderr", 242 "output_type": "stream", 243 "text": [ 244 "12:38:37 INFO : WlGen - Setup new workload example1\n" 245 ] 246 } 247 ], 248 "source": [ 249 "# Support to configure and run RTApp based workloads\n", 250 "from wlgen import RTA\n", 251 "\n", 252 "# Create a new RTApp workload generator using the calibration values\n", 253 "# reported by the TestEnv module\n", 254 "rtapp_name = 'example1'\n", 255 "rtapp = RTA(target, rtapp_name, calibration=te.calibration())" 256 ] 257 }, 258 { 259 "cell_type": "markdown", 260 "metadata": {}, 261 "source": [ 262 "## 2) configuration" 263 ] 264 }, 265 { 266 "cell_type": "code", 267 "execution_count": 29, 268 "metadata": { 269 "collapsed": false 270 }, 271 "outputs": [ 272 { 273 "name": "stderr", 274 "output_type": "stream", 275 "text": [ 276 "12:38:39 INFO : RTApp - Workload duration defined by longest task\n", 277 "12:38:39 INFO : RTApp - Default policy: SCHED_OTHER\n", 278 "12:38:39 INFO : RTApp - ------------------------\n", 279 "12:38:39 INFO : RTApp - task [task_p20], sched: {'policy': 'OTHER', 'priotity': 130}\n", 280 "12:38:39 INFO : RTApp - | calibration CPU: 1\n", 281 "12:38:39 INFO : RTApp - | loops count: 1\n", 282 "12:38:39 INFO : RTApp - | CPUs affinity: 0\n", 283 "12:38:39 INFO : RTApp - + phase_000001: duration 5.000000 [s] (50 loops)\n", 284 "12:38:39 INFO : RTApp - | period 100000 [us], duty_cycle 20 %\n", 285 "12:38:39 INFO : RTApp - | run_time 20000 [us], sleep_time 80000 [us]\n" 286 ] 287 } 288 ], 289 "source": [ 290 "# RTApp configurator for generation of PERIODIC tasks\n", 291 "from wlgen import Periodic \n", 292 "\n", 293 "# Configure this RTApp instance to:\n", 294 "rtapp.conf(\n", 295 "\n", 296 " # 1. generate a \"profile based\" set of tasks\n", 297 " kind = 'profile',\n", 298 " \n", 299 " # 2. define the \"profile\" of each task\n", 300 " params = {\n", 301 " \n", 302 " # 3. PERIODIC task with\n", 303 " 'task_p20': Periodic (\n", 304 " period_ms = 100, # period [ms]\n", 305 " duty_cycle_pct = 20, # duty cycle [%]\n", 306 " duration_s = 5, # duration [s]\n", 307 " delay_s = 0, # start after that delay [s]\n", 308 " sched = { # run as a low-priority SCHED_OTHER task\n", 309 " 'policy' : 'OTHER',\n", 310 " 'priotity' : 130,\n", 311 " },\n", 312 " cpus = # pinned on first online CPU\n", 313 " str(target.list_online_cpus()[0])\n", 314 " # ADD OTHER PARAMETERS\n", 315 " ).get(),\n", 316 "\n", 317 " },\n", 318 " \n", 319 ");" 320 ] 321 }, 322 { 323 "cell_type": "code", 324 "execution_count": 30, 325 "metadata": { 326 "collapsed": false 327 }, 328 "outputs": [ 329 { 330 "name": "stderr", 331 "output_type": "stream", 332 "text": [ 333 "12:38:42 INFO : Generated RTApp JSON file:\n" 334 ] 335 }, 336 { 337 "name": "stdout", 338 "output_type": "stream", 339 "text": [ 340 "{\n", 341 " \"global\": {\n", 342 " \"calibration\": 138, \n", 343 " \"default_policy\": \"SCHED_OTHER\", \n", 344 " \"duration\": -1, \n", 345 " \"logdir\": \"/root/devlib-target\"\n", 346 " }, \n", 347 " \"tasks\": {\n", 348 " \"task_p20\": {\n", 349 " \"cpus\": [\n", 350 " 0\n", 351 " ], \n", 352 " \"loop\": 1, \n", 353 " \"phases\": {\n", 354 " \"p000001\": {\n", 355 " \"loop\": 50, \n", 356 " \"run\": 20000, \n", 357 " \"timer\": {\n", 358 " \"period\": 100000, \n", 359 " \"ref\": \"task_p20\"\n", 360 " }\n", 361 " }\n", 362 " }, \n", 363 " \"policy\": \"SCHED_OTHER\", \n", 364 " \"priotity\": 130\n", 365 " }\n", 366 " }\n", 367 "}\n" 368 ] 369 } 370 ], 371 "source": [ 372 "# Inspect the JSON file used to run the application\n", 373 "with open('./{}_00.json'.format(rtapp_name), 'r') as fh:\n", 374 " rtapp_json = json.load(fh)\n", 375 "logging.info('Generated RTApp JSON file:')\n", 376 "print json.dumps(rtapp_json, indent=4, sort_keys=True)" 377 ] 378 }, 379 { 380 "cell_type": "markdown", 381 "metadata": {}, 382 "source": [ 383 "## 3) execution" 384 ] 385 }, 386 { 387 "cell_type": "code", 388 "execution_count": 31, 389 "metadata": { 390 "collapsed": false 391 }, 392 "outputs": [ 393 { 394 "name": "stderr", 395 "output_type": "stream", 396 "text": [ 397 "12:38:45 INFO : # Create results folder for this execution\n", 398 "12:38:45 INFO : # Setup FTrace\n", 399 "12:38:49 INFO : ## Start energy sampling\n", 400 "12:38:51 INFO : ### Start RTApp execution\n", 401 "12:38:51 INFO : WlGen - Workload execution START:\n", 402 "12:38:51 INFO : WlGen - /root/devlib-target/bin/rt-app /root/devlib-target/example1_00.json\n", 403 "12:38:57 INFO : ## Read energy consumption: /home/derkling/Code/lisa/results/WlgenExample/example1/energy.json\n", 404 "12:38:57 INFO : EnergyReport - Energy [ a53]: 5.125284\n", 405 "12:38:57 INFO : EnergyReport - Energy [ a57]: 3.037161\n", 406 "12:38:57 INFO : # Stop FTrace\n", 407 "12:38:59 INFO : # Save FTrace: /home/derkling/Code/lisa/results/WlgenExample/example1/trace.dat\n", 408 "12:39:01 INFO : # Save platform description: /home/derkling/Code/lisa/results/WlgenExample/example1/platform.json\n", 409 "12:39:01 INFO : # Report collected data:\n", 410 "12:39:01 INFO : /home/derkling/Code/lisa/results/WlgenExample/example1\n" 411 ] 412 }, 413 { 414 "name": "stdout", 415 "output_type": "stream", 416 "text": [ 417 "total 4008\r\n", 418 "drwxrwxr-x 2 derkling derkling 4096 Mar 2 12:39 .\r\n", 419 "drwxrwxr-x 3 derkling derkling 4096 Mar 2 12:38 ..\r\n", 420 "-rw-rw-r-- 1 derkling derkling 52 Mar 2 12:38 energy.json\r\n", 421 "-rw-r--r-- 1 derkling derkling 644 Mar 2 12:38 example1_00.json\r\n", 422 "-rw-rw-r-- 1 derkling derkling 235 Mar 2 12:38 output.log\r\n", 423 "-rw-rw-r-- 1 derkling derkling 1075 Mar 2 12:39 platform.json\r\n", 424 "-rw-r--r-- 1 derkling derkling 6360 Mar 2 12:38 rt-app-task_p20-0.log\r\n", 425 "-rw-r--r-- 1 derkling derkling 6360 Mar 2 12:38 rt-app-task_p20-3.log\r\n", 426 "-rw-r--r-- 1 derkling derkling 4063232 Mar 2 12:39 trace.dat\r\n" 427 ] 428 } 429 ], 430 "source": [ 431 "res_dir = os.path.join(te.res_dir, rtapp_name)\n", 432 "nrg_report, plt, plt_file, trace_file = execute(te, rtapp, res_dir)" 433 ] 434 }, 435 { 436 "cell_type": "markdown", 437 "metadata": {}, 438 "source": [ 439 "## 4) Check collected data" 440 ] 441 }, 442 { 443 "cell_type": "code", 444 "execution_count": 32, 445 "metadata": { 446 "collapsed": false 447 }, 448 "outputs": [ 449 { 450 "name": "stderr", 451 "output_type": "stream", 452 "text": [ 453 "12:39:07 INFO : Energy: /home/derkling/Code/lisa/results/WlgenExample/example1/energy.json\n" 454 ] 455 }, 456 { 457 "name": "stdout", 458 "output_type": "stream", 459 "text": [ 460 "{\n", 461 " \"LITTLE\": \"5.125284\", \n", 462 " \"big\": \"3.037161\"\n", 463 "}\n" 464 ] 465 } 466 ], 467 "source": [ 468 "# Dump the energy measured for the LITTLE and big clusters\n", 469 "logging.info('Energy: %s', nrg_report.report_file)\n", 470 "print json.dumps(nrg_report.channels, indent=4, sort_keys=True)" 471 ] 472 }, 473 { 474 "cell_type": "code", 475 "execution_count": 33, 476 "metadata": { 477 "collapsed": false 478 }, 479 "outputs": [ 480 { 481 "name": "stderr", 482 "output_type": "stream", 483 "text": [ 484 "12:39:07 INFO : Platform description: /home/derkling/Code/lisa/results/WlgenExample/example1/platform.json\n" 485 ] 486 }, 487 { 488 "name": "stdout", 489 "output_type": "stream", 490 "text": [ 491 "{\n", 492 " \"clusters\": {\n", 493 " \"big\": [\n", 494 " 1, \n", 495 " 2\n", 496 " ], \n", 497 " \"little\": [\n", 498 " 0, \n", 499 " 3, \n", 500 " 4, \n", 501 " 5\n", 502 " ]\n", 503 " }, \n", 504 " \"cpus_count\": 6, \n", 505 " \"freqs\": {\n", 506 " \"big\": [\n", 507 " 450000, \n", 508 " 625000, \n", 509 " 800000, \n", 510 " 950000, \n", 511 " 1100000\n", 512 " ], \n", 513 " \"little\": [\n", 514 " 450000, \n", 515 " 575000, \n", 516 " 700000, \n", 517 " 775000, \n", 518 " 850000\n", 519 " ]\n", 520 " }, \n", 521 " \"nrg_model\": {\n", 522 " \"big\": {\n", 523 " \"cluster\": {\n", 524 " \"nrg_max\": 64\n", 525 " }, \n", 526 " \"cpu\": {\n", 527 " \"cap_max\": 1024, \n", 528 " \"nrg_max\": 616\n", 529 " }\n", 530 " }, \n", 531 " \"little\": {\n", 532 " \"cluster\": {\n", 533 " \"nrg_max\": 57\n", 534 " }, \n", 535 " \"cpu\": {\n", 536 " \"cap_max\": 447, \n", 537 " \"nrg_max\": 93\n", 538 " }\n", 539 " }\n", 540 " }, \n", 541 " \"topology\": [\n", 542 " [\n", 543 " 0, \n", 544 " 3, \n", 545 " 4, \n", 546 " 5\n", 547 " ], \n", 548 " [\n", 549 " 1, \n", 550 " 2\n", 551 " ]\n", 552 " ]\n", 553 "}\n" 554 ] 555 } 556 ], 557 "source": [ 558 "# Dump the platform descriptor, which could be useful for further analysis\n", 559 "# of the generated results\n", 560 "logging.info('Platform description: %s', plt_file)\n", 561 "print json.dumps(plt, indent=4, sort_keys=True)" 562 ] 563 }, 564 { 565 "cell_type": "markdown", 566 "metadata": {}, 567 "source": [ 568 "## 5) trace inspection" 569 ] 570 }, 571 { 572 "cell_type": "code", 573 "execution_count": 34, 574 "metadata": { 575 "collapsed": false, 576 "scrolled": true 577 }, 578 "outputs": [ 579 { 580 "name": "stdout", 581 "output_type": "stream", 582 "text": [ 583 "version = 6\n", 584 "trace-cmd: No such file or directory\n", 585 " [vmscan:mm_vmscan_writepage] function sizeof not defined\n", 586 " unknown op '~'\n", 587 " Error: expected type 5 but read 0\n", 588 " Error: expected type 4 but read 0\n", 589 " unknown op '~'\n", 590 " Error: expected type 5 but read 0\n", 591 " Error: expected type 4 but read 0\n", 592 " unknown op '~'\n", 593 " Error: expected type 5 but read 0\n", 594 " Error: expected type 4 but read 0\n", 595 " unknown op '~'\n", 596 " Error: expected type 5 but read 0\n", 597 " Error: expected type 4 but read 0\n", 598 " [sunrpc:xs_tcp_data_recv] function __builtin_constant_p not defined\n", 599 " [sunrpc:xprt_transmit] function __builtin_constant_p not defined\n", 600 " [sunrpc:xprt_lookup_rqst] function __builtin_constant_p not defined\n", 601 " [sunrpc:xprt_complete_rqst] function __builtin_constant_p not defined\n", 602 " [sunrpc:svc_send] function __builtin_constant_p not defined\n", 603 " [sunrpc:svc_recv] function __builtin_constant_p not defined\n", 604 " [sunrpc:svc_process] function __builtin_constant_p not defined\n", 605 " [ras:mc_event] function mc_event_error_type not defined\n", 606 " [libata:ata_qc_complete_internal] function libata_trace_parse_qc_flags not defined\n", 607 " [libata:ata_qc_complete_failed] function libata_trace_parse_qc_flags not defined\n", 608 " [libata:ata_qc_complete_done] function libata_trace_parse_qc_flags not defined\n", 609 " [libata:ata_eh_link_autopsy_qc] function libata_trace_parse_qc_flags not defined\n", 610 " [libata:ata_eh_link_autopsy] function libata_trace_parse_eh_action not defined\n", 611 " [kvm:kvm_arm_set_regset] function __print_array not defined\n", 612 " [kmem:mm_page_pcpu_drain] function sizeof not defined\n", 613 " [kmem:mm_page_free_batched] function sizeof not defined\n", 614 " [kmem:mm_page_free] function sizeof not defined\n", 615 " [kmem:mm_page_alloc_zone_locked] function sizeof not defined\n", 616 " Error: expected type 4 but read 0\n", 617 " [kmem:mm_page_alloc_extfrag] function sizeof not defined\n", 618 " [kmem:mm_page_alloc] function sizeof not defined\n", 619 " Error: expected type 4 but read 0\n", 620 " [filemap:mm_filemap_delete_from_page_cache] function sizeof not defined\n", 621 " [filemap:mm_filemap_add_to_page_cache] function sizeof not defined\n", 622 "\n", 623 "(kernelshark:11002): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", 624 "\n", 625 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", 626 "\n", 627 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", 628 "\n", 629 "(kernelshark:11002): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", 630 "\n", 631 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", 632 "\n", 633 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", 634 "\n", 635 "(kernelshark:11002): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", 636 "\n", 637 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", 638 "\n", 639 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", 640 "\n", 641 "(kernelshark:11002): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", 642 "\n", 643 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", 644 "\n", 645 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", 646 "\n", 647 "(kernelshark:11002): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", 648 "\n", 649 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", 650 "\n", 651 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", 652 "\n", 653 "(kernelshark:11002): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", 654 "\n", 655 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", 656 "\n", 657 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", 658 "\n", 659 "(kernelshark:11002): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", 660 "\n", 661 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", 662 "\n", 663 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", 664 "\n", 665 "(kernelshark:11002): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", 666 "\n", 667 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", 668 "\n", 669 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", 670 "\n", 671 "(kernelshark:11002): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", 672 "\n", 673 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", 674 "\n", 675 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", 676 "\n", 677 "(kernelshark:11002): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", 678 "\n", 679 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", 680 "\n", 681 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", 682 "\n", 683 "(kernelshark:11002): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", 684 "\n", 685 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", 686 "\n", 687 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", 688 "\n", 689 "(kernelshark:11002): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", 690 "\n", 691 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", 692 "\n", 693 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", 694 "\n", 695 "(kernelshark:11002): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", 696 "\n", 697 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", 698 "\n", 699 "(kernelshark:11002): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n" 700 ] 701 } 702 ], 703 "source": [ 704 "!kernelshark {trace_file} 2>/dev/null" 705 ] 706 }, 707 { 708 "cell_type": "markdown", 709 "metadata": {}, 710 "source": [ 711 "# Workload composition using RTApp" 712 ] 713 }, 714 { 715 "cell_type": "markdown", 716 "metadata": {}, 717 "source": [ 718 "## 1) creation" 719 ] 720 }, 721 { 722 "cell_type": "code", 723 "execution_count": 37, 724 "metadata": { 725 "collapsed": false 726 }, 727 "outputs": [ 728 { 729 "name": "stderr", 730 "output_type": "stream", 731 "text": [ 732 "12:43:40 INFO : WlGen - Setup new workload example2\n" 733 ] 734 } 735 ], 736 "source": [ 737 "# Support to configure and run RTApp based workloads\n", 738 "from wlgen import RTA\n", 739 "\n", 740 "# Create a new RTApp workload generator using the calibration values\n", 741 "# reported by the TestEnv module\n", 742 "rtapp_name = 'example2'\n", 743 "rtapp = RTA(target, rtapp_name, calibration=te.calibration())" 744 ] 745 }, 746 { 747 "cell_type": "markdown", 748 "metadata": {}, 749 "source": [ 750 "## 2) configuration" 751 ] 752 }, 753 { 754 "cell_type": "code", 755 "execution_count": 40, 756 "metadata": { 757 "collapsed": false 758 }, 759 "outputs": [ 760 { 761 "name": "stderr", 762 "output_type": "stream", 763 "text": [ 764 "12:44:39 INFO : RTApp - Workload duration defined by longest task\n", 765 "12:44:39 INFO : RTApp - Default policy: SCHED_OTHER\n", 766 "12:44:39 INFO : RTApp - ------------------------\n", 767 "12:44:39 INFO : RTApp - task [task_ramp], sched: using default policy\n", 768 "12:44:39 INFO : RTApp - | calibration CPU: 1\n", 769 "12:44:39 INFO : RTApp - | loops count: 1\n", 770 "12:44:39 INFO : RTApp - | CPUs affinity: 1\n", 771 "12:44:39 INFO : RTApp - + phase_000001: duration 1.000000 [s] (100 loops)\n", 772 "12:44:39 INFO : RTApp - | period 10000 [us], duty_cycle 10 %\n", 773 "12:44:39 INFO : RTApp - | run_time 1000 [us], sleep_time 9000 [us]\n", 774 "12:44:39 INFO : RTApp - + phase_000002: duration 1.000000 [s] (20 loops)\n", 775 "12:44:39 INFO : RTApp - | period 50000 [us], duty_cycle 10 %\n", 776 "12:44:39 INFO : RTApp - | run_time 5000 [us], sleep_time 45000 [us]\n", 777 "12:44:39 INFO : RTApp - + phase_000003: duration 1.000000 [s] (20 loops)\n", 778 "12:44:39 INFO : RTApp - | period 50000 [us], duty_cycle 30 %\n", 779 "12:44:39 INFO : RTApp - | run_time 15000 [us], sleep_time 35000 [us]\n", 780 "12:44:39 INFO : RTApp - + phase_000004: duration 1.000000 [s] (20 loops)\n", 781 "12:44:39 INFO : RTApp - | period 50000 [us], duty_cycle 50 %\n", 782 "12:44:39 INFO : RTApp - | run_time 25000 [us], sleep_time 25000 [us]\n", 783 "12:44:39 INFO : RTApp - + phase_000005: duration 1.000000 [s] (20 loops)\n", 784 "12:44:39 INFO : RTApp - | period 50000 [us], duty_cycle 70 %\n", 785 "12:44:39 INFO : RTApp - | run_time 35000 [us], sleep_time 15000 [us]\n", 786 "12:44:39 INFO : RTApp - + phase_000006: duration 1.000000 [s] (20 loops)\n", 787 "12:44:39 INFO : RTApp - | period 50000 [us], duty_cycle 90 %\n", 788 "12:44:39 INFO : RTApp - | run_time 45000 [us], sleep_time 5000 [us]\n", 789 "12:44:39 INFO : RTApp - + phase_000007: duration 0.100000 [s] (1 loops)\n", 790 "12:44:39 INFO : RTApp - | period 100000 [us], duty_cycle 90 %\n", 791 "12:44:39 INFO : RTApp - | run_time 90000 [us], sleep_time 10000 [us]\n" 792 ] 793 } 794 ], 795 "source": [ 796 "# RTApp configurator for generation of PERIODIC tasks\n", 797 "from wlgen import Periodic, Ramp\n", 798 "\n", 799 "# Light workload\n", 800 "light = Periodic(duty_cycle_pct=10, duration_s=1.0, period_ms= 10,\n", 801 " cpus=str(target.bl.bigs_online[0]))\n", 802 "# Ramp workload\n", 803 "ramp = Ramp(start_pct=10, end_pct=90, delta_pct=20, time_s=1, period_ms=50)\n", 804 "# Heavy workload\n", 805 "heavy = Periodic(duty_cycle_pct=90, duration_s=0.1, period_ms=100)\n", 806 "\n", 807 "# Composed workload\n", 808 "lrh_task = light + ramp + heavy\n", 809 "\n", 810 "# Configure this RTApp instance to:\n", 811 "rtapp.conf(\n", 812 "\n", 813 " # 1. generate a \"profile based\" set of tasks\n", 814 " kind = 'profile',\n", 815 " \n", 816 " # 2. define the \"profile\" of each task\n", 817 " params = {\n", 818 " \n", 819 " # 3. PERIODIC task with\n", 820 " 'task_ramp': lrh_task.get() \n", 821 "\n", 822 " },\n", 823 " \n", 824 ");" 825 ] 826 }, 827 { 828 "cell_type": "code", 829 "execution_count": 41, 830 "metadata": { 831 "collapsed": false 832 }, 833 "outputs": [ 834 { 835 "name": "stderr", 836 "output_type": "stream", 837 "text": [ 838 "12:45:34 INFO : Generated RTApp JSON file:\n" 839 ] 840 }, 841 { 842 "name": "stdout", 843 "output_type": "stream", 844 "text": [ 845 "{\n", 846 " \"global\": {\n", 847 " \"calibration\": 138, \n", 848 " \"default_policy\": \"SCHED_OTHER\", \n", 849 " \"duration\": -1, \n", 850 " \"logdir\": \"/root/devlib-target\"\n", 851 " }, \n", 852 " \"tasks\": {\n", 853 " \"task_ramp\": {\n", 854 " \"cpus\": [\n", 855 " 1\n", 856 " ], \n", 857 " \"loop\": 1, \n", 858 " \"phases\": {\n", 859 " \"p000001\": {\n", 860 " \"loop\": 100, \n", 861 " \"run\": 1000, \n", 862 " \"timer\": {\n", 863 " \"period\": 10000, \n", 864 " \"ref\": \"task_ramp\"\n", 865 " }\n", 866 " }, \n", 867 " \"p000002\": {\n", 868 " \"loop\": 20, \n", 869 " \"run\": 5000, \n", 870 " \"timer\": {\n", 871 " \"period\": 50000, \n", 872 " \"ref\": \"task_ramp\"\n", 873 " }\n", 874 " }, \n", 875 " \"p000003\": {\n", 876 " \"loop\": 20, \n", 877 " \"run\": 15000, \n", 878 " \"timer\": {\n", 879 " \"period\": 50000, \n", 880 " \"ref\": \"task_ramp\"\n", 881 " }\n", 882 " }, \n", 883 " \"p000004\": {\n", 884 " \"loop\": 20, \n", 885 " \"run\": 25000, \n", 886 " \"timer\": {\n", 887 " \"period\": 50000, \n", 888 " \"ref\": \"task_ramp\"\n", 889 " }\n", 890 " }, \n", 891 " \"p000005\": {\n", 892 " \"loop\": 20, \n", 893 " \"run\": 35000, \n", 894 " \"timer\": {\n", 895 " \"period\": 50000, \n", 896 " \"ref\": \"task_ramp\"\n", 897 " }\n", 898 " }, \n", 899 " \"p000006\": {\n", 900 " \"loop\": 20, \n", 901 " \"run\": 45000, \n", 902 " \"timer\": {\n", 903 " \"period\": 50000, \n", 904 " \"ref\": \"task_ramp\"\n", 905 " }\n", 906 " }, \n", 907 " \"p000007\": {\n", 908 " \"loop\": 1, \n", 909 " \"run\": 90000, \n", 910 " \"timer\": {\n", 911 " \"period\": 100000, \n", 912 " \"ref\": \"task_ramp\"\n", 913 " }\n", 914 " }\n", 915 " }, \n", 916 " \"policy\": \"SCHED_OTHER\"\n", 917 " }\n", 918 " }\n", 919 "}\n" 920 ] 921 } 922 ], 923 "source": [ 924 "# Inspect the JSON file used to run the application\n", 925 "with open('./{}_00.json'.format(rtapp_name), 'r') as fh:\n", 926 " rtapp_json = json.load(fh)\n", 927 "logging.info('Generated RTApp JSON file:')\n", 928 "print json.dumps(rtapp_json, indent=4, sort_keys=True)" 929 ] 930 }, 931 { 932 "cell_type": "markdown", 933 "metadata": {}, 934 "source": [ 935 "## 3) execution" 936 ] 937 }, 938 { 939 "cell_type": "code", 940 "execution_count": 42, 941 "metadata": { 942 "collapsed": false 943 }, 944 "outputs": [ 945 { 946 "name": "stderr", 947 "output_type": "stream", 948 "text": [ 949 "12:48:02 INFO : # Create results folder for this execution\n", 950 "12:48:02 INFO : # Setup FTrace\n", 951 "12:48:06 INFO : ## Start energy sampling\n", 952 "12:48:07 INFO : ### Start RTApp execution\n", 953 "12:48:07 INFO : WlGen - Workload execution START:\n", 954 "12:48:07 INFO : WlGen - /root/devlib-target/bin/rt-app /root/devlib-target/example2_00.json\n", 955 "12:48:14 INFO : ## Read energy consumption: /home/derkling/Code/lisa/results/WlgenExample/example2/energy.json\n", 956 "12:48:16 INFO : EnergyReport - Energy [ a53]: 1.495969\n", 957 "12:48:16 INFO : EnergyReport - Energy [ a57]: 25.145680\n", 958 "12:48:16 INFO : # Stop FTrace\n", 959 "12:48:17 INFO : # Save FTrace: /home/derkling/Code/lisa/results/WlgenExample/example2/trace.dat\n", 960 "12:48:19 INFO : # Save platform description: /home/derkling/Code/lisa/results/WlgenExample/example2/platform.json\n", 961 "12:48:19 INFO : # Report collected data:\n", 962 "12:48:19 INFO : /home/derkling/Code/lisa/results/WlgenExample/example2\n" 963 ] 964 }, 965 { 966 "name": "stdout", 967 "output_type": "stream", 968 "text": [ 969 "total 4124\r\n", 970 "drwxrwxr-x 2 derkling derkling 4096 Mar 2 12:48 .\r\n", 971 "drwxrwxr-x 4 derkling derkling 4096 Mar 2 12:48 ..\r\n", 972 "-rw-rw-r-- 1 derkling derkling 53 Mar 2 12:48 energy.json\r\n", 973 "-rw-r--r-- 1 derkling derkling 2121 Mar 2 12:48 example2_00.json\r\n", 974 "-rw-rw-r-- 1 derkling derkling 235 Mar 2 12:48 output.log\r\n", 975 "-rw-rw-r-- 1 derkling derkling 1075 Mar 2 12:48 platform.json\r\n", 976 "-rw-r--r-- 1 derkling derkling 25084 Mar 2 12:48 rt-app-task_ramp-0.log\r\n", 977 "-rw-r--r-- 1 derkling derkling 4169728 Mar 2 12:48 trace.dat\r\n" 978 ] 979 } 980 ], 981 "source": [ 982 "res_dir = os.path.join(te.res_dir, rtapp_name)\n", 983 "nrg_report, plt, plt_file, trace_file = execute(te, rtapp, res_dir)" 984 ] 985 }, 986 { 987 "cell_type": "markdown", 988 "metadata": {}, 989 "source": [ 990 "## 4) trace inspection" 991 ] 992 }, 993 { 994 "cell_type": "code", 995 "execution_count": 48, 996 "metadata": { 997 "collapsed": false 998 }, 999 "outputs": [ 1000 { 1001 "name": "stdout", 1002 "output_type": "stream", 1003 "text": [ 1004 "version = 6\r\n" 1005 ] 1006 } 1007 ], 1008 "source": [ 1009 "!kernelshark {trace_file} 2>/dev/null" 1010 ] 1011 }, 1012 { 1013 "cell_type": "markdown", 1014 "metadata": {}, 1015 "source": [ 1016 "# Custom RTApp connfiguration" 1017 ] 1018 }, 1019 { 1020 "cell_type": "code", 1021 "execution_count": 51, 1022 "metadata": { 1023 "collapsed": false 1024 }, 1025 "outputs": [ 1026 { 1027 "name": "stderr", 1028 "output_type": "stream", 1029 "text": [ 1030 "12:55:36 INFO : WlGen - Setup new workload example3\n" 1031 ] 1032 } 1033 ], 1034 "source": [ 1035 "# Support to configure and run RTApp based workloads\n", 1036 "from wlgen import RTA\n", 1037 "\n", 1038 "# Create a new RTApp workload generator using the calibration values\n", 1039 "# reported by the TestEnv module\n", 1040 "rtapp_name = 'example3'\n", 1041 "rtapp = RTA(target, rtapp_name, calibration=te.calibration())\n", 1042 "\n", 1043 "# Configure this RTApp to use a custom JSON\n", 1044 "rtapp.conf(\n", 1045 "\n", 1046 " # 1. generate a \"custom\" set of tasks\n", 1047 " kind = 'custom',\n", 1048 " \n", 1049 " # 2. define the \"profile\" of each task\n", 1050 " params = \"../../assets/mp3-short.json\",\n", 1051 " \n", 1052 " # In this case only few values of the orignal JSON can be tuned:\n", 1053 " # DURATION : maximum duration of the workload [s]\n", 1054 " # PVALUE : calibration value\n", 1055 " # LOGDIR : folder used for generated logs\n", 1056 " # WORKDIR : working directory on target\n", 1057 " \n", 1058 " # 3. defined a maximum duration for that workload\n", 1059 " duration = 5,\n", 1060 " \n", 1061 ");" 1062 ] 1063 }, 1064 { 1065 "cell_type": "code", 1066 "execution_count": 52, 1067 "metadata": { 1068 "collapsed": false 1069 }, 1070 "outputs": [ 1071 { 1072 "name": "stderr", 1073 "output_type": "stream", 1074 "text": [ 1075 "12:55:53 INFO : # Create results folder for this execution\n", 1076 "12:55:53 INFO : # Setup FTrace\n", 1077 "12:55:57 INFO : ## Start energy sampling\n", 1078 "12:55:58 INFO : ### Start RTApp execution\n", 1079 "12:55:58 INFO : WlGen - Workload execution START:\n", 1080 "12:55:58 INFO : WlGen - /root/devlib-target/bin/rt-app /root/devlib-target/example3_00.json\n", 1081 "12:56:03 INFO : ## Read energy consumption: /home/derkling/Code/lisa/results/WlgenExample/example3/energy.json\n", 1082 "12:56:04 INFO : EnergyReport - Energy [ a53]: 2.481205\n", 1083 "12:56:04 INFO : EnergyReport - Energy [ a57]: 8.981533\n", 1084 "12:56:04 INFO : # Stop FTrace\n", 1085 "12:56:05 INFO : # Save FTrace: /home/derkling/Code/lisa/results/WlgenExample/example3/trace.dat\n", 1086 "12:56:07 INFO : # Save platform description: /home/derkling/Code/lisa/results/WlgenExample/example3/platform.json\n", 1087 "12:56:07 INFO : # Report collected data:\n", 1088 "12:56:07 INFO : /home/derkling/Code/lisa/results/WlgenExample/example3\n" 1089 ] 1090 }, 1091 { 1092 "name": "stdout", 1093 "output_type": "stream", 1094 "text": [ 1095 "total 5048\r\n", 1096 "drwxrwxr-x 2 derkling derkling 4096 Mar 2 12:56 .\r\n", 1097 "drwxrwxr-x 5 derkling derkling 4096 Mar 2 12:55 ..\r\n", 1098 "-rw-rw-r-- 1 derkling derkling 52 Mar 2 12:56 energy.json\r\n", 1099 "-rw-r--r-- 1 derkling derkling 1324 Mar 2 12:56 example3_00.json\r\n", 1100 "-rw-rw-r-- 1 derkling derkling 807 Mar 2 12:56 output.log\r\n", 1101 "-rw-rw-r-- 1 derkling derkling 1075 Mar 2 12:56 platform.json\r\n", 1102 "-rw-r--r-- 1 derkling derkling 5144576 Mar 2 12:56 trace.dat\r\n" 1103 ] 1104 } 1105 ], 1106 "source": [ 1107 "res_dir = os.path.join(te.res_dir, rtapp_name)\n", 1108 "nrg_report, plt, plt_file, trace_file = execute(te, rtapp, res_dir)" 1109 ] 1110 }, 1111 { 1112 "cell_type": "code", 1113 "execution_count": 53, 1114 "metadata": { 1115 "collapsed": false 1116 }, 1117 "outputs": [ 1118 { 1119 "name": "stderr", 1120 "output_type": "stream", 1121 "text": [ 1122 "12:56:21 INFO : Generated RTApp JSON file:\n" 1123 ] 1124 }, 1125 { 1126 "name": "stdout", 1127 "output_type": "stream", 1128 "text": [ 1129 "{\n", 1130 " \"global\": {\n", 1131 " \"calibration\": 138, \n", 1132 " \"default_policy\": \"SCHED_OTHER\", \n", 1133 " \"duration\": 5, \n", 1134 " \"frag\": 1, \n", 1135 " \"ftrace\": false, \n", 1136 " \"gnuplot\": false, \n", 1137 " \"lock_pages\": true, \n", 1138 " \"log_basename\": \"mp3\", \n", 1139 " \"logdir\": \"/root/devlib-target\"\n", 1140 " }, \n", 1141 " \"tasks\": {\n", 1142 " \"AudioOut\": {\n", 1143 " \"loop\": -1, \n", 1144 " \"priority\": -19, \n", 1145 " \"resume\": \"AudioTrack\", \n", 1146 " \"run\": 4725, \n", 1147 " \"suspend\": \"AudioOut\"\n", 1148 " }, \n", 1149 " \"AudioTick\": {\n", 1150 " \"cpus\": [\n", 1151 " 0\n", 1152 " ], \n", 1153 " \"loop\": -1, \n", 1154 " \"phases\": {\n", 1155 " \"p1\": {\n", 1156 " \"loop\": 1, \n", 1157 " \"resume\": \"AudioOut\", \n", 1158 " \"timer\": {\n", 1159 " \"period\": 6000, \n", 1160 " \"ref\": \"tick\"\n", 1161 " }\n", 1162 " }, \n", 1163 " \"p2\": {\n", 1164 " \"loop\": 4, \n", 1165 " \"timer\": {\n", 1166 " \"period\": 6000, \n", 1167 " \"ref\": \"tick\"\n", 1168 " }\n", 1169 " }\n", 1170 " }, \n", 1171 " \"priority\": -19\n", 1172 " }, \n", 1173 " \"AudioTrack\": {\n", 1174 " \"loop\": -1, \n", 1175 " \"priority\": -16, \n", 1176 " \"resume\": \"mp3.decoder\", \n", 1177 " \"run\": 300, \n", 1178 " \"suspend\": \"AudioTrack\"\n", 1179 " }, \n", 1180 " \"OMXCall\": {\n", 1181 " \"lock\": \"mutex\", \n", 1182 " \"loop\": -1, \n", 1183 " \"priority\": -2, \n", 1184 " \"run\": 300, \n", 1185 " \"signal\": \"queue\", \n", 1186 " \"unlock\": \"mutex\", \n", 1187 " \"wait\": {\n", 1188 " \"mutex\": \"mutex\", \n", 1189 " \"ref\": \"queue\"\n", 1190 " }\n", 1191 " }, \n", 1192 " \"mp3.decoder\": {\n", 1193 " \"lock\": \"mutex\", \n", 1194 " \"loop\": -1, \n", 1195 " \"priority\": -2, \n", 1196 " \"run\": 150, \n", 1197 " \"signal\": \"queue\", \n", 1198 " \"suspend\": \"mp3.decoder\", \n", 1199 " \"unlock\": \"mutex\", \n", 1200 " \"wait\": {\n", 1201 " \"mutex\": \"mutex\", \n", 1202 " \"ref\": \"queue\"\n", 1203 " }\n", 1204 " }\n", 1205 " }\n", 1206 "}\n" 1207 ] 1208 } 1209 ], 1210 "source": [ 1211 "# Inspect the JSON file used to run the application\n", 1212 "with open('./{}_00.json'.format(rtapp_name), 'r') as fh:\n", 1213 " rtapp_json = json.load(fh)\n", 1214 "logging.info('Generated RTApp JSON file:')\n", 1215 "print json.dumps(rtapp_json, indent=4, sort_keys=True)" 1216 ] 1217 }, 1218 { 1219 "cell_type": "markdown", 1220 "metadata": {}, 1221 "source": [ 1222 "# Running Hackbench" 1223 ] 1224 }, 1225 { 1226 "cell_type": "markdown", 1227 "metadata": {}, 1228 "source": [ 1229 "## 1) creation and configuration" 1230 ] 1231 }, 1232 { 1233 "cell_type": "code", 1234 "execution_count": 72, 1235 "metadata": { 1236 "collapsed": false 1237 }, 1238 "outputs": [ 1239 { 1240 "name": "stderr", 1241 "output_type": "stream", 1242 "text": [ 1243 "01:08:28 INFO : WlGen - Setup new workload hackbench\n" 1244 ] 1245 }, 1246 { 1247 "data": { 1248 "text/plain": [ 1249 "'hackbench_00'" 1250 ] 1251 }, 1252 "execution_count": 72, 1253 "metadata": {}, 1254 "output_type": "execute_result" 1255 } 1256 ], 1257 "source": [ 1258 "# Support to configure and run RTApp based workloads\n", 1259 "from wlgen import PerfMessaging\n", 1260 "\n", 1261 "# Create a \"perf bench sched messages\" (i.e. hackbench) workload\n", 1262 "perf_name = 'hackbench'\n", 1263 "perf = PerfMessaging(target, perf_name)\n", 1264 "\n", 1265 "perf.conf(group=1, loop=100, pipe=True, thread=True)\n" 1266 ] 1267 }, 1268 { 1269 "cell_type": "markdown", 1270 "metadata": {}, 1271 "source": [ 1272 "## 2) execution" 1273 ] 1274 }, 1275 { 1276 "cell_type": "code", 1277 "execution_count": 73, 1278 "metadata": { 1279 "collapsed": false 1280 }, 1281 "outputs": [ 1282 { 1283 "name": "stderr", 1284 "output_type": "stream", 1285 "text": [ 1286 "01:08:29 INFO : # Create results folder for this execution\n" 1287 ] 1288 }, 1289 { 1290 "name": "stdout", 1291 "output_type": "stream", 1292 "text": [ 1293 "mkdir: cannot create directory ‘/home/derkling/Code/lisa/results/WlgenExample/hackbench’: File exists\r\n" 1294 ] 1295 }, 1296 { 1297 "name": "stderr", 1298 "output_type": "stream", 1299 "text": [ 1300 "01:08:29 INFO : # Setup FTrace\n", 1301 "01:08:31 INFO : ## Start energy sampling\n", 1302 "01:08:31 INFO : ### Start RTApp execution\n", 1303 "01:08:31 INFO : WlGen - Workload execution START:\n", 1304 "01:08:31 INFO : WlGen - /root/devlib-target/bin/perf bench sched messaging --pipe --thread --group 1 --loop 100\n", 1305 "01:08:32 INFO : PerfBench - Completion time: 0.126000, Performance 7.936508\n", 1306 "01:08:32 INFO : ## Read energy consumption: /home/derkling/Code/lisa/results/WlgenExample/hackbench/energy.json\n", 1307 "01:08:33 INFO : EnergyReport - Energy [ a53]: 1.066525\n", 1308 "01:08:33 INFO : EnergyReport - Energy [ a57]: 2.245705\n", 1309 "01:08:33 INFO : # Stop FTrace\n", 1310 "01:08:34 INFO : # Save FTrace: /home/derkling/Code/lisa/results/WlgenExample/hackbench/trace.dat\n", 1311 "01:08:36 INFO : # Save platform description: /home/derkling/Code/lisa/results/WlgenExample/hackbench/platform.json\n", 1312 "01:08:36 INFO : # Report collected data:\n", 1313 "01:08:36 INFO : /home/derkling/Code/lisa/results/WlgenExample/hackbench\n" 1314 ] 1315 }, 1316 { 1317 "name": "stdout", 1318 "output_type": "stream", 1319 "text": [ 1320 "total 10396\r\n", 1321 "drwxrwxr-x 2 derkling derkling 4096 Mar 2 13:08 .\r\n", 1322 "drwxrwxr-x 6 derkling derkling 4096 Mar 2 13:08 ..\r\n", 1323 "-rw-rw-r-- 1 derkling derkling 52 Mar 2 13:08 energy.json\r\n", 1324 "-rw-rw-r-- 1 derkling derkling 147 Mar 2 13:08 output.log\r\n", 1325 "-rw-rw-r-- 1 derkling derkling 61 Mar 2 13:08 performance.json\r\n", 1326 "-rw-rw-r-- 1 derkling derkling 1075 Mar 2 13:08 platform.json\r\n", 1327 "-rw-r--r-- 1 derkling derkling 10620928 Mar 2 13:08 trace.dat\r\n" 1328 ] 1329 } 1330 ], 1331 "source": [ 1332 "res_dir = os.path.join(te.res_dir, perf_name)\n", 1333 "nrg_report, plt, plt_file, trace_file = execute(te, perf, res_dir)" 1334 ] 1335 }, 1336 { 1337 "cell_type": "markdown", 1338 "metadata": {}, 1339 "source": [ 1340 "## 3) explore the performance report" 1341 ] 1342 }, 1343 { 1344 "cell_type": "code", 1345 "execution_count": 76, 1346 "metadata": { 1347 "collapsed": false 1348 }, 1349 "outputs": [ 1350 { 1351 "name": "stderr", 1352 "output_type": "stream", 1353 "text": [ 1354 "01:10:40 INFO : Generated performance JSON file:\n" 1355 ] 1356 }, 1357 { 1358 "name": "stdout", 1359 "output_type": "stream", 1360 "text": [ 1361 "{\n", 1362 " \"ctime\": 0.126, \n", 1363 " \"performance\": 7.936507936507937\n", 1364 "}\n" 1365 ] 1366 } 1367 ], 1368 "source": [ 1369 "# Inspect the generated performance report\n", 1370 "perf_file = os.path.join(te.res_dir, perf_name, 'performance.json')\n", 1371 "with open(perf_file, 'r') as fh:\n", 1372 " perf_json = json.load(fh)\n", 1373 "logging.info('Generated performance JSON file:')\n", 1374 "print json.dumps(perf_json, indent=4, sort_keys=True)" 1375 ] 1376 }, 1377 { 1378 "cell_type": "markdown", 1379 "metadata": {}, 1380 "source": [ 1381 "## 4) trace inspection " 1382 ] 1383 }, 1384 { 1385 "cell_type": "code", 1386 "execution_count": 77, 1387 "metadata": { 1388 "collapsed": false 1389 }, 1390 "outputs": [ 1391 { 1392 "name": "stdout", 1393 "output_type": "stream", 1394 "text": [ 1395 "version = 6\r\n" 1396 ] 1397 } 1398 ], 1399 "source": [ 1400 "!kernelshark {trace_file} 2>/dev/null" 1401 ] 1402 } 1403 ], 1404 "metadata": { 1405 "celltoolbar": "Raw Cell Format", 1406 "kernelspec": { 1407 "display_name": "Python 2", 1408 "language": "python", 1409 "name": "python2" 1410 }, 1411 "language_info": { 1412 "codemirror_mode": { 1413 "name": "ipython", 1414 "version": 2 1415 }, 1416 "file_extension": ".py", 1417 "mimetype": "text/x-python", 1418 "name": "python", 1419 "nbconvert_exporter": "python", 1420 "pygments_lexer": "ipython2", 1421 "version": "2.7.9" 1422 } 1423 }, 1424 "nbformat": 4, 1425 "nbformat_minor": 0 1426} 1427