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 some example of **data analysis and visualization**\n", 15 "from a set of trace events collected trace. These analysis are mainly supported\n", 16 "by **TRAPpy** and other standard **PANDAs** APIs." 17 ] 18 }, 19 { 20 "cell_type": "code", 21 "execution_count": 317, 22 "metadata": { 23 "collapsed": true 24 }, 25 "outputs": [], 26 "source": [ 27 "import logging\n", 28 "from conf import LisaLogging\n", 29 "LisaLogging.setup()" 30 ] 31 }, 32 { 33 "cell_type": "markdown", 34 "metadata": {}, 35 "source": [ 36 "# Trace Parsing" 37 ] 38 }, 39 { 40 "cell_type": "code", 41 "execution_count": 318, 42 "metadata": { 43 "collapsed": false 44 }, 45 "outputs": [], 46 "source": [ 47 "# Events we are interested to collect from the trace\n", 48 "my_events = [\n", 49 " \"sched_switch\",\n", 50 " \"sched_wakeup\",\n", 51 " \"sched_contrib_scale_f\",\n", 52 " \"sched_load_avg_cpu\",\n", 53 " \"sched_load_avg_task\",\n", 54 " \"sched_tune_tasks_update\",\n", 55 " \"sched_boost_cpu\",\n", 56 " \"sched_boost_task\",\n", 57 " \"sched_energy_diff\",\n", 58 " \"sched_overutilized\",\n", 59 " \"cpu_frequency\",\n", 60 " \"cpu_capacity\"\n", 61 "]\n", 62 "\n", 63 "# Let's use an example trace\n", 64 "trace_file = './example_results/trace.dat'" 65 ] 66 }, 67 { 68 "cell_type": "code", 69 "execution_count": 319, 70 "metadata": { 71 "collapsed": false 72 }, 73 "outputs": [], 74 "source": [ 75 "# Use TRAPpy support to convert a trace into a PANDAs DataFrame\n", 76 "import trappy\n", 77 "\n", 78 "ftrace = trappy.FTrace(\n", 79 " name=\"PandasExamples\",\n", 80 " path=trace_file,\n", 81 " scope='custom',\n", 82 " events=my_events,\n", 83 " window=(0,None))" 84 ] 85 }, 86 { 87 "cell_type": "markdown", 88 "metadata": {}, 89 "source": [ 90 "## Trace visualization" 91 ] 92 }, 93 { 94 "cell_type": "code", 95 "execution_count": 320, 96 "metadata": { 97 "collapsed": false 98 }, 99 "outputs": [ 100 { 101 "data": { 102 "text/html": [ 103 "<style>\n", 104 "/*\n", 105 "\n", 106 " * Copyright 2015-2016 ARM Limited\n", 107 "\n", 108 " *\n", 109 "\n", 110 " * Licensed under the Apache License, Version 2.0 (the \"License\");\n", 111 "\n", 112 " * you may not use this file except in compliance with the License.\n", 113 "\n", 114 " * You may obtain a copy of the License at\n", 115 "\n", 116 " *\n", 117 "\n", 118 " * http://www.apache.org/licenses/LICENSE-2.0\n", 119 "\n", 120 " *\n", 121 "\n", 122 " * Unless required by applicable law or agreed to in writing, software\n", 123 "\n", 124 " * distributed under the License is distributed on an \"AS IS\" BASIS,\n", 125 "\n", 126 " * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", 127 "\n", 128 " * See the License for the specific language governing permissions and\n", 129 "\n", 130 " * limitations under the License.\n", 131 "\n", 132 " */\n", 133 "\n", 134 "\n", 135 "\n", 136 ".d3-tip {\n", 137 "\n", 138 " line-height: 1;\n", 139 "\n", 140 " padding: 12px;\n", 141 "\n", 142 " background: rgba(0, 0, 0, 0.6);\n", 143 "\n", 144 " color: #fff;\n", 145 "\n", 146 " border-radius: 2px;\n", 147 "\n", 148 " position: absolute !important;\n", 149 "\n", 150 " z-index: 99999;\n", 151 "\n", 152 "}\n", 153 "\n", 154 "\n", 155 "\n", 156 ".d3-tip:after {\n", 157 "\n", 158 " box-sizing: border-box;\n", 159 "\n", 160 " pointer-events: none;\n", 161 "\n", 162 " display: inline;\n", 163 "\n", 164 " font-size: 10px;\n", 165 "\n", 166 " width: 100%;\n", 167 "\n", 168 " line-height: 1;\n", 169 "\n", 170 " color: rgba(0, 0, 0, 0.6);\n", 171 "\n", 172 " content: \"\\25BC\";\n", 173 "\n", 174 " position: absolute !important;\n", 175 "\n", 176 " z-index: 99999;\n", 177 "\n", 178 " text-align: center;\n", 179 "\n", 180 "}\n", 181 "\n", 182 "\n", 183 "\n", 184 ".d3-tip.n:after {\n", 185 "\n", 186 " margin: -1px 0 0 0;\n", 187 "\n", 188 " top: 100%;\n", 189 "\n", 190 " left: 0;\n", 191 "\n", 192 "}\n", 193 "\n", 194 "\n", 195 "\n", 196 ".contextRect {\n", 197 "\n", 198 " fill: lightgray;\n", 199 "\n", 200 " fill-opacity: 0.5;\n", 201 "\n", 202 " stroke: black;\n", 203 "\n", 204 " stroke-width: 1;\n", 205 "\n", 206 " stroke-opacity: 1;\n", 207 "\n", 208 " pointer-events: none;\n", 209 "\n", 210 " shape-rendering: crispEdges;\n", 211 "\n", 212 "}\n", 213 "\n", 214 "\n", 215 "\n", 216 ".chart {\n", 217 "\n", 218 " shape-rendering: crispEdges;\n", 219 "\n", 220 "}\n", 221 "\n", 222 "\n", 223 "\n", 224 ".mini text {\n", 225 "\n", 226 " font: 9px sans-serif;\n", 227 "\n", 228 "}\n", 229 "\n", 230 "\n", 231 "\n", 232 ".main text {\n", 233 "\n", 234 " font: 12px sans-serif;\n", 235 "\n", 236 "}\n", 237 "\n", 238 "\n", 239 "\n", 240 ".axis line, .axis path {\n", 241 "\n", 242 " stroke: black;\n", 243 "\n", 244 "}\n", 245 "\n", 246 "\n", 247 "\n", 248 ".miniItem {\n", 249 "\n", 250 " stroke-width: 8;\n", 251 "\n", 252 "}\n", 253 "\n", 254 "\n", 255 "\n", 256 ".brush .extent {\n", 257 "\n", 258 "\n", 259 "\n", 260 " stroke: #000;\n", 261 "\n", 262 " fill-opacity: .125;\n", 263 "\n", 264 " shape-rendering: crispEdges;\n", 265 "\n", 266 "}\n", 267 "\n", 268 "</style>\n", 269 "<div id=\"fig_d214ad0f1542466fae4421fb3494b551\" class=\"eventplot\">\n", 270 " <script>\n", 271 " var req = require.config( {\n", 272 "\n", 273 " paths: {\n", 274 "\n", 275 " \"EventPlot\": '/nbextensions/plotter_scripts/EventPlot/EventPlot',\n", 276 " \"d3-tip\": '/nbextensions/plotter_scripts/EventPlot/d3.tip.v0.6.3',\n", 277 " \"d3-plotter\": '/nbextensions/plotter_scripts/EventPlot/d3.min'\n", 278 " },\n", 279 " shim: {\n", 280 " \"d3-plotter\" : {\n", 281 " \"exports\" : \"d3\"\n", 282 " },\n", 283 " \"d3-tip\": [\"d3-plotter\"],\n", 284 " \"EventPlot\": {\n", 285 "\n", 286 " \"deps\": [\"d3-tip\", \"d3-plotter\" ],\n", 287 " \"exports\": \"EventPlot\"\n", 288 " }\n", 289 " }\n", 290 " });\n", 291 " req([\"require\", \"EventPlot\"], function() {\n", 292 " EventPlot.generate('fig_d214ad0f1542466fae4421fb3494b551', '/nbextensions/');\n", 293 " });\n", 294 " </script>\n", 295 " </div>" 296 ], 297 "text/plain": [ 298 "<IPython.core.display.HTML object>" 299 ] 300 }, 301 "metadata": {}, 302 "output_type": "display_data" 303 } 304 ], 305 "source": [ 306 "# NOTE: The interactive trace visualization is available only if you run\n", 307 "# the workload to generate a new trace-file\n", 308 "trappy.plotter.plot_trace(ftrace)" 309 ] 310 }, 311 { 312 "cell_type": "markdown", 313 "metadata": {}, 314 "source": [ 315 "## Accessing DataFrame tables" 316 ] 317 }, 318 { 319 "cell_type": "code", 320 "execution_count": 321, 321 "metadata": { 322 "collapsed": false 323 }, 324 "outputs": [ 325 { 326 "name": "stdout", 327 "output_type": "stream", 328 "text": [ 329 "total 461132\r\n", 330 "drwxrwxr-x 4 derkling derkling 4096 Mar 3 10:51 .\r\n", 331 "drwxrwxr-x 14 derkling derkling 4096 Mar 2 16:24 ..\r\n", 332 "-rw-rw-r-- 1 derkling derkling 9646 Mar 2 16:24 01_IPythonNotebooksUsage.ipynb\r\n", 333 "-rw-rw-r-- 1 derkling derkling 69766 Mar 2 16:59 02_TestEnvUsage.ipynb\r\n", 334 "-rw-rw-r-- 1 derkling derkling 49598 Mar 2 17:20 03_WlGenUsage.ipynb\r\n", 335 "-rw-rw-r-- 1 derkling derkling 18062 Mar 2 17:20 04_ExecutorUsage.ipynb\r\n", 336 "-rw-rw-r-- 1 derkling derkling 170388 Mar 3 10:51 05_TrappyUsage.ipynb\r\n", 337 "-rw-rw-r-- 1 derkling derkling 319096 Mar 3 10:46 06_TraceAnalysis.ipynb\r\n", 338 "drwxrwxr-x 2 derkling derkling 4096 Mar 3 10:36 example_results\r\n", 339 "drwxr-xr-x 2 derkling derkling 4096 Mar 3 08:56 .ipynb_checkpoints\r\n", 340 "-rw-rw-r-- 1 derkling derkling 241050436 Mar 2 17:23 trace.raw.txt\r\n", 341 "-rw-rw-r-- 1 derkling derkling 230468272 Mar 2 17:23 trace.txt\r\n" 342 ] 343 } 344 ], 345 "source": [ 346 "# Let's have a look at the generated file\n", 347 "!ls -la example_results" 348 ] 349 }, 350 { 351 "cell_type": "markdown", 352 "metadata": {}, 353 "source": [ 354 "Notice that the binary trace has been used to generate both textual\n", 355 "(i.e. trace.txt) trace as well as a raw trace (trace.raw.txt)." 356 ] 357 }, 358 { 359 "cell_type": "code", 360 "execution_count": 322, 361 "metadata": { 362 "collapsed": false 363 }, 364 "outputs": [ 365 { 366 "name": "stderr", 367 "output_type": "stream", 368 "text": [ 369 "10:51:52 INFO : Example of (formatted) 'sched_switch' event:\n" 370 ] 371 }, 372 { 373 "name": "stdout", 374 "output_type": "stream", 375 "text": [ 376 " <...>-20278 [001] 713.575552: sched_switch: trace-cmd:20278 [120] x ==> swapper/1:0 [120]\n", 377 "\n" 378 ] 379 } 380 ], 381 "source": [ 382 "logging.info(\"Example of (formatted) 'sched_switch' event:\")\n", 383 "with open('./example_results/trace.txt', 'r') as fh:\n", 384 " for line in fh:\n", 385 " if line.find('sched_switch') == -1:\n", 386 " continue\n", 387 " print line\n", 388 " break" 389 ] 390 }, 391 { 392 "cell_type": "code", 393 "execution_count": 323, 394 "metadata": { 395 "collapsed": false 396 }, 397 "outputs": [ 398 { 399 "name": "stderr", 400 "output_type": "stream", 401 "text": [ 402 "10:51:52 INFO : Example of (raw) 'sched_switch' event:\n" 403 ] 404 }, 405 { 406 "name": "stdout", 407 "output_type": "stream", 408 "text": [ 409 " <...>-20278 [001] 713.575552: sched_switch: prev_comm=trace-cmd prev_pid=20278 prev_prio=120 prev_state=64 next_comm=swapper/1 next_pid=0 next_prio=120\n", 410 "\n" 411 ] 412 } 413 ], 414 "source": [ 415 "logging.info(\"Example of (raw) 'sched_switch' event:\")\n", 416 "with open('./example_results/trace.raw.txt', 'r') as fh:\n", 417 " for line in fh:\n", 418 " if line.find('sched_switch') == -1:\n", 419 " continue\n", 420 " print line\n", 421 " break" 422 ] 423 }, 424 { 425 "cell_type": "markdown", 426 "metadata": {}, 427 "source": [ 428 "Every event correspond to a \"table\" which is exposed as an attribute of the\n", 429 "TRAPpy::FTtrace object we created by parsing the trace.\n", 430 "\n", 431 "We can use **TRAPpy::FTrace::class_definitions**, which is a dictionary tracking all the collected tables." 432 ] 433 }, 434 { 435 "cell_type": "code", 436 "execution_count": 324, 437 "metadata": { 438 "collapsed": false 439 }, 440 "outputs": [ 441 { 442 "name": "stderr", 443 "output_type": "stream", 444 "text": [ 445 "10:51:53 INFO : List of events identified in the trace:\n", 446 "10:51:53 INFO : sched_load_avg_task\n", 447 "10:51:53 INFO : cpu_frequency\n", 448 "10:51:53 INFO : cpu_capacity\n", 449 "10:51:53 INFO : sched_load_avg_cpu\n", 450 "10:51:53 INFO : sched_boost_cpu\n", 451 "10:51:53 INFO : sched_tune_tasks_update\n", 452 "10:51:53 INFO : sched_boost_task\n", 453 "10:51:53 INFO : sched_overutilized\n", 454 "10:51:53 INFO : sched_energy_diff\n", 455 "10:51:53 INFO : sched_switch\n", 456 "10:51:53 INFO : sched_contrib_scale_f\n", 457 "10:51:53 INFO : sched_wakeup\n" 458 ] 459 } 460 ], 461 "source": [ 462 "logging.info(\"List of events identified in the trace:\")\n", 463 "for event in ftrace.class_definitions.keys():\n", 464 " logging.info(\" %s\", event)" 465 ] 466 }, 467 { 468 "cell_type": "code", 469 "execution_count": 325, 470 "metadata": { 471 "collapsed": false, 472 "scrolled": true 473 }, 474 "outputs": [ 475 { 476 "name": "stderr", 477 "output_type": "stream", 478 "text": [ 479 "10:51:53 INFO : The 'sched_switch' events are collected into this DataFrame:\n" 480 ] 481 }, 482 { 483 "data": { 484 "text/html": [ 485 "<div>\n", 486 "<table border=\"1\" class=\"dataframe\">\n", 487 " <thead>\n", 488 " <tr style=\"text-align: right;\">\n", 489 " <th></th>\n", 490 " <th>__comm</th>\n", 491 " <th>__cpu</th>\n", 492 " <th>__pid</th>\n", 493 " <th>next_comm</th>\n", 494 " <th>next_pid</th>\n", 495 " <th>next_prio</th>\n", 496 " <th>prev_comm</th>\n", 497 " <th>prev_pid</th>\n", 498 " <th>prev_prio</th>\n", 499 " <th>prev_state</th>\n", 500 " </tr>\n", 501 " <tr>\n", 502 " <th>Time</th>\n", 503 " <th></th>\n", 504 " <th></th>\n", 505 " <th></th>\n", 506 " <th></th>\n", 507 " <th></th>\n", 508 " <th></th>\n", 509 " <th></th>\n", 510 " <th></th>\n", 511 " <th></th>\n", 512 " <th></th>\n", 513 " </tr>\n", 514 " </thead>\n", 515 " <tbody>\n", 516 " <tr>\n", 517 " <th>0.000272</th>\n", 518 " <td><...></td>\n", 519 " <td>1</td>\n", 520 " <td>20278</td>\n", 521 " <td>swapper/1</td>\n", 522 " <td>0</td>\n", 523 " <td>120</td>\n", 524 " <td>trace-cmd</td>\n", 525 " <td>20278</td>\n", 526 " <td>120</td>\n", 527 " <td>64</td>\n", 528 " </tr>\n", 529 " <tr>\n", 530 " <th>0.000348</th>\n", 531 " <td><idle></td>\n", 532 " <td>0</td>\n", 533 " <td>0</td>\n", 534 " <td>sh</td>\n", 535 " <td>20277</td>\n", 536 " <td>120</td>\n", 537 " <td>swapper/0</td>\n", 538 " <td>0</td>\n", 539 " <td>120</td>\n", 540 " <td>0</td>\n", 541 " </tr>\n", 542 " <tr>\n", 543 " <th>0.001321</th>\n", 544 " <td><...></td>\n", 545 " <td>0</td>\n", 546 " <td>20277</td>\n", 547 " <td>sudo</td>\n", 548 " <td>20276</td>\n", 549 " <td>120</td>\n", 550 " <td>sh</td>\n", 551 " <td>20277</td>\n", 552 " <td>120</td>\n", 553 " <td>64</td>\n", 554 " </tr>\n", 555 " <tr>\n", 556 " <th>0.001357</th>\n", 557 " <td><idle></td>\n", 558 " <td>1</td>\n", 559 " <td>0</td>\n", 560 " <td>rcu_preempt</td>\n", 561 " <td>7</td>\n", 562 " <td>120</td>\n", 563 " <td>swapper/1</td>\n", 564 " <td>0</td>\n", 565 " <td>120</td>\n", 566 " <td>0</td>\n", 567 " </tr>\n", 568 " <tr>\n", 569 " <th>0.001458</th>\n", 570 " <td>rcu_preempt</td>\n", 571 " <td>1</td>\n", 572 " <td>7</td>\n", 573 " <td>swapper/1</td>\n", 574 " <td>0</td>\n", 575 " <td>120</td>\n", 576 " <td>rcu_preempt</td>\n", 577 " <td>7</td>\n", 578 " <td>120</td>\n", 579 " <td>1</td>\n", 580 " </tr>\n", 581 " <tr>\n", 582 " <th>0.005202</th>\n", 583 " <td><...></td>\n", 584 " <td>0</td>\n", 585 " <td>20276</td>\n", 586 " <td>ksdioirqd/mmc2</td>\n", 587 " <td>1364</td>\n", 588 " <td>98</td>\n", 589 " <td>sudo</td>\n", 590 " <td>20276</td>\n", 591 " <td>120</td>\n", 592 " <td>1024</td>\n", 593 " </tr>\n", 594 " <tr>\n", 595 " <th>0.005349</th>\n", 596 " <td>ksdioirqd/mmc2</td>\n", 597 " <td>0</td>\n", 598 " <td>1364</td>\n", 599 " <td>rsyslogd</td>\n", 600 " <td>394</td>\n", 601 " <td>120</td>\n", 602 " <td>ksdioirqd/mmc2</td>\n", 603 " <td>1364</td>\n", 604 " <td>98</td>\n", 605 " <td>1</td>\n", 606 " </tr>\n", 607 " <tr>\n", 608 " <th>0.005464</th>\n", 609 " <td><idle></td>\n", 610 " <td>1</td>\n", 611 " <td>0</td>\n", 612 " <td>ksoftirqd/1</td>\n", 613 " <td>14</td>\n", 614 " <td>120</td>\n", 615 " <td>swapper/1</td>\n", 616 " <td>0</td>\n", 617 " <td>120</td>\n", 618 " <td>0</td>\n", 619 " </tr>\n", 620 " <tr>\n", 621 " <th>0.005528</th>\n", 622 " <td>ksoftirqd/1</td>\n", 623 " <td>1</td>\n", 624 " <td>14</td>\n", 625 " <td>rcu_preempt</td>\n", 626 " <td>7</td>\n", 627 " <td>120</td>\n", 628 " <td>ksoftirqd/1</td>\n", 629 " <td>14</td>\n", 630 " <td>120</td>\n", 631 " <td>1</td>\n", 632 " </tr>\n", 633 " <tr>\n", 634 " <th>0.005612</th>\n", 635 " <td>rcu_preempt</td>\n", 636 " <td>1</td>\n", 637 " <td>7</td>\n", 638 " <td>swapper/1</td>\n", 639 " <td>0</td>\n", 640 " <td>120</td>\n", 641 " <td>rcu_preempt</td>\n", 642 " <td>7</td>\n", 643 " <td>120</td>\n", 644 " <td>1</td>\n", 645 " </tr>\n", 646 " <tr>\n", 647 " <th>0.005616</th>\n", 648 " <td>rsyslogd</td>\n", 649 " <td>0</td>\n", 650 " <td>394</td>\n", 651 " <td>rs:main Q:Reg</td>\n", 652 " <td>380</td>\n", 653 " <td>120</td>\n", 654 " <td>rsyslogd</td>\n", 655 " <td>394</td>\n", 656 " <td>120</td>\n", 657 " <td>1</td>\n", 658 " </tr>\n", 659 " <tr>\n", 660 " <th>0.006245</th>\n", 661 " <td>rs:main</td>\n", 662 " <td>0</td>\n", 663 " <td>380</td>\n", 664 " <td>sudo</td>\n", 665 " <td>20276</td>\n", 666 " <td>120</td>\n", 667 " <td>rs:main Q:Reg</td>\n", 668 " <td>380</td>\n", 669 " <td>120</td>\n", 670 " <td>1</td>\n", 671 " </tr>\n", 672 " <tr>\n", 673 " <th>0.007334</th>\n", 674 " <td><...></td>\n", 675 " <td>0</td>\n", 676 " <td>20276</td>\n", 677 " <td>rcu_sched</td>\n", 678 " <td>8</td>\n", 679 " <td>120</td>\n", 680 " <td>sudo</td>\n", 681 " <td>20276</td>\n", 682 " <td>120</td>\n", 683 " <td>64</td>\n", 684 " </tr>\n", 685 " <tr>\n", 686 " <th>0.007425</th>\n", 687 " <td><idle></td>\n", 688 " <td>1</td>\n", 689 " <td>0</td>\n", 690 " <td>bash</td>\n", 691 " <td>19394</td>\n", 692 " <td>120</td>\n", 693 " <td>swapper/1</td>\n", 694 " <td>0</td>\n", 695 " <td>120</td>\n", 696 " <td>0</td>\n", 697 " </tr>\n", 698 " <tr>\n", 699 " <th>0.007450</th>\n", 700 " <td><...></td>\n", 701 " <td>0</td>\n", 702 " <td>8</td>\n", 703 " <td>swapper/0</td>\n", 704 " <td>0</td>\n", 705 " <td>120</td>\n", 706 " <td>rcu_sched</td>\n", 707 " <td>8</td>\n", 708 " <td>120</td>\n", 709 " <td>1</td>\n", 710 " </tr>\n", 711 " <tr>\n", 712 " <th>0.008416</th>\n", 713 " <td>bash</td>\n", 714 " <td>1</td>\n", 715 " <td>19394</td>\n", 716 " <td>kworker/1:2</td>\n", 717 " <td>19472</td>\n", 718 " <td>120</td>\n", 719 " <td>bash</td>\n", 720 " <td>19394</td>\n", 721 " <td>120</td>\n", 722 " <td>1</td>\n", 723 " </tr>\n", 724 " <tr>\n", 725 " <th>0.008562</th>\n", 726 " <td><...></td>\n", 727 " <td>1</td>\n", 728 " <td>19472</td>\n", 729 " <td>sshd</td>\n", 730 " <td>15461</td>\n", 731 " <td>120</td>\n", 732 " <td>kworker/1:2</td>\n", 733 " <td>19472</td>\n", 734 " <td>120</td>\n", 735 " <td>1</td>\n", 736 " </tr>\n", 737 " <tr>\n", 738 " <th>0.009328</th>\n", 739 " <td>sshd</td>\n", 740 " <td>1</td>\n", 741 " <td>15461</td>\n", 742 " <td>rcu_preempt</td>\n", 743 " <td>7</td>\n", 744 " <td>120</td>\n", 745 " <td>sshd</td>\n", 746 " <td>15461</td>\n", 747 " <td>120</td>\n", 748 " <td>1</td>\n", 749 " </tr>\n", 750 " <tr>\n", 751 " <th>0.009437</th>\n", 752 " <td>rcu_preempt</td>\n", 753 " <td>1</td>\n", 754 " <td>7</td>\n", 755 " <td>swapper/1</td>\n", 756 " <td>0</td>\n", 757 " <td>120</td>\n", 758 " <td>rcu_preempt</td>\n", 759 " <td>7</td>\n", 760 " <td>120</td>\n", 761 " <td>1</td>\n", 762 " </tr>\n", 763 " <tr>\n", 764 " <th>0.009632</th>\n", 765 " <td><idle></td>\n", 766 " <td>0</td>\n", 767 " <td>0</td>\n", 768 " <td>rcu_sched</td>\n", 769 " <td>8</td>\n", 770 " <td>120</td>\n", 771 " <td>swapper/0</td>\n", 772 " <td>0</td>\n", 773 " <td>120</td>\n", 774 " <td>0</td>\n", 775 " </tr>\n", 776 " <tr>\n", 777 " <th>0.009731</th>\n", 778 " <td><...></td>\n", 779 " <td>0</td>\n", 780 " <td>8</td>\n", 781 " <td>swapper/0</td>\n", 782 " <td>0</td>\n", 783 " <td>120</td>\n", 784 " <td>rcu_sched</td>\n", 785 " <td>8</td>\n", 786 " <td>120</td>\n", 787 " <td>1</td>\n", 788 " </tr>\n", 789 " <tr>\n", 790 " <th>0.013650</th>\n", 791 " <td><idle></td>\n", 792 " <td>1</td>\n", 793 " <td>0</td>\n", 794 " <td>ksoftirqd/1</td>\n", 795 " <td>14</td>\n", 796 " <td>120</td>\n", 797 " <td>swapper/1</td>\n", 798 " <td>0</td>\n", 799 " <td>120</td>\n", 800 " <td>0</td>\n", 801 " </tr>\n", 802 " <tr>\n", 803 " <th>0.013727</th>\n", 804 " <td>ksoftirqd/1</td>\n", 805 " <td>1</td>\n", 806 " <td>14</td>\n", 807 " <td>rcu_preempt</td>\n", 808 " <td>7</td>\n", 809 " <td>120</td>\n", 810 " <td>ksoftirqd/1</td>\n", 811 " <td>14</td>\n", 812 " <td>120</td>\n", 813 " <td>1</td>\n", 814 " </tr>\n", 815 " <tr>\n", 816 " <th>0.013839</th>\n", 817 " <td>rcu_preempt</td>\n", 818 " <td>1</td>\n", 819 " <td>7</td>\n", 820 " <td>swapper/1</td>\n", 821 " <td>0</td>\n", 822 " <td>120</td>\n", 823 " <td>rcu_preempt</td>\n", 824 " <td>7</td>\n", 825 " <td>120</td>\n", 826 " <td>1</td>\n", 827 " </tr>\n", 828 " <tr>\n", 829 " <th>0.017585</th>\n", 830 " <td><idle></td>\n", 831 " <td>0</td>\n", 832 " <td>0</td>\n", 833 " <td>ksdioirqd/mmc2</td>\n", 834 " <td>1364</td>\n", 835 " <td>98</td>\n", 836 " <td>swapper/0</td>\n", 837 " <td>0</td>\n", 838 " <td>120</td>\n", 839 " <td>0</td>\n", 840 " </tr>\n", 841 " <tr>\n", 842 " <th>0.017587</th>\n", 843 " <td><idle></td>\n", 844 " <td>1</td>\n", 845 " <td>0</td>\n", 846 " <td>rcu_preempt</td>\n", 847 " <td>7</td>\n", 848 " <td>120</td>\n", 849 " <td>swapper/1</td>\n", 850 " <td>0</td>\n", 851 " <td>120</td>\n", 852 " <td>0</td>\n", 853 " </tr>\n", 854 " <tr>\n", 855 " <th>0.017681</th>\n", 856 " <td>rcu_preempt</td>\n", 857 " <td>1</td>\n", 858 " <td>7</td>\n", 859 " <td>swapper/1</td>\n", 860 " <td>0</td>\n", 861 " <td>120</td>\n", 862 " <td>rcu_preempt</td>\n", 863 " <td>7</td>\n", 864 " <td>120</td>\n", 865 " <td>1</td>\n", 866 " </tr>\n", 867 " <tr>\n", 868 " <th>0.017830</th>\n", 869 " <td>ksdioirqd/mmc2</td>\n", 870 " <td>0</td>\n", 871 " <td>1364</td>\n", 872 " <td>ksoftirqd/0</td>\n", 873 " <td>3</td>\n", 874 " <td>120</td>\n", 875 " <td>ksdioirqd/mmc2</td>\n", 876 " <td>1364</td>\n", 877 " <td>98</td>\n", 878 " <td>1</td>\n", 879 " </tr>\n", 880 " <tr>\n", 881 " <th>0.017886</th>\n", 882 " <td>ksoftirqd/0</td>\n", 883 " <td>0</td>\n", 884 " <td>3</td>\n", 885 " <td>rcu_sched</td>\n", 886 " <td>8</td>\n", 887 " <td>120</td>\n", 888 " <td>ksoftirqd/0</td>\n", 889 " <td>3</td>\n", 890 " <td>120</td>\n", 891 " <td>1</td>\n", 892 " </tr>\n", 893 " <tr>\n", 894 " <th>0.017968</th>\n", 895 " <td><...></td>\n", 896 " <td>0</td>\n", 897 " <td>8</td>\n", 898 " <td>swapper/0</td>\n", 899 " <td>0</td>\n", 900 " <td>120</td>\n", 901 " <td>rcu_sched</td>\n", 902 " <td>8</td>\n", 903 " <td>120</td>\n", 904 " <td>1</td>\n", 905 " </tr>\n", 906 " <tr>\n", 907 " <th>...</th>\n", 908 " <td>...</td>\n", 909 " <td>...</td>\n", 910 " <td>...</td>\n", 911 " <td>...</td>\n", 912 " <td>...</td>\n", 913 " <td>...</td>\n", 914 " <td>...</td>\n", 915 " <td>...</td>\n", 916 " <td>...</td>\n", 917 " <td>...</td>\n", 918 " </tr>\n", 919 " <tr>\n", 920 " <th>35.301101</th>\n", 921 " <td>sudo</td>\n", 922 " <td>1</td>\n", 923 " <td>20990</td>\n", 924 " <td>ksdioirqd/mmc2</td>\n", 925 " <td>1364</td>\n", 926 " <td>98</td>\n", 927 " <td>sudo</td>\n", 928 " <td>20990</td>\n", 929 " <td>120</td>\n", 930 " <td>0</td>\n", 931 " </tr>\n", 932 " <tr>\n", 933 " <th>35.301191</th>\n", 934 " <td>ksdioirqd/mmc2</td>\n", 935 " <td>1</td>\n", 936 " <td>1364</td>\n", 937 " <td>sudo</td>\n", 938 " <td>20990</td>\n", 939 " <td>120</td>\n", 940 " <td>ksdioirqd/mmc2</td>\n", 941 " <td>1364</td>\n", 942 " <td>98</td>\n", 943 " <td>2</td>\n", 944 " </tr>\n", 945 " <tr>\n", 946 " <th>35.301333</th>\n", 947 " <td>sudo</td>\n", 948 " <td>1</td>\n", 949 " <td>20990</td>\n", 950 " <td>ksdioirqd/mmc2</td>\n", 951 " <td>1364</td>\n", 952 " <td>98</td>\n", 953 " <td>sudo</td>\n", 954 " <td>20990</td>\n", 955 " <td>120</td>\n", 956 " <td>1024</td>\n", 957 " </tr>\n", 958 " <tr>\n", 959 " <th>35.301381</th>\n", 960 " <td>ksdioirqd/mmc2</td>\n", 961 " <td>1</td>\n", 962 " <td>1364</td>\n", 963 " <td>sudo</td>\n", 964 " <td>20990</td>\n", 965 " <td>120</td>\n", 966 " <td>ksdioirqd/mmc2</td>\n", 967 " <td>1364</td>\n", 968 " <td>98</td>\n", 969 " <td>1</td>\n", 970 " </tr>\n", 971 " <tr>\n", 972 " <th>35.301421</th>\n", 973 " <td><idle></td>\n", 974 " <td>0</td>\n", 975 " <td>0</td>\n", 976 " <td>rcu_preempt</td>\n", 977 " <td>7</td>\n", 978 " <td>120</td>\n", 979 " <td>swapper/0</td>\n", 980 " <td>0</td>\n", 981 " <td>120</td>\n", 982 " <td>0</td>\n", 983 " </tr>\n", 984 " <tr>\n", 985 " <th>35.301516</th>\n", 986 " <td>rcu_preempt</td>\n", 987 " <td>0</td>\n", 988 " <td>7</td>\n", 989 " <td>swapper/0</td>\n", 990 " <td>0</td>\n", 991 " <td>120</td>\n", 992 " <td>rcu_preempt</td>\n", 993 " <td>7</td>\n", 994 " <td>120</td>\n", 995 " <td>1</td>\n", 996 " </tr>\n", 997 " <tr>\n", 998 " <th>35.301782</th>\n", 999 " <td>sudo</td>\n", 1000 " <td>1</td>\n", 1001 " <td>20990</td>\n", 1002 " <td>rsyslogd</td>\n", 1003 " <td>394</td>\n", 1004 " <td>120</td>\n", 1005 " <td>sudo</td>\n", 1006 " <td>20990</td>\n", 1007 " <td>120</td>\n", 1008 " <td>1024</td>\n", 1009 " </tr>\n", 1010 " <tr>\n", 1011 " <th>35.302128</th>\n", 1012 " <td>rsyslogd</td>\n", 1013 " <td>1</td>\n", 1014 " <td>394</td>\n", 1015 " <td>sudo</td>\n", 1016 " <td>20990</td>\n", 1017 " <td>120</td>\n", 1018 " <td>rsyslogd</td>\n", 1019 " <td>394</td>\n", 1020 " <td>120</td>\n", 1021 " <td>1</td>\n", 1022 " </tr>\n", 1023 " <tr>\n", 1024 " <th>35.302198</th>\n", 1025 " <td><idle></td>\n", 1026 " <td>0</td>\n", 1027 " <td>0</td>\n", 1028 " <td>rs:main Q:Reg</td>\n", 1029 " <td>380</td>\n", 1030 " <td>120</td>\n", 1031 " <td>swapper/0</td>\n", 1032 " <td>0</td>\n", 1033 " <td>120</td>\n", 1034 " <td>0</td>\n", 1035 " </tr>\n", 1036 " <tr>\n", 1037 " <th>35.302846</th>\n", 1038 " <td>rs:main</td>\n", 1039 " <td>0</td>\n", 1040 " <td>380</td>\n", 1041 " <td>swapper/0</td>\n", 1042 " <td>0</td>\n", 1043 " <td>120</td>\n", 1044 " <td>rs:main Q:Reg</td>\n", 1045 " <td>380</td>\n", 1046 " <td>120</td>\n", 1047 " <td>1</td>\n", 1048 " </tr>\n", 1049 " <tr>\n", 1050 " <th>35.303877</th>\n", 1051 " <td><idle></td>\n", 1052 " <td>3</td>\n", 1053 " <td>0</td>\n", 1054 " <td>sudo</td>\n", 1055 " <td>20991</td>\n", 1056 " <td>120</td>\n", 1057 " <td>swapper/3</td>\n", 1058 " <td>0</td>\n", 1059 " <td>120</td>\n", 1060 " <td>0</td>\n", 1061 " </tr>\n", 1062 " <tr>\n", 1063 " <th>35.303987</th>\n", 1064 " <td>sudo</td>\n", 1065 " <td>1</td>\n", 1066 " <td>20990</td>\n", 1067 " <td>swapper/1</td>\n", 1068 " <td>0</td>\n", 1069 " <td>120</td>\n", 1070 " <td>sudo</td>\n", 1071 " <td>20990</td>\n", 1072 " <td>120</td>\n", 1073 " <td>1</td>\n", 1074 " </tr>\n", 1075 " <tr>\n", 1076 " <th>35.305325</th>\n", 1077 " <td>sh</td>\n", 1078 " <td>3</td>\n", 1079 " <td>20991</td>\n", 1080 " <td>migration/3</td>\n", 1081 " <td>23</td>\n", 1082 " <td>0</td>\n", 1083 " <td>sudo</td>\n", 1084 " <td>20991</td>\n", 1085 " <td>120</td>\n", 1086 " <td>1024</td>\n", 1087 " </tr>\n", 1088 " <tr>\n", 1089 " <th>35.305428</th>\n", 1090 " <td>migration/3</td>\n", 1091 " <td>3</td>\n", 1092 " <td>23</td>\n", 1093 " <td>swapper/3</td>\n", 1094 " <td>0</td>\n", 1095 " <td>120</td>\n", 1096 " <td>migration/3</td>\n", 1097 " <td>23</td>\n", 1098 " <td>0</td>\n", 1099 " <td>1</td>\n", 1100 " </tr>\n", 1101 " <tr>\n", 1102 " <th>35.305455</th>\n", 1103 " <td><idle></td>\n", 1104 " <td>1</td>\n", 1105 " <td>0</td>\n", 1106 " <td>sudo</td>\n", 1107 " <td>20991</td>\n", 1108 " <td>120</td>\n", 1109 " <td>swapper/1</td>\n", 1110 " <td>0</td>\n", 1111 " <td>120</td>\n", 1112 " <td>0</td>\n", 1113 " </tr>\n", 1114 " <tr>\n", 1115 " <th>35.309369</th>\n", 1116 " <td><idle></td>\n", 1117 " <td>0</td>\n", 1118 " <td>0</td>\n", 1119 " <td>rcu_preempt</td>\n", 1120 " <td>7</td>\n", 1121 " <td>120</td>\n", 1122 " <td>swapper/0</td>\n", 1123 " <td>0</td>\n", 1124 " <td>120</td>\n", 1125 " <td>0</td>\n", 1126 " </tr>\n", 1127 " <tr>\n", 1128 " <th>35.309480</th>\n", 1129 " <td>rcu_preempt</td>\n", 1130 " <td>0</td>\n", 1131 " <td>7</td>\n", 1132 " <td>swapper/0</td>\n", 1133 " <td>0</td>\n", 1134 " <td>120</td>\n", 1135 " <td>rcu_preempt</td>\n", 1136 " <td>7</td>\n", 1137 " <td>120</td>\n", 1138 " <td>1</td>\n", 1139 " </tr>\n", 1140 " <tr>\n", 1141 " <th>35.311031</th>\n", 1142 " <td>sh</td>\n", 1143 " <td>1</td>\n", 1144 " <td>20991</td>\n", 1145 " <td>sudo</td>\n", 1146 " <td>20990</td>\n", 1147 " <td>120</td>\n", 1148 " <td>sh</td>\n", 1149 " <td>20991</td>\n", 1150 " <td>120</td>\n", 1151 " <td>1</td>\n", 1152 " </tr>\n", 1153 " <tr>\n", 1154 " <th>35.311063</th>\n", 1155 " <td><idle></td>\n", 1156 " <td>3</td>\n", 1157 " <td>0</td>\n", 1158 " <td>sh</td>\n", 1159 " <td>20992</td>\n", 1160 " <td>120</td>\n", 1161 " <td>swapper/3</td>\n", 1162 " <td>0</td>\n", 1163 " <td>120</td>\n", 1164 " <td>0</td>\n", 1165 " </tr>\n", 1166 " <tr>\n", 1167 " <th>35.311164</th>\n", 1168 " <td>sudo</td>\n", 1169 " <td>1</td>\n", 1170 " <td>20990</td>\n", 1171 " <td>swapper/1</td>\n", 1172 " <td>0</td>\n", 1173 " <td>120</td>\n", 1174 " <td>sudo</td>\n", 1175 " <td>20990</td>\n", 1176 " <td>120</td>\n", 1177 " <td>1</td>\n", 1178 " </tr>\n", 1179 " <tr>\n", 1180 " <th>35.311548</th>\n", 1181 " <td>trace-cmd</td>\n", 1182 " <td>3</td>\n", 1183 " <td>20992</td>\n", 1184 " <td>migration/3</td>\n", 1185 " <td>23</td>\n", 1186 " <td>0</td>\n", 1187 " <td>sh</td>\n", 1188 " <td>20992</td>\n", 1189 " <td>120</td>\n", 1190 " <td>1024</td>\n", 1191 " </tr>\n", 1192 " <tr>\n", 1193 " <th>35.311645</th>\n", 1194 " <td>migration/3</td>\n", 1195 " <td>3</td>\n", 1196 " <td>23</td>\n", 1197 " <td>swapper/3</td>\n", 1198 " <td>0</td>\n", 1199 " <td>120</td>\n", 1200 " <td>migration/3</td>\n", 1201 " <td>23</td>\n", 1202 " <td>0</td>\n", 1203 " <td>1</td>\n", 1204 " </tr>\n", 1205 " <tr>\n", 1206 " <th>35.311839</th>\n", 1207 " <td><idle></td>\n", 1208 " <td>1</td>\n", 1209 " <td>0</td>\n", 1210 " <td>sh</td>\n", 1211 " <td>20992</td>\n", 1212 " <td>120</td>\n", 1213 " <td>swapper/1</td>\n", 1214 " <td>0</td>\n", 1215 " <td>120</td>\n", 1216 " <td>0</td>\n", 1217 " </tr>\n", 1218 " <tr>\n", 1219 " <th>35.313244</th>\n", 1220 " <td>trace-cmd</td>\n", 1221 " <td>1</td>\n", 1222 " <td>20992</td>\n", 1223 " <td>ksdioirqd/mmc2</td>\n", 1224 " <td>1364</td>\n", 1225 " <td>98</td>\n", 1226 " <td>trace-cmd</td>\n", 1227 " <td>20992</td>\n", 1228 " <td>120</td>\n", 1229 " <td>1024</td>\n", 1230 " </tr>\n", 1231 " <tr>\n", 1232 " <th>35.313342</th>\n", 1233 " <td>ksdioirqd/mmc2</td>\n", 1234 " <td>1</td>\n", 1235 " <td>1364</td>\n", 1236 " <td>ksoftirqd/1</td>\n", 1237 " <td>14</td>\n", 1238 " <td>120</td>\n", 1239 " <td>ksdioirqd/mmc2</td>\n", 1240 " <td>1364</td>\n", 1241 " <td>98</td>\n", 1242 " <td>2</td>\n", 1243 " </tr>\n", 1244 " <tr>\n", 1245 " <th>35.313390</th>\n", 1246 " <td>ksoftirqd/1</td>\n", 1247 " <td>1</td>\n", 1248 " <td>14</td>\n", 1249 " <td>ksdioirqd/mmc2</td>\n", 1250 " <td>1364</td>\n", 1251 " <td>98</td>\n", 1252 " <td>ksoftirqd/1</td>\n", 1253 " <td>14</td>\n", 1254 " <td>120</td>\n", 1255 " <td>1024</td>\n", 1256 " </tr>\n", 1257 " <tr>\n", 1258 " <th>35.313429</th>\n", 1259 " <td><idle></td>\n", 1260 " <td>0</td>\n", 1261 " <td>0</td>\n", 1262 " <td>rcu_preempt</td>\n", 1263 " <td>7</td>\n", 1264 " <td>120</td>\n", 1265 " <td>swapper/0</td>\n", 1266 " <td>0</td>\n", 1267 " <td>120</td>\n", 1268 " <td>0</td>\n", 1269 " </tr>\n", 1270 " <tr>\n", 1271 " <th>35.313437</th>\n", 1272 " <td>ksdioirqd/mmc2</td>\n", 1273 " <td>1</td>\n", 1274 " <td>1364</td>\n", 1275 " <td>ksoftirqd/1</td>\n", 1276 " <td>14</td>\n", 1277 " <td>120</td>\n", 1278 " <td>ksdioirqd/mmc2</td>\n", 1279 " <td>1364</td>\n", 1280 " <td>98</td>\n", 1281 " <td>1</td>\n", 1282 " </tr>\n", 1283 " <tr>\n", 1284 " <th>35.313485</th>\n", 1285 " <td>ksoftirqd/1</td>\n", 1286 " <td>1</td>\n", 1287 " <td>14</td>\n", 1288 " <td>trace-cmd</td>\n", 1289 " <td>20992</td>\n", 1290 " <td>120</td>\n", 1291 " <td>ksoftirqd/1</td>\n", 1292 " <td>14</td>\n", 1293 " <td>120</td>\n", 1294 " <td>1</td>\n", 1295 " </tr>\n", 1296 " <tr>\n", 1297 " <th>35.313536</th>\n", 1298 " <td>rcu_preempt</td>\n", 1299 " <td>0</td>\n", 1300 " <td>7</td>\n", 1301 " <td>swapper/0</td>\n", 1302 " <td>0</td>\n", 1303 " <td>120</td>\n", 1304 " <td>rcu_preempt</td>\n", 1305 " <td>7</td>\n", 1306 " <td>120</td>\n", 1307 " <td>1</td>\n", 1308 " </tr>\n", 1309 " </tbody>\n", 1310 "</table>\n", 1311 "<p>130884 rows 10 columns</p>\n", 1312 "</div>" 1313 ], 1314 "text/plain": [ 1315 " __comm __cpu __pid next_comm next_pid next_prio \\\n", 1316 "Time \n", 1317 "0.000272 <...> 1 20278 swapper/1 0 120 \n", 1318 "0.000348 <idle> 0 0 sh 20277 120 \n", 1319 "0.001321 <...> 0 20277 sudo 20276 120 \n", 1320 "0.001357 <idle> 1 0 rcu_preempt 7 120 \n", 1321 "0.001458 rcu_preempt 1 7 swapper/1 0 120 \n", 1322 "0.005202 <...> 0 20276 ksdioirqd/mmc2 1364 98 \n", 1323 "0.005349 ksdioirqd/mmc2 0 1364 rsyslogd 394 120 \n", 1324 "0.005464 <idle> 1 0 ksoftirqd/1 14 120 \n", 1325 "0.005528 ksoftirqd/1 1 14 rcu_preempt 7 120 \n", 1326 "0.005612 rcu_preempt 1 7 swapper/1 0 120 \n", 1327 "0.005616 rsyslogd 0 394 rs:main Q:Reg 380 120 \n", 1328 "0.006245 rs:main 0 380 sudo 20276 120 \n", 1329 "0.007334 <...> 0 20276 rcu_sched 8 120 \n", 1330 "0.007425 <idle> 1 0 bash 19394 120 \n", 1331 "0.007450 <...> 0 8 swapper/0 0 120 \n", 1332 "0.008416 bash 1 19394 kworker/1:2 19472 120 \n", 1333 "0.008562 <...> 1 19472 sshd 15461 120 \n", 1334 "0.009328 sshd 1 15461 rcu_preempt 7 120 \n", 1335 "0.009437 rcu_preempt 1 7 swapper/1 0 120 \n", 1336 "0.009632 <idle> 0 0 rcu_sched 8 120 \n", 1337 "0.009731 <...> 0 8 swapper/0 0 120 \n", 1338 "0.013650 <idle> 1 0 ksoftirqd/1 14 120 \n", 1339 "0.013727 ksoftirqd/1 1 14 rcu_preempt 7 120 \n", 1340 "0.013839 rcu_preempt 1 7 swapper/1 0 120 \n", 1341 "0.017585 <idle> 0 0 ksdioirqd/mmc2 1364 98 \n", 1342 "0.017587 <idle> 1 0 rcu_preempt 7 120 \n", 1343 "0.017681 rcu_preempt 1 7 swapper/1 0 120 \n", 1344 "0.017830 ksdioirqd/mmc2 0 1364 ksoftirqd/0 3 120 \n", 1345 "0.017886 ksoftirqd/0 0 3 rcu_sched 8 120 \n", 1346 "0.017968 <...> 0 8 swapper/0 0 120 \n", 1347 "... ... ... ... ... ... ... \n", 1348 "35.301101 sudo 1 20990 ksdioirqd/mmc2 1364 98 \n", 1349 "35.301191 ksdioirqd/mmc2 1 1364 sudo 20990 120 \n", 1350 "35.301333 sudo 1 20990 ksdioirqd/mmc2 1364 98 \n", 1351 "35.301381 ksdioirqd/mmc2 1 1364 sudo 20990 120 \n", 1352 "35.301421 <idle> 0 0 rcu_preempt 7 120 \n", 1353 "35.301516 rcu_preempt 0 7 swapper/0 0 120 \n", 1354 "35.301782 sudo 1 20990 rsyslogd 394 120 \n", 1355 "35.302128 rsyslogd 1 394 sudo 20990 120 \n", 1356 "35.302198 <idle> 0 0 rs:main Q:Reg 380 120 \n", 1357 "35.302846 rs:main 0 380 swapper/0 0 120 \n", 1358 "35.303877 <idle> 3 0 sudo 20991 120 \n", 1359 "35.303987 sudo 1 20990 swapper/1 0 120 \n", 1360 "35.305325 sh 3 20991 migration/3 23 0 \n", 1361 "35.305428 migration/3 3 23 swapper/3 0 120 \n", 1362 "35.305455 <idle> 1 0 sudo 20991 120 \n", 1363 "35.309369 <idle> 0 0 rcu_preempt 7 120 \n", 1364 "35.309480 rcu_preempt 0 7 swapper/0 0 120 \n", 1365 "35.311031 sh 1 20991 sudo 20990 120 \n", 1366 "35.311063 <idle> 3 0 sh 20992 120 \n", 1367 "35.311164 sudo 1 20990 swapper/1 0 120 \n", 1368 "35.311548 trace-cmd 3 20992 migration/3 23 0 \n", 1369 "35.311645 migration/3 3 23 swapper/3 0 120 \n", 1370 "35.311839 <idle> 1 0 sh 20992 120 \n", 1371 "35.313244 trace-cmd 1 20992 ksdioirqd/mmc2 1364 98 \n", 1372 "35.313342 ksdioirqd/mmc2 1 1364 ksoftirqd/1 14 120 \n", 1373 "35.313390 ksoftirqd/1 1 14 ksdioirqd/mmc2 1364 98 \n", 1374 "35.313429 <idle> 0 0 rcu_preempt 7 120 \n", 1375 "35.313437 ksdioirqd/mmc2 1 1364 ksoftirqd/1 14 120 \n", 1376 "35.313485 ksoftirqd/1 1 14 trace-cmd 20992 120 \n", 1377 "35.313536 rcu_preempt 0 7 swapper/0 0 120 \n", 1378 "\n", 1379 " prev_comm prev_pid prev_prio prev_state \n", 1380 "Time \n", 1381 "0.000272 trace-cmd 20278 120 64 \n", 1382 "0.000348 swapper/0 0 120 0 \n", 1383 "0.001321 sh 20277 120 64 \n", 1384 "0.001357 swapper/1 0 120 0 \n", 1385 "0.001458 rcu_preempt 7 120 1 \n", 1386 "0.005202 sudo 20276 120 1024 \n", 1387 "0.005349 ksdioirqd/mmc2 1364 98 1 \n", 1388 "0.005464 swapper/1 0 120 0 \n", 1389 "0.005528 ksoftirqd/1 14 120 1 \n", 1390 "0.005612 rcu_preempt 7 120 1 \n", 1391 "0.005616 rsyslogd 394 120 1 \n", 1392 "0.006245 rs:main Q:Reg 380 120 1 \n", 1393 "0.007334 sudo 20276 120 64 \n", 1394 "0.007425 swapper/1 0 120 0 \n", 1395 "0.007450 rcu_sched 8 120 1 \n", 1396 "0.008416 bash 19394 120 1 \n", 1397 "0.008562 kworker/1:2 19472 120 1 \n", 1398 "0.009328 sshd 15461 120 1 \n", 1399 "0.009437 rcu_preempt 7 120 1 \n", 1400 "0.009632 swapper/0 0 120 0 \n", 1401 "0.009731 rcu_sched 8 120 1 \n", 1402 "0.013650 swapper/1 0 120 0 \n", 1403 "0.013727 ksoftirqd/1 14 120 1 \n", 1404 "0.013839 rcu_preempt 7 120 1 \n", 1405 "0.017585 swapper/0 0 120 0 \n", 1406 "0.017587 swapper/1 0 120 0 \n", 1407 "0.017681 rcu_preempt 7 120 1 \n", 1408 "0.017830 ksdioirqd/mmc2 1364 98 1 \n", 1409 "0.017886 ksoftirqd/0 3 120 1 \n", 1410 "0.017968 rcu_sched 8 120 1 \n", 1411 "... ... ... ... ... \n", 1412 "35.301101 sudo 20990 120 0 \n", 1413 "35.301191 ksdioirqd/mmc2 1364 98 2 \n", 1414 "35.301333 sudo 20990 120 1024 \n", 1415 "35.301381 ksdioirqd/mmc2 1364 98 1 \n", 1416 "35.301421 swapper/0 0 120 0 \n", 1417 "35.301516 rcu_preempt 7 120 1 \n", 1418 "35.301782 sudo 20990 120 1024 \n", 1419 "35.302128 rsyslogd 394 120 1 \n", 1420 "35.302198 swapper/0 0 120 0 \n", 1421 "35.302846 rs:main Q:Reg 380 120 1 \n", 1422 "35.303877 swapper/3 0 120 0 \n", 1423 "35.303987 sudo 20990 120 1 \n", 1424 "35.305325 sudo 20991 120 1024 \n", 1425 "35.305428 migration/3 23 0 1 \n", 1426 "35.305455 swapper/1 0 120 0 \n", 1427 "35.309369 swapper/0 0 120 0 \n", 1428 "35.309480 rcu_preempt 7 120 1 \n", 1429 "35.311031 sh 20991 120 1 \n", 1430 "35.311063 swapper/3 0 120 0 \n", 1431 "35.311164 sudo 20990 120 1 \n", 1432 "35.311548 sh 20992 120 1024 \n", 1433 "35.311645 migration/3 23 0 1 \n", 1434 "35.311839 swapper/1 0 120 0 \n", 1435 "35.313244 trace-cmd 20992 120 1024 \n", 1436 "35.313342 ksdioirqd/mmc2 1364 98 2 \n", 1437 "35.313390 ksoftirqd/1 14 120 1024 \n", 1438 "35.313429 swapper/0 0 120 0 \n", 1439 "35.313437 ksdioirqd/mmc2 1364 98 1 \n", 1440 "35.313485 ksoftirqd/1 14 120 1 \n", 1441 "35.313536 rcu_preempt 7 120 1 \n", 1442 "\n", 1443 "[130884 rows x 10 columns]" 1444 ] 1445 }, 1446 "execution_count": 325, 1447 "metadata": {}, 1448 "output_type": "execute_result" 1449 } 1450 ], 1451 "source": [ 1452 "# Let's get a reference to the PANDAs DataFrame corresponding to the\n", 1453 "# \"sched_switch\" events\n", 1454 "logging.info(\"The 'sched_switch' events are collected into this DataFrame:\")\n", 1455 "df = ftrace.sched_switch.data_frame\n", 1456 "df#.head(2)" 1457 ] 1458 }, 1459 { 1460 "cell_type": "markdown", 1461 "metadata": {}, 1462 "source": [ 1463 "**NOTE:** We can use **head()** to report only a limited number of events" 1464 ] 1465 }, 1466 { 1467 "cell_type": "code", 1468 "execution_count": 326, 1469 "metadata": { 1470 "collapsed": false 1471 }, 1472 "outputs": [ 1473 { 1474 "name": "stderr", 1475 "output_type": "stream", 1476 "text": [ 1477 "10:51:53 INFO : This is the DataFrame for 'cpu_frequency' events:\n" 1478 ] 1479 }, 1480 { 1481 "data": { 1482 "text/html": [ 1483 "<div>\n", 1484 "<table border=\"1\" class=\"dataframe\">\n", 1485 " <thead>\n", 1486 " <tr style=\"text-align: right;\">\n", 1487 " <th></th>\n", 1488 " <th>__comm</th>\n", 1489 " <th>__cpu</th>\n", 1490 " <th>__pid</th>\n", 1491 " <th>cpu</th>\n", 1492 " <th>frequency</th>\n", 1493 " </tr>\n", 1494 " <tr>\n", 1495 " <th>Time</th>\n", 1496 " <th></th>\n", 1497 " <th></th>\n", 1498 " <th></th>\n", 1499 " <th></th>\n", 1500 " <th></th>\n", 1501 " </tr>\n", 1502 " </thead>\n", 1503 " <tbody>\n", 1504 " <tr>\n", 1505 " <th>0.661132</th>\n", 1506 " <td>kschedfreq:2</td>\n", 1507 " <td>2</td>\n", 1508 " <td>119</td>\n", 1509 " <td>2</td>\n", 1510 " <td>1807000</td>\n", 1511 " </tr>\n", 1512 " <tr>\n", 1513 " <th>0.661136</th>\n", 1514 " <td>kschedfreq:2</td>\n", 1515 " <td>2</td>\n", 1516 " <td>119</td>\n", 1517 " <td>3</td>\n", 1518 " <td>1807000</td>\n", 1519 " </tr>\n", 1520 " </tbody>\n", 1521 "</table>\n", 1522 "</div>" 1523 ], 1524 "text/plain": [ 1525 " __comm __cpu __pid cpu frequency\n", 1526 "Time \n", 1527 "0.661132 kschedfreq:2 2 119 2 1807000\n", 1528 "0.661136 kschedfreq:2 2 119 3 1807000" 1529 ] 1530 }, 1531 "execution_count": 326, 1532 "metadata": {}, 1533 "output_type": "execute_result" 1534 } 1535 ], 1536 "source": [ 1537 "# All events parsed in the trace have an associated DataFrame\n", 1538 "logging.info(\"This is the DataFrame for 'cpu_frequency' events:\")\n", 1539 "df = ftrace.cpu_frequency.data_frame\n", 1540 "df.head(2)" 1541 ] 1542 }, 1543 { 1544 "cell_type": "markdown", 1545 "metadata": {}, 1546 "source": [ 1547 "# Common DataFrame Operations" 1548 ] 1549 }, 1550 { 1551 "cell_type": "markdown", 1552 "metadata": {}, 1553 "source": [ 1554 "On DataFrames is possible to execute a number of different operations.\n", 1555 "Most commonly we are interested in:\n", 1556 "- focus only on certain columns\n", 1557 "- filtering events based on different conditions\n", 1558 "- joining two or more DataFrames\n", 1559 "- resuming statistical data of a DataFrame" 1560 ] 1561 }, 1562 { 1563 "cell_type": "markdown", 1564 "metadata": {}, 1565 "source": [ 1566 "## Columns selection" 1567 ] 1568 }, 1569 { 1570 "cell_type": "code", 1571 "execution_count": 330, 1572 "metadata": { 1573 "collapsed": false 1574 }, 1575 "outputs": [ 1576 { 1577 "data": { 1578 "text/html": [ 1579 "<div>\n", 1580 "<table border=\"1\" class=\"dataframe\">\n", 1581 " <thead>\n", 1582 " <tr style=\"text-align: right;\">\n", 1583 " <th></th>\n", 1584 " <th>__comm</th>\n", 1585 " <th>__cpu</th>\n", 1586 " <th>__pid</th>\n", 1587 " <th>next_comm</th>\n", 1588 " <th>next_pid</th>\n", 1589 " <th>next_prio</th>\n", 1590 " <th>prev_comm</th>\n", 1591 " <th>prev_pid</th>\n", 1592 " <th>prev_prio</th>\n", 1593 " <th>prev_state</th>\n", 1594 " </tr>\n", 1595 " <tr>\n", 1596 " <th>Time</th>\n", 1597 " <th></th>\n", 1598 " <th></th>\n", 1599 " <th></th>\n", 1600 " <th></th>\n", 1601 " <th></th>\n", 1602 " <th></th>\n", 1603 " <th></th>\n", 1604 " <th></th>\n", 1605 " <th></th>\n", 1606 " <th></th>\n", 1607 " </tr>\n", 1608 " </thead>\n", 1609 " <tbody>\n", 1610 " <tr>\n", 1611 " <th>0.000272</th>\n", 1612 " <td><...></td>\n", 1613 " <td>1</td>\n", 1614 " <td>20278</td>\n", 1615 " <td>swapper/1</td>\n", 1616 " <td>0</td>\n", 1617 " <td>120</td>\n", 1618 " <td>trace-cmd</td>\n", 1619 " <td>20278</td>\n", 1620 " <td>120</td>\n", 1621 " <td>64</td>\n", 1622 " </tr>\n", 1623 " <tr>\n", 1624 " <th>0.000348</th>\n", 1625 " <td><idle></td>\n", 1626 " <td>0</td>\n", 1627 " <td>0</td>\n", 1628 " <td>sh</td>\n", 1629 " <td>20277</td>\n", 1630 " <td>120</td>\n", 1631 " <td>swapper/0</td>\n", 1632 " <td>0</td>\n", 1633 " <td>120</td>\n", 1634 " <td>0</td>\n", 1635 " </tr>\n", 1636 " </tbody>\n", 1637 "</table>\n", 1638 "</div>" 1639 ], 1640 "text/plain": [ 1641 " __comm __cpu __pid next_comm next_pid next_prio prev_comm \\\n", 1642 "Time \n", 1643 "0.000272 <...> 1 20278 swapper/1 0 120 trace-cmd \n", 1644 "0.000348 <idle> 0 0 sh 20277 120 swapper/0 \n", 1645 "\n", 1646 " prev_pid prev_prio prev_state \n", 1647 "Time \n", 1648 "0.000272 20278 120 64 \n", 1649 "0.000348 0 120 0 " 1650 ] 1651 }, 1652 "execution_count": 330, 1653 "metadata": {}, 1654 "output_type": "execute_result" 1655 } 1656 ], 1657 "source": [ 1658 "df = ftrace.sched_switch.data_frame\n", 1659 "df.head(2)" 1660 ] 1661 }, 1662 { 1663 "cell_type": "code", 1664 "execution_count": 331, 1665 "metadata": { 1666 "collapsed": false 1667 }, 1668 "outputs": [ 1669 { 1670 "data": { 1671 "text/html": [ 1672 "<div>\n", 1673 "<table border=\"1\" class=\"dataframe\">\n", 1674 " <thead>\n", 1675 " <tr style=\"text-align: right;\">\n", 1676 " <th></th>\n", 1677 " <th>next_comm</th>\n", 1678 " <th>next_pid</th>\n", 1679 " <th>next_prio</th>\n", 1680 " <th>prev_comm</th>\n", 1681 " <th>prev_pid</th>\n", 1682 " <th>prev_prio</th>\n", 1683 " <th>prev_state</th>\n", 1684 " </tr>\n", 1685 " <tr>\n", 1686 " <th>Time</th>\n", 1687 " <th></th>\n", 1688 " <th></th>\n", 1689 " <th></th>\n", 1690 " <th></th>\n", 1691 " <th></th>\n", 1692 " <th></th>\n", 1693 " <th></th>\n", 1694 " </tr>\n", 1695 " </thead>\n", 1696 " <tbody>\n", 1697 " <tr>\n", 1698 " <th>0.000272</th>\n", 1699 " <td>swapper/1</td>\n", 1700 " <td>0</td>\n", 1701 " <td>120</td>\n", 1702 " <td>trace-cmd</td>\n", 1703 " <td>20278</td>\n", 1704 " <td>120</td>\n", 1705 " <td>64</td>\n", 1706 " </tr>\n", 1707 " <tr>\n", 1708 " <th>0.000348</th>\n", 1709 " <td>sh</td>\n", 1710 " <td>20277</td>\n", 1711 " <td>120</td>\n", 1712 " <td>swapper/0</td>\n", 1713 " <td>0</td>\n", 1714 " <td>120</td>\n", 1715 " <td>0</td>\n", 1716 " </tr>\n", 1717 " </tbody>\n", 1718 "</table>\n", 1719 "</div>" 1720 ], 1721 "text/plain": [ 1722 " next_comm next_pid next_prio prev_comm prev_pid prev_prio \\\n", 1723 "Time \n", 1724 "0.000272 swapper/1 0 120 trace-cmd 20278 120 \n", 1725 "0.000348 sh 20277 120 swapper/0 0 120 \n", 1726 "\n", 1727 " prev_state \n", 1728 "Time \n", 1729 "0.000272 64 \n", 1730 "0.000348 0 " 1731 ] 1732 }, 1733 "execution_count": 331, 1734 "metadata": {}, 1735 "output_type": "execute_result" 1736 } 1737 ], 1738 "source": [ 1739 "# The \"ix\" operator allow to select ranges of [rows:columns]\n", 1740 "df = df.ix[:,'next_comm':'prev_state']\n", 1741 "df.head(2)" 1742 ] 1743 }, 1744 { 1745 "cell_type": "code", 1746 "execution_count": 332, 1747 "metadata": { 1748 "collapsed": false, 1749 "scrolled": true 1750 }, 1751 "outputs": [ 1752 { 1753 "name": "stderr", 1754 "output_type": "stream", 1755 "text": [ 1756 "10:52:30 INFO : Found 130884 sched_switch events: \n" 1757 ] 1758 }, 1759 { 1760 "data": { 1761 "text/html": [ 1762 "<div>\n", 1763 "<table border=\"1\" class=\"dataframe\">\n", 1764 " <thead>\n", 1765 " <tr style=\"text-align: right;\">\n", 1766 " <th></th>\n", 1767 " <th>next_pid</th>\n", 1768 " <th>next_comm</th>\n", 1769 " </tr>\n", 1770 " <tr>\n", 1771 " <th>Time</th>\n", 1772 " <th></th>\n", 1773 " <th></th>\n", 1774 " </tr>\n", 1775 " </thead>\n", 1776 " <tbody>\n", 1777 " <tr>\n", 1778 " <th>0.000272</th>\n", 1779 " <td>0</td>\n", 1780 " <td>swapper/1</td>\n", 1781 " </tr>\n", 1782 " <tr>\n", 1783 " <th>0.000348</th>\n", 1784 " <td>20277</td>\n", 1785 " <td>sh</td>\n", 1786 " </tr>\n", 1787 " </tbody>\n", 1788 "</table>\n", 1789 "</div>" 1790 ], 1791 "text/plain": [ 1792 " next_pid next_comm\n", 1793 "Time \n", 1794 "0.000272 0 swapper/1\n", 1795 "0.000348 20277 sh" 1796 ] 1797 }, 1798 "execution_count": 332, 1799 "metadata": {}, 1800 "output_type": "execute_result" 1801 } 1802 ], 1803 "source": [ 1804 "# We can also filter by listing the columns we are interested into\n", 1805 "tasks = df[['next_pid', 'next_comm']]\n", 1806 "logging.info(\"Found %d sched_switch events: \", len(tasks))\n", 1807 "tasks.head(2)" 1808 ] 1809 }, 1810 { 1811 "cell_type": "code", 1812 "execution_count": 333, 1813 "metadata": { 1814 "collapsed": false, 1815 "scrolled": true 1816 }, 1817 "outputs": [ 1818 { 1819 "name": "stderr", 1820 "output_type": "stream", 1821 "text": [ 1822 "10:52:33 INFO : The trace has 855 unique PIDs\n" 1823 ] 1824 }, 1825 { 1826 "data": { 1827 "text/plain": [ 1828 "{0: 'swapper/2',\n", 1829 " 1: 'init',\n", 1830 " 2: 'kthreadd',\n", 1831 " 3: 'ksoftirqd/0',\n", 1832 " 6: 'kworker/u8:0',\n", 1833 " 7: 'rcu_preempt',\n", 1834 " 8: 'rcu_sched',\n", 1835 " 10: 'migration/0',\n", 1836 " 11: 'watchdog/0',\n", 1837 " 12: 'watchdog/1',\n", 1838 " 13: 'migration/1',\n", 1839 " 14: 'ksoftirqd/1',\n", 1840 " 17: 'watchdog/2',\n", 1841 " 18: 'migration/2',\n", 1842 " 19: 'ksoftirqd/2',\n", 1843 " 22: 'watchdog/3',\n", 1844 " 23: 'migration/3',\n", 1845 " 24: 'ksoftirqd/3',\n", 1846 " 31: 'khungtaskd',\n", 1847 " 66: 'fsnotify_mark',\n", 1848 " 83: 'spi32766',\n", 1849 " 88: 'kworker/1:1',\n", 1850 " 89: 'kworker/0:1',\n", 1851 " 110: 'kworker/u8:3',\n", 1852 " 114: 'kworker/0:2',\n", 1853 " 118: 'kschedfreq:0',\n", 1854 " 119: 'kschedfreq:2',\n", 1855 " 122: 'mmcqd/0',\n", 1856 " 123: 'mmcqd/0boot0',\n", 1857 " 124: 'mmcqd/0boot1',\n", 1858 " 125: 'mmcqd/0rpmb',\n", 1859 " 128: 'pvr_defer_free',\n", 1860 " 129: 'pvr_device_wdg',\n", 1861 " 134: 'kworker/3:2',\n", 1862 " 136: 'kworker/0:1H',\n", 1863 " 138: 'kworker/1:1H',\n", 1864 " 166: 'udevd',\n", 1865 " 209: 'jbd2/mmcblk0p1-',\n", 1866 " 239: 'loop0',\n", 1867 " 260: 'jbd2/dm-1-8',\n", 1868 " 264: 'kworker/2:1H',\n", 1869 " 286: 'kworker/3:1H',\n", 1870 " 369: 'rsyslogd',\n", 1871 " 380: 'rs:main Q:Reg',\n", 1872 " 394: 'rsyslogd',\n", 1873 " 395: 'rsyslogd',\n", 1874 " 398: 'dbus-daemon',\n", 1875 " 489: 'wpa_supplicant',\n", 1876 " 492: 'daisydog',\n", 1877 " 606: 'tcsd',\n", 1878 " 615: 'chapsd',\n", 1879 " 648: 'tcsd',\n", 1880 " 649: 'powerd',\n", 1881 " 650: 'permission_brok',\n", 1882 " 656: 'inotify_reader',\n", 1883 " 657: 'cryptohomed',\n", 1884 " 658: 'tcsd',\n", 1885 " 679: 'shill',\n", 1886 " 843: 'dhcpcd',\n", 1887 " 1150: 'mtpd',\n", 1888 " 1179: 'metrics_daemon',\n", 1889 " 1184: 'mtpd',\n", 1890 " 1190: 'cras',\n", 1891 " 1197: 'bluetoothd',\n", 1892 " 1232: 'disks',\n", 1893 " 1252: 'MountThread',\n", 1894 " 1261: 'sshd',\n", 1895 " 1264: 'update_engine',\n", 1896 " 1364: 'ksdioirqd/mmc2',\n", 1897 " 2108: 'warn_collector',\n", 1898 " 2252: 'netfilter-queue',\n", 1899 " 2266: 'tlsdated',\n", 1900 " 2267: 'logger',\n", 1901 " 2298: 'kworker/u9:4',\n", 1902 " 15461: 'sshd',\n", 1903 " 19394: 'bash',\n", 1904 " 19469: 'kworker/2:3',\n", 1905 " 19472: 'kworker/1:2',\n", 1906 " 19861: 'kworker/u8:4',\n", 1907 " 19897: 'session_manager',\n", 1908 " 19918: 'debugd',\n", 1909 " 19933: 'chrome',\n", 1910 " 19936: 'sandbox_ipc_thr',\n", 1911 " 19938: 'chrome',\n", 1912 " 19944: 'nacl_helper_boo',\n", 1913 " 19946: 'nacl_helper_non',\n", 1914 " 19949: 'chrome',\n", 1915 " 19950: 'chrome',\n", 1916 " 19963: 'D-Bus thread',\n", 1917 " 19964: 'WorkerPool/1996',\n", 1918 " 19965: 'WorkerPool/1996',\n", 1919 " 19966: 'CrShutdownDetec',\n", 1920 " 19967: 'BrowserBlocking',\n", 1921 " 19968: 'Chrome_DBThread',\n", 1922 " 19969: 'Chrome_FileThre',\n", 1923 " 19970: 'Chrome_FileUser',\n", 1924 " 19971: 'Chrome_ProcessL',\n", 1925 " 19972: 'Chrome_CacheThr',\n", 1926 " 19973: 'Chrome_IOThread',\n", 1927 " 19974: 'IndexedDB',\n", 1928 " 19975: 'CompositorTileW',\n", 1929 " 19976: 'AudioThread',\n", 1930 " 19979: 'BrowserWatchdog',\n", 1931 " 19987: 'handle-watcher-',\n", 1932 " 19988: 'gpu-process_cra',\n", 1933 " 19990: 'chrome',\n", 1934 " 19994: 'CachePoolWorker',\n", 1935 " 19995: 'BrowserBlocking',\n", 1936 " 19997: 'evdev',\n", 1937 " 20013: 'inotify_reader',\n", 1938 " 20014: 'Chrome_HistoryT',\n", 1939 " 20015: 'BrowserBlocking',\n", 1940 " 20016: 'renderer_crash_',\n", 1941 " 20017: 'chrome',\n", 1942 " 20019: 'chrome',\n", 1943 " 20020: 'Watchdog',\n", 1944 " 20022: 'Chrome_ChildIOT',\n", 1945 " 20023: 'Compositor',\n", 1946 " 20024: 'CompositorTileW',\n", 1947 " 20025: 'CompositorTileW',\n", 1948 " 20026: 'chrome',\n", 1949 " 20027: 'UsbEventHandler',\n", 1950 " 20030: 'handle-watcher-',\n", 1951 " 20032: 'Chrome_ChildIOT',\n", 1952 " 20034: 'DrmThread',\n", 1953 " 20035: 'handle-watcher-',\n", 1954 " 20041: 'HTMLParserThrea',\n", 1955 " 20043: 'WorkerPool/9',\n", 1956 " 20046: 'WorkerPool/12',\n", 1957 " 20052: 'chrome',\n", 1958 " 20054: 'Chrome_ChildIOT',\n", 1959 " 20055: 'Compositor',\n", 1960 " 20056: 'CompositorTileW',\n", 1961 " 20057: 'CompositorTileW',\n", 1962 " 20058: 'handle-watcher-',\n", 1963 " 20060: 'HTMLParserThrea',\n", 1964 " 20062: 'WorkerPool/9',\n", 1965 " 20064: 'WorkerPool/11',\n", 1966 " 20066: 'WorkerPool/12',\n", 1967 " 20067: 'WorkerPool/2006',\n", 1968 " 20088: 'kworker/u9:0',\n", 1969 " 20138: 'watch',\n", 1970 " 20276: 'sudo',\n", 1971 " 20277: 'sh',\n", 1972 " 20282: 'sudo',\n", 1973 " 20283: 'sh',\n", 1974 " 20284: 'watch',\n", 1975 " 20285: 'sh',\n", 1976 " 20286: 'sh',\n", 1977 " 20287: 'sudo',\n", 1978 " 20288: 'sh',\n", 1979 " 20289: 'shutils',\n", 1980 " 20290: 'cat',\n", 1981 " 20291: 'watch',\n", 1982 " 20292: 'sh',\n", 1983 " 20293: 'sh',\n", 1984 " 20294: 'sshd',\n", 1985 " 20295: 'sshd',\n", 1986 " 20296: 'sshd',\n", 1987 " 20297: 'sshd',\n", 1988 " 20298: 'sshd',\n", 1989 " 20299: 'sshd',\n", 1990 " 20300: 'bash',\n", 1991 " 20301: 'bash',\n", 1992 " 20302: 'chrome',\n", 1993 " 20303: 'netstat',\n", 1994 " 20304: 'watch',\n", 1995 " 20305: 'sh',\n", 1996 " 20306: 'netstat',\n", 1997 " 20307: 'sh',\n", 1998 " 20308: 'netstat',\n", 1999 " 20309: 'stop',\n", 2000 " 20310: 'rm',\n", 2001 " 20311: 'job-filter',\n", 2002 " 20312: 'job-filter',\n", 2003 " 20313: 'job-filter',\n", 2004 " 20314: 'sh',\n", 2005 " 20315: 'shill_logout_us',\n", 2006 " 20316: 'sh',\n", 2007 " 20317: 'basename',\n", 2008 " 20318: 'mkdir',\n", 2009 " 20319: 'rm',\n", 2010 " 20320: 'dbus-send',\n", 2011 " 20321: 'rm',\n", 2012 " 20322: 'rm',\n", 2013 " 20323: 'kworker/0:0',\n", 2014 " 20324: 'Shutdown watchd',\n", 2015 " 20325: 'Chrome_ProcessL',\n", 2016 " 20326: 'kworker/u8:1',\n", 2017 " 20327: 'sh',\n", 2018 " 20328: 'bootstat',\n", 2019 " 20329: 'cryptohome',\n", 2020 " 20330: 'sh',\n", 2021 " 20331: 'lsof',\n", 2022 " 20332: 'sort',\n", 2023 " 20333: 'lsof',\n", 2024 " 20334: 'watch',\n", 2025 " 20335: 'sh',\n", 2026 " 20336: 'cat',\n", 2027 " 20337: 'udevd',\n", 2028 " 20338: 'sudo',\n", 2029 " 20339: 'kill',\n", 2030 " 20340: 'ps',\n", 2031 " 20341: 'logger',\n", 2032 " 20342: 'bootstat',\n", 2033 " 20343: 'pkill',\n", 2034 " 20344: 'pgrep',\n", 2035 " 20345: 'sh',\n", 2036 " 20346: 'cryptohome',\n", 2037 " 20347: 'bootstat',\n", 2038 " 20348: 'sshd',\n", 2039 " 20349: 'rm',\n", 2040 " 20350: 'status',\n", 2041 " 20351: 'start',\n", 2042 " 20352: 'job-filter',\n", 2043 " 20353: 'sh',\n", 2044 " 20354: 'job-filter',\n", 2045 " 20355: 'job-filter',\n", 2046 " 20356: 'pvrsrvctl',\n", 2047 " 20357: 'sh',\n", 2048 " 20358: 'sh',\n", 2049 " 20359: 'touch',\n", 2050 " 20360: 'bootstat',\n", 2051 " 20361: 'chmod',\n", 2052 " 20362: 'crossystem',\n", 2053 " 20363: 'dump_vpd_log',\n", 2054 " 20364: 'mkdir',\n", 2055 " 20365: 'mktemp',\n", 2056 " 20366: 'mkdir',\n", 2057 " 20367: 'bootstat',\n", 2058 " 20368: 'chown',\n", 2059 " 20369: 'chmod',\n", 2060 " 20370: 'lockbox-cache',\n", 2061 " 20371: 'chmod',\n", 2062 " 20372: 'mktemp',\n", 2063 " 20373: 'mktemp',\n", 2064 " 20374: 'mktemp',\n", 2065 " 20375: 'getopt',\n", 2066 " 20376: 'getopt',\n", 2067 " 20377: 'dump_vpd_log',\n", 2068 " 20378: 'dump_vpd_log',\n", 2069 " 20379: 'dump_vpd_log',\n", 2070 " 20380: 'dump_vpd_log',\n", 2071 " 20381: 'grep',\n", 2072 " 20382: 'dump_vpd_log',\n", 2073 " 20383: 'grep',\n", 2074 " 20384: 'dump_vpd_log',\n", 2075 " 20385: 'grep',\n", 2076 " 20386: 'watch',\n", 2077 " 20387: 'sh',\n", 2078 " 20388: 'cat',\n", 2079 " 20389: 'dump_vpd_log',\n", 2080 " 20390: 'grep',\n", 2081 " 20391: 'dump_vpd_log',\n", 2082 " 20392: 'grep',\n", 2083 " 20393: 'dump_vpd_log',\n", 2084 " 20394: 'grep',\n", 2085 " 20395: 'dump_vpd_log',\n", 2086 " 20396: 'grep',\n", 2087 " 20397: 'dump_vpd_log',\n", 2088 " 20398: 'grep',\n", 2089 " 20399: 'dump_vpd_log',\n", 2090 " 20400: 'grep',\n", 2091 " 20401: 'dump_vpd_log',\n", 2092 " 20402: 'grep',\n", 2093 " 20403: 'dump_vpd_log',\n", 2094 " 20404: 'grep',\n", 2095 " 20405: 'dump_vpd_log',\n", 2096 " 20406: 'grep',\n", 2097 " 20407: 'dump_vpd_log',\n", 2098 " 20408: 'grep',\n", 2099 " 20409: 'dump_vpd_log',\n", 2100 " 20410: 'dump_vpd_log',\n", 2101 " 20411: 'dump_vpd_log',\n", 2102 " 20412: 'dump_vpd_log',\n", 2103 " 20413: 'dump_vpd_log',\n", 2104 " 20414: 'dump_vpd_log',\n", 2105 " 20415: 'dump_vpd_log',\n", 2106 " 20416: 'dump_vpd_log',\n", 2107 " 20417: 'dump_vpd_log',\n", 2108 " 20418: 'dump_vpd_log',\n", 2109 " 20419: 'dump_vpd_log',\n", 2110 " 20420: 'dump_vpd_log',\n", 2111 " 20421: 'dump_vpd_log',\n", 2112 " 20422: 'dump_vpd_log',\n", 2113 " 20423: 'dump_vpd_log',\n", 2114 " 20424: 'sed',\n", 2115 " 20425: 'dump_vpd_log',\n", 2116 " 20426: 'dump_vpd_log',\n", 2117 " 20427: 'dump_vpd_log',\n", 2118 " 20428: 'dump_vpd_log',\n", 2119 " 20429: 'dump_vpd_log',\n", 2120 " 20430: 'dump_vpd_log',\n", 2121 " 20431: 'dump_vpd_log',\n", 2122 " 20432: 'getopt',\n", 2123 " 20433: 'expr',\n", 2124 " 20434: 'expr',\n", 2125 " 20435: 'dump_vpd_log',\n", 2126 " 20436: 'grep',\n", 2127 " 20437: 'dump_vpd_log',\n", 2128 " 20438: 'expr',\n", 2129 " 20439: 'dump_vpd_log',\n", 2130 " 20440: 'grep',\n", 2131 " 20441: 'dump_vpd_log',\n", 2132 " 20442: 'rm',\n", 2133 " 20443: 'rm',\n", 2134 " 20444: 'rm',\n", 2135 " 20445: 'dirname',\n", 2136 " 20446: 'dirname',\n", 2137 " 20447: 'mkdir',\n", 2138 " 20448: 'dump_vpd_log',\n", 2139 " 20449: 'sed',\n", 2140 " 20450: 'rm',\n", 2141 " 20451: 'sh',\n", 2142 " 20452: 'mkdir',\n", 2143 " 20453: 'date',\n", 2144 " 20454: 'ln',\n", 2145 " 20455: 'chown',\n", 2146 " 20456: 'session_manager',\n", 2147 " 20457: 'job-filter',\n", 2148 " 20458: 'ps',\n", 2149 " 20459: 'sh',\n", 2150 " 20460: 'chgrp',\n", 2151 " 20461: 'chmod',\n", 2152 " 20462: 'chgrp',\n", 2153 " 20463: 'chmod',\n", 2154 " 20464: 'chgrp',\n", 2155 " 20465: 'chmod',\n", 2156 " 20466: 'chgrp',\n", 2157 " 20467: 'chmod',\n", 2158 " 20468: 'chgrp',\n", 2159 " 20469: 'chmod',\n", 2160 " 20470: 'chgrp',\n", 2161 " 20471: 'chmod',\n", 2162 " 20472: 'session_manager',\n", 2163 " 20473: 'cp',\n", 2164 " 20474: 'is_developer_en',\n", 2165 " 20475: 'crossystem',\n", 2166 " 20476: 'debugd',\n", 2167 " 20477: 'chrome',\n", 2168 " 20478: 'minijail0',\n", 2169 " 20479: 'is_developer_en',\n", 2170 " 20480: 'crossystem',\n", 2171 " 20481: 'sandbox_ipc_thr',\n", 2172 " 20482: 'chrome',\n", 2173 " 20483: 'ps',\n", 2174 " 20484: 'chrome',\n", 2175 " 20485: 'cryptohome',\n", 2176 " 20486: 'nacl_helper_boo',\n", 2177 " 20487: 'nacl_helper_boo',\n", 2178 " 20488: 'nacl_helper_non',\n", 2179 " 20489: 'nacl_helper_non',\n", 2180 " 20490: 'chrome',\n", 2181 " 20491: 'chrome',\n", 2182 " 20492: 'chrome',\n", 2183 " 20493: 'watch',\n", 2184 " 20494: 'sh',\n", 2185 " 20495: 'cat',\n", 2186 " 20496: 'wget',\n", 2187 " 20497: 'sleep',\n", 2188 " 20498: 'dbus-send',\n", 2189 " 20499: 'kworker/1:0',\n", 2190 " 20500: 'sleep',\n", 2191 " 20501: 'wget',\n", 2192 " 20502: 'wget',\n", 2193 " 20503: 'wget',\n", 2194 " 20504: 'watch',\n", 2195 " 20505: 'sh',\n", 2196 " 20506: 'sh',\n", 2197 " 20507: 'wget',\n", 2198 " 20508: 'wget',\n", 2199 " 20509: 'wget',\n", 2200 " 20510: 'wget',\n", 2201 " 20511: 'wget',\n", 2202 " 20512: 'wget',\n", 2203 " 20513: 'wget',\n", 2204 " 20514: 'watch',\n", 2205 " 20515: 'sh',\n", 2206 " 20516: 'cat',\n", 2207 " 20517: 'wget',\n", 2208 " 20518: 'wget',\n", 2209 " 20519: 'wget',\n", 2210 " 20520: 'wget',\n", 2211 " 20521: 'watch',\n", 2212 " 20522: 'sh',\n", 2213 " 20523: 'cat',\n", 2214 " 20524: 'wget',\n", 2215 " 20525: 'wget',\n", 2216 " 20526: 'wget',\n", 2217 " 20527: 'chrome',\n", 2218 " 20528: 'watch',\n", 2219 " 20529: 'sh',\n", 2220 " 20530: 'sh',\n", 2221 " 20531: 'sandbox_ipc_thr',\n", 2222 " 20532: 'chrome',\n", 2223 " 20533: 'chrome',\n", 2224 " 20534: 'wget',\n", 2225 " 20535: 'nacl_helper_boo',\n", 2226 " 20536: 'nacl_helper_boo',\n", 2227 " 20537: 'nacl_helper_non',\n", 2228 " 20538: 'nacl_helper_non',\n", 2229 " 20539: 'chrome',\n", 2230 " 20540: 'chrome',\n", 2231 " 20541: 'chrome',\n", 2232 " 20542: 'D-Bus thread',\n", 2233 " 20543: 'WorkerPool/2054',\n", 2234 " 20544: 'WorkerPool/2054',\n", 2235 " 20545: 'CrShutdownDetec',\n", 2236 " 20546: 'BrowserBlocking',\n", 2237 " 20547: 'Chrome_DBThread',\n", 2238 " 20548: 'Chrome_FileThre',\n", 2239 " 20549: 'Chrome_FileUser',\n", 2240 " 20550: 'Chrome_ProcessL',\n", 2241 " 20551: 'Chrome_CacheThr',\n", 2242 " 20552: 'Chrome_IOThread',\n", 2243 " 20553: 'IndexedDB',\n", 2244 " 20554: 'CompositorTileW',\n", 2245 " 20555: 'AudioThread',\n", 2246 " 20556: 'crossystem',\n", 2247 " 20557: 'handle-watcher-',\n", 2248 " 20558: 'BrowserWatchdog',\n", 2249 " 20559: 'gpu-process_cra',\n", 2250 " 20560: 'chrome',\n", 2251 " 20561: 'crossystem',\n", 2252 " 20562: 'crossystem',\n", 2253 " 20563: 'CachePoolWorker',\n", 2254 " 20564: 'crossystem',\n", 2255 " 20565: 'crossystem',\n", 2256 " 20566: 'crossystem',\n", 2257 " 20567: 'mosys',\n", 2258 " 20568: 'crossystem',\n", 2259 " 20569: 'mosys',\n", 2260 " 20570: 'crossystem',\n", 2261 " 20571: 'mosys',\n", 2262 " 20572: 'crossystem',\n", 2263 " 20573: 'crossystem',\n", 2264 " 20574: 'crossystem',\n", 2265 " 20575: 'crossystem',\n", 2266 " 20576: 'wget',\n", 2267 " 20577: 'crossystem',\n", 2268 " 20578: 'crossystem',\n", 2269 " 20579: 'crossystem',\n", 2270 " 20580: 'crossystem',\n", 2271 " 20581: 'crossystem',\n", 2272 " 20582: 'mosys',\n", 2273 " 20583: 'mosys',\n", 2274 " 20584: 'mosys',\n", 2275 " 20585: 'mosys',\n", 2276 " 20586: 'mosys',\n", 2277 " 20587: 'mosys',\n", 2278 " 20588: 'mosys',\n", 2279 " 20589: 'mosys',\n", 2280 " 20590: 'mosys',\n", 2281 " 20591: 'inotify_reader',\n", 2282 " 20592: 'chrome',\n", 2283 " 20593: 'chrome',\n", 2284 " 20594: 'Watchdog',\n", 2285 " 20595: 'evdev',\n", 2286 " 20596: 'Chrome_ChildIOT',\n", 2287 " 20597: 'DrmThread',\n", 2288 " 20598: 'handle-watcher-',\n", 2289 " 20599: 'BrowserBlocking',\n", 2290 " 20600: 'Chrome_HistoryT',\n", 2291 " 20601: 'BrowserBlocking',\n", 2292 " 20602: 'Startup watchdo',\n", 2293 " 20603: 'Chrome_DevTools',\n", 2294 " 20604: 'WorkerPool/2060',\n", 2295 " 20605: 'wget',\n", 2296 " 20606: 'watch',\n", 2297 " 20607: 'sh',\n", 2298 " 20608: 'cat',\n", 2299 " 20609: 'WorkerPool/2060',\n", 2300 " 20610: 'WorkerPool/2061',\n", 2301 " 20611: 'WorkerPool/2061',\n", 2302 " 20612: 'chrome',\n", 2303 " 20613: 'chrome',\n", 2304 " 20614: 'renderer_crash_',\n", 2305 " 20615: 'chrome',\n", 2306 " 20616: 'Chrome_ChildIOT',\n", 2307 " 20617: 'Compositor',\n", 2308 " 20618: 'CompositorTileW',\n", 2309 " 20619: 'CompositorTileW',\n", 2310 " 20620: 'chrome',\n", 2311 " 20621: 'UsbEventHandler',\n", 2312 " 20622: 'handle-watcher-',\n", 2313 " 20623: 'HTMLParserThrea',\n", 2314 " 20624: 'WorkerPool/8',\n", 2315 " 20625: 'watch',\n", 2316 " 20626: 'sh',\n", 2317 " 20627: 'cat',\n", 2318 " 20628: 'WorkerPool/9',\n", 2319 " 20629: 'WorkerPool/10',\n", 2320 " 20630: 'WorkerPool/11',\n", 2321 " 20631: 'watch',\n", 2322 " 20632: 'sh',\n", 2323 " 20633: 'cat',\n", 2324 " 20634: 'cryptohome-path',\n", 2325 " 20635: 'chrome',\n", 2326 " 20636: 'tcsd',\n", 2327 " 20637: 'df',\n", 2328 " 20638: 'WorkerPool/12',\n", 2329 " 20639: 'watch',\n", 2330 " 20640: 'sh',\n", 2331 " 20641: 'cat',\n", 2332 " 20642: 'cryptohome-path',\n", 2333 " 20643: 'df',\n", 2334 " 20644: 'cryptohome-path',\n", 2335 " 20645: 'df',\n", 2336 " 20646: 'cryptohome-path',\n", 2337 " 20647: 'df',\n", 2338 " 20648: 'udevd',\n", 2339 " 20649: 'sshd',\n", 2340 " 20650: 'df',\n", 2341 " 20651: 'sh',\n", 2342 " 20652: 'chapsd',\n", 2343 " 20653: 'crossystem',\n", 2344 " 20654: 'rm',\n", 2345 " 20655: 'job-filter',\n", 2346 " 20656: 'init',\n", 2347 " 20657: 'sh',\n", 2348 " 20658: 'shill_login_use',\n", 2349 " 20659: 'touch',\n", 2350 " 20660: 'basename',\n", 2351 " 20661: 'cryptohome-path',\n", 2352 " 20662: 'basename',\n", 2353 " 20663: 'cryptohome-path',\n", 2354 " 20664: 'mkdir',\n", 2355 " 20665: 'mkdir',\n", 2356 " 20666: 'chrome',\n", 2357 " 20667: 'ln',\n", 2358 " 20668: 'mkdir',\n", 2359 " 20669: 'ln',\n", 2360 " 20670: 'dbus-send',\n", 2361 " 20671: 'dbus-send',\n", 2362 " 20672: 'keygen',\n", 2363 " 20673: 'watch',\n", 2364 " 20674: 'sh',\n", 2365 " 20675: 'cryptohome-path',\n", 2366 " 20676: 'sh',\n", 2367 " 20677: 'Chrome_HistoryT',\n", 2368 " 20678: 'df',\n", 2369 " 20679: 'chrome',\n", 2370 " 20680: 'Chrome_ChildIOT',\n", 2371 " 20681: 'Compositor',\n", 2372 " 20682: 'CompositorTileW',\n", 2373 " 20683: 'CompositorTileW',\n", 2374 " 20684: 'handle-watcher-',\n", 2375 " 20685: 'chrome',\n", 2376 " 20686: 'extension_crash',\n", 2377 " 20687: 'chrome',\n", 2378 " 20688: 'Chrome_ChildIOT',\n", 2379 " 20689: 'Compositor',\n", 2380 " 20690: 'CompositorTileW',\n", 2381 " 20691: 'CompositorTileW',\n", 2382 " 20692: 'handle-watcher-',\n", 2383 " 20693: 'kworker/u9:1',\n", 2384 " 20694: 'HTMLParserThrea',\n", 2385 " 20695: 'HTMLParserThrea',\n", 2386 " 20696: 'watch',\n", 2387 " 20697: 'sh',\n", 2388 " 20698: 'sh',\n", 2389 " 20699: 'WorkerPool/8',\n", 2390 " 20700: 'WorkerPool/9',\n", 2391 " 20701: 'WorkerPool/10',\n", 2392 " 20702: 'WorkerPool/11',\n", 2393 " 20703: 'WorkerPool/12',\n", 2394 " 20704: 'WorkerPool/13',\n", 2395 " 20705: 'chrome',\n", 2396 " 20706: 'Chrome_ChildIOT',\n", 2397 " 20707: 'Compositor',\n", 2398 " 20708: 'CompositorTileW',\n", 2399 " 20709: 'CompositorTileW',\n", 2400 " 20710: 'chrome',\n", 2401 " 20711: 'handle-watcher-',\n", 2402 " 20712: 'HTMLParserThrea',\n", 2403 " 20713: 'chrome',\n", 2404 " 20714: 'WorkerPool/8',\n", 2405 " 20715: 'watch',\n", 2406 " 20716: 'sh',\n", 2407 " 20717: 'cat',\n", 2408 " 20718: 'watch',\n", 2409 " 20719: 'sh',\n", 2410 " 20720: 'cat',\n", 2411 " 20721: 'ScriptStreamerT',\n", 2412 " 20722: 'WorkerPool/10',\n", 2413 " 20723: 'WorkerPool/11',\n", 2414 " 20724: 'watch',\n", 2415 " 20725: 'sh',\n", 2416 " 20726: 'cat',\n", 2417 " 20727: 'watch',\n", 2418 " 20728: 'sh',\n", 2419 " 20729: 'cat',\n", 2420 " 20730: 'chrome',\n", 2421 " 20731: 'chrome',\n", 2422 " 20732: 'Chrome_ChildIOT',\n", 2423 " 20733: 'Compositor',\n", 2424 " 20734: 'CompositorTileW',\n", 2425 " 20735: 'CompositorTileW',\n", 2426 " 20736: 'handle-watcher-',\n", 2427 " 20737: 'chrome',\n", 2428 " 20738: 'HTMLParserThrea',\n", 2429 " 20739: 'watch',\n", 2430 " 20740: 'sh',\n", 2431 " 20741: 'cat',\n", 2432 " 20742: 'watch',\n", 2433 " 20743: 'sh',\n", 2434 " 20744: 'cat',\n", 2435 " 20745: 'watch',\n", 2436 " 20746: 'sh',\n", 2437 " 20747: 'cat',\n", 2438 " 20748: 'mosys',\n", 2439 " 20749: 'sh',\n", 2440 " 20750: 'which',\n", 2441 " 20751: 'flashrom',\n", 2442 " 20752: 'sh',\n", 2443 " 20753: 'sh',\n", 2444 " 20754: 'watch',\n", 2445 " 20755: 'sh',\n", 2446 " 20756: 'cat',\n", 2447 " 20757: 'WorkerPool/12',\n", 2448 " 20758: 'watch',\n", 2449 " 20759: 'sh',\n", 2450 " 20760: 'cat',\n", 2451 " 20761: 'watch',\n", 2452 " 20762: 'sh',\n", 2453 " 20763: 'cat',\n", 2454 " 20764: 'watch',\n", 2455 " 20765: 'sh',\n", 2456 " 20766: 'cat',\n", 2457 " 20767: 'watch',\n", 2458 " 20768: 'sh',\n", 2459 " 20769: 'cat',\n", 2460 " 20770: 'watch',\n", 2461 " 20771: 'sh',\n", 2462 " 20772: 'sh',\n", 2463 " 20773: 'ps',\n", 2464 " 20774: 'watch',\n", 2465 " 20775: 'sh',\n", 2466 " 20776: 'sh',\n", 2467 " 20777: 'status',\n", 2468 " 20778: 'restart',\n", 2469 " 20779: 'job-filter',\n", 2470 " 20780: 'init',\n", 2471 " 20781: 'init',\n", 2472 " 20782: 'sh',\n", 2473 " 20783: 'shill_logout_us',\n", 2474 " 20784: 'basename',\n", 2475 " 20785: 'sh',\n", 2476 " 20786: 'mkdir',\n", 2477 " 20787: 'dbus-send',\n", 2478 " 20788: 'rm',\n", 2479 " 20789: 'rm',\n", 2480 " 20790: 'rm',\n", 2481 " 20791: 'Shutdown watchd',\n", 2482 " 20792: 'chrome',\n", 2483 " 20793: 'Chrome_ProcessL',\n", 2484 " 20794: 'kworker/0:3',\n", 2485 " 20795: 'watch',\n", 2486 " 20796: 'sh',\n", 2487 " 20797: 'sh',\n", 2488 " 20798: 'sh',\n", 2489 " 20799: 'bootstat',\n", 2490 " 20800: 'cryptohome',\n", 2491 " 20801: 'chapsd',\n", 2492 " 20802: 'sh',\n", 2493 " 20803: 'lsof',\n", 2494 " 20804: 'sort',\n", 2495 " 20805: 'lsof',\n", 2496 " 20806: 'sudo',\n", 2497 " 20807: 'kill',\n", 2498 " 20808: 'ps',\n", 2499 " 20809: 'logger',\n", 2500 " 20810: 'udevd',\n", 2501 " 20811: 'bootstat',\n", 2502 " 20812: 'pkill',\n", 2503 " 20813: 'pgrep',\n", 2504 " 20814: 'bootstat',\n", 2505 " 20815: 'cryptohome',\n", 2506 " 20816: 'bootstat',\n", 2507 " 20817: 'job-filter',\n", 2508 " 20818: 'job-filter',\n", 2509 " 20819: 'sh',\n", 2510 " 20820: 'sh',\n", 2511 " 20821: 'init',\n", 2512 " 20822: 'sh',\n", 2513 " 20823: 'sh',\n", 2514 " 20824: 'sh',\n", 2515 " 20825: 'chmod',\n", 2516 " 20826: 'bootstat',\n", 2517 " 20827: 'sh',\n", 2518 " 20828: 'dump_vpd_log',\n", 2519 " 20829: 'mktemp',\n", 2520 " 20830: 'mkdir',\n", 2521 " 20831: 'dump_vpd_log',\n", 2522 " 20832: 'chown',\n", 2523 " 20833: 'bootstat',\n", 2524 " 20834: 'chmod',\n", 2525 " 20835: 'lockbox-cache',\n", 2526 " 20836: 'chmod',\n", 2527 " 20837: 'mktemp',\n", 2528 " 20838: 'dump_vpd_log',\n", 2529 " 20839: 'mktemp',\n", 2530 " 20840: 'dump_vpd_log',\n", 2531 " 20841: 'getopt',\n", 2532 " 20842: 'dump_vpd_log',\n", 2533 " 20843: 'dump_vpd_log',\n", 2534 " 20844: 'awk',\n", 2535 " 20845: 'dump_vpd_log',\n", 2536 " 20846: 'grep',\n", 2537 " 20847: 'dump_vpd_log',\n", 2538 " 20848: 'grep',\n", 2539 " 20849: 'dump_vpd_log',\n", 2540 " 20850: 'dump_vpd_log',\n", 2541 " 20851: 'dump_vpd_log',\n", 2542 " 20852: 'grep',\n", 2543 " 20853: 'watch',\n", 2544 " 20854: 'sh',\n", 2545 " 20855: 'dump_vpd_log',\n", 2546 " 20856: 'grep',\n", 2547 " 20857: 'sh',\n", 2548 " 20858: 'dump_vpd_log',\n", 2549 " 20859: 'grep',\n", 2550 " 20860: 'dump_vpd_log',\n", 2551 " 20861: 'grep',\n", 2552 " 20862: 'dump_vpd_log',\n", 2553 " 20863: 'grep',\n", 2554 " 20864: 'dump_vpd_log',\n", 2555 " 20865: 'grep',\n", 2556 " 20866: 'dump_vpd_log',\n", 2557 " 20867: 'grep',\n", 2558 " 20868: 'dump_vpd_log',\n", 2559 " 20869: 'grep',\n", 2560 " 20870: 'dump_vpd_log',\n", 2561 " 20871: 'grep',\n", 2562 " 20872: 'dump_vpd_log',\n", 2563 " 20873: 'grep',\n", 2564 " 20874: 'dump_vpd_log',\n", 2565 " 20875: 'dump_vpd_log',\n", 2566 " 20876: 'dump_vpd_log',\n", 2567 " 20877: 'dump_vpd_log',\n", 2568 " 20878: 'dump_vpd_log',\n", 2569 " 20879: 'dump_vpd_log',\n", 2570 " 20880: 'dump_vpd_log',\n", 2571 " 20881: 'dump_vpd_log',\n", 2572 " 20882: 'dump_vpd_log',\n", 2573 " 20883: 'dump_vpd_log',\n", 2574 " 20884: 'dump_vpd_log',\n", 2575 " 20885: 'dump_vpd_log',\n", 2576 " 20886: 'dump_vpd_log',\n", 2577 " 20887: 'dump_vpd_log',\n", 2578 " 20888: 'dump_vpd_log',\n", 2579 " 20889: 'dump_vpd_log',\n", 2580 " 20890: 'dump_vpd_log',\n", 2581 " 20891: 'dump_vpd_log',\n", 2582 " 20892: 'dump_vpd_log',\n", 2583 " 20893: 'dump_vpd_log',\n", 2584 " 20894: 'dump_vpd_log',\n", 2585 " 20895: 'dump_vpd_log',\n", 2586 " 20896: 'dump_vpd_log',\n", 2587 " 20897: 'getopt',\n", 2588 " 20898: 'expr',\n", 2589 " 20899: 'expr',\n", 2590 " 20900: 'dump_vpd_log',\n", 2591 " 20901: 'grep',\n", 2592 " 20902: 'dump_vpd_log',\n", 2593 " 20903: 'expr',\n", 2594 " 20904: 'dump_vpd_log',\n", 2595 " 20905: 'grep',\n", 2596 " 20906: 'dump_vpd_log',\n", 2597 " 20907: 'rm',\n", 2598 " 20908: 'rm',\n", 2599 " 20909: 'rm',\n", 2600 " 20910: 'dirname',\n", 2601 " 20911: 'dirname',\n", 2602 " 20912: 'mkdir',\n", 2603 " 20913: 'dump_vpd_log',\n", 2604 " 20914: 'sed',\n", 2605 " 20915: 'rm',\n", 2606 " 20916: 'sh',\n", 2607 " 20917: 'mkdir',\n", 2608 " 20918: 'date',\n", 2609 " 20919: 'ln',\n", 2610 " 20920: 'chown',\n", 2611 " 20921: 'session_manager',\n", 2612 " 20922: 'job-filter',\n", 2613 " 20923: 'sshd',\n", 2614 " 20924: 'sh',\n", 2615 " 20925: 'chgrp',\n", 2616 " 20926: 'sh',\n", 2617 " 20927: 'sh',\n", 2618 " 20928: 'sh',\n", 2619 " 20929: 'sh',\n", 2620 " 20930: 'sh',\n", 2621 " 20931: 'sshd',\n", 2622 " 20932: 'sh',\n", 2623 " 20933: 'crossystem',\n", 2624 " 20934: 'chmod',\n", 2625 " 20935: 'sh',\n", 2626 " 20936: 'chmod',\n", 2627 " 20937: 'is_developer_en',\n", 2628 " 20938: 'sh',\n", 2629 " 20939: 'crossystem',\n", 2630 " 20940: 'chmod',\n", 2631 " 20941: 'watch',\n", 2632 " 20942: 'sh',\n", 2633 " 20943: 'sh',\n", 2634 " 20944: 'cp',\n", 2635 " 20945: 'debugd',\n", 2636 " 20946: 'mosys',\n", 2637 " 20947: 'sh',\n", 2638 " 20948: 'which',\n", 2639 " 20949: 'flashrom',\n", 2640 " 20950: 'sh',\n", 2641 " 20951: 'crossystem',\n", 2642 " 20952: 'sshd',\n", 2643 " 20953: 'sshd',\n", 2644 " 20954: 'sshd',\n", 2645 " 20955: 'sshd',\n", 2646 " 20956: 'cryptohome-path',\n", 2647 " 20957: 'minijail0',\n", 2648 " 20958: 'is_developer_en',\n", 2649 " 20959: 'is_developer_en',\n", 2650 " 20960: 'chrome',\n", 2651 " 20961: 'sshd',\n", 2652 " 20962: 'sshd',\n", 2653 " 20963: 'sandbox_ipc_thr',\n", 2654 " 20964: 'chrome',\n", 2655 " 20965: 'chrome',\n", 2656 " 20966: 'sshd',\n", 2657 " 20967: 'sshd',\n", 2658 " 20968: 'sshd',\n", 2659 " 20969: 'sshd',\n", 2660 " 20970: 'bash',\n", 2661 " 20971: 'nacl_helper_boo',\n", 2662 " 20972: 'nacl_helper_boo',\n", 2663 " 20973: 'nacl_helper_non',\n", 2664 " 20974: 'nacl_helper_non',\n", 2665 " 20975: 'chrome',\n", 2666 " 20976: 'chrome',\n", 2667 " 20977: 'chrome',\n", 2668 " 20978: 'sudo',\n", 2669 " 20979: 'sh',\n", 2670 " 20980: 'shutils',\n", 2671 " 20981: 'cat',\n", 2672 " 20982: 'watch',\n", 2673 " 20983: 'sh',\n", 2674 " 20984: 'sh',\n", 2675 " 20985: 'sudo',\n", 2676 " 20986: 'sudo',\n", 2677 " 20987: 'watch',\n", 2678 " 20988: 'sh',\n", 2679 " 20989: 'sh',\n", 2680 " 20990: 'sudo',\n", 2681 " 20991: 'sudo',\n", 2682 " 20992: 'trace-cmd'}" 2683 ] 2684 }, 2685 "execution_count": 333, 2686 "metadata": {}, 2687 "output_type": "execute_result" 2688 } 2689 ], 2690 "source": [ 2691 "# Create a map of {PID: TaskName}\n", 2692 "pid_to_task = {int(task[0]): task[1] for task in tasks.drop_duplicates().values}\n", 2693 "logging.info(\"The trace has %s unique PIDs\", len(pid_to_task))\n", 2694 "pid_to_task" 2695 ] 2696 }, 2697 { 2698 "cell_type": "markdown", 2699 "metadata": {}, 2700 "source": [ 2701 "## Events grouping" 2702 ] 2703 }, 2704 { 2705 "cell_type": "code", 2706 "execution_count": 118, 2707 "metadata": { 2708 "collapsed": false, 2709 "scrolled": true 2710 }, 2711 "outputs": [ 2712 { 2713 "data": { 2714 "text/html": [ 2715 "<div>\n", 2716 "<table border=\"1\" class=\"dataframe\">\n", 2717 " <thead>\n", 2718 " <tr style=\"text-align: right;\">\n", 2719 " <th></th>\n", 2720 " <th></th>\n", 2721 " <th>next_comm</th>\n", 2722 " <th>prev_comm</th>\n", 2723 " </tr>\n", 2724 " <tr>\n", 2725 " <th>next_pid</th>\n", 2726 " <th></th>\n", 2727 " <th></th>\n", 2728 " <th></th>\n", 2729 " </tr>\n", 2730 " </thead>\n", 2731 " <tbody>\n", 2732 " <tr>\n", 2733 " <th rowspan=\"4\" valign=\"top\">0</th>\n", 2734 " <th>count</th>\n", 2735 " <td>20400</td>\n", 2736 " <td>20400</td>\n", 2737 " </tr>\n", 2738 " <tr>\n", 2739 " <th>unique</th>\n", 2740 " <td>4</td>\n", 2741 " <td>158</td>\n", 2742 " </tr>\n", 2743 " <tr>\n", 2744 " <th>top</th>\n", 2745 " <td>swapper/1</td>\n", 2746 " <td>chrome</td>\n", 2747 " </tr>\n", 2748 " <tr>\n", 2749 " <th>freq</th>\n", 2750 " <td>8442</td>\n", 2751 " <td>5964</td>\n", 2752 " </tr>\n", 2753 " <tr>\n", 2754 " <th>1</th>\n", 2755 " <th>count</th>\n", 2756 " <td>372</td>\n", 2757 " <td>372</td>\n", 2758 " </tr>\n", 2759 " </tbody>\n", 2760 "</table>\n", 2761 "</div>" 2762 ], 2763 "text/plain": [ 2764 " next_comm prev_comm\n", 2765 "next_pid \n", 2766 "0 count 20400 20400\n", 2767 " unique 4 158\n", 2768 " top swapper/1 chrome\n", 2769 " freq 8442 5964\n", 2770 "1 count 372 372" 2771 ] 2772 }, 2773 "execution_count": 118, 2774 "metadata": {}, 2775 "output_type": "execute_result" 2776 } 2777 ], 2778 "source": [ 2779 "# Group events by \"PID\" and compute \n", 2780 "most_switching = df.groupby('next_pid').describe(include=['object'])\n", 2781 "most_switching.head()" 2782 ] 2783 }, 2784 { 2785 "cell_type": "code", 2786 "execution_count": 119, 2787 "metadata": { 2788 "collapsed": false 2789 }, 2790 "outputs": [ 2791 { 2792 "data": { 2793 "text/html": [ 2794 "<div>\n", 2795 "<table border=\"1\" class=\"dataframe\">\n", 2796 " <thead>\n", 2797 " <tr>\n", 2798 " <th></th>\n", 2799 " <th colspan=\"4\" halign=\"left\">next_comm</th>\n", 2800 " <th colspan=\"4\" halign=\"left\">prev_comm</th>\n", 2801 " </tr>\n", 2802 " <tr>\n", 2803 " <th></th>\n", 2804 " <th>count</th>\n", 2805 " <th>unique</th>\n", 2806 " <th>top</th>\n", 2807 " <th>freq</th>\n", 2808 " <th>count</th>\n", 2809 " <th>unique</th>\n", 2810 " <th>top</th>\n", 2811 " <th>freq</th>\n", 2812 " </tr>\n", 2813 " <tr>\n", 2814 " <th>next_pid</th>\n", 2815 " <th></th>\n", 2816 " <th></th>\n", 2817 " <th></th>\n", 2818 " <th></th>\n", 2819 " <th></th>\n", 2820 " <th></th>\n", 2821 " <th></th>\n", 2822 " <th></th>\n", 2823 " </tr>\n", 2824 " </thead>\n", 2825 " <tbody>\n", 2826 " <tr>\n", 2827 " <th>0</th>\n", 2828 " <td>20400</td>\n", 2829 " <td>4</td>\n", 2830 " <td>swapper/1</td>\n", 2831 " <td>8442</td>\n", 2832 " <td>20400</td>\n", 2833 " <td>158</td>\n", 2834 " <td>chrome</td>\n", 2835 " <td>5964</td>\n", 2836 " </tr>\n", 2837 " <tr>\n", 2838 " <th>1</th>\n", 2839 " <td>372</td>\n", 2840 " <td>1</td>\n", 2841 " <td>init</td>\n", 2842 " <td>372</td>\n", 2843 " <td>372</td>\n", 2844 " <td>33</td>\n", 2845 " <td>dbus-daemon</td>\n", 2846 " <td>90</td>\n", 2847 " </tr>\n", 2848 " <tr>\n", 2849 " <th>2</th>\n", 2850 " <td>5</td>\n", 2851 " <td>1</td>\n", 2852 " <td>kthreadd</td>\n", 2853 " <td>5</td>\n", 2854 " <td>5</td>\n", 2855 " <td>5</td>\n", 2856 " <td>swapper/1</td>\n", 2857 " <td>1</td>\n", 2858 " </tr>\n", 2859 " <tr>\n", 2860 " <th>3</th>\n", 2861 " <td>761</td>\n", 2862 " <td>1</td>\n", 2863 " <td>ksoftirqd/0</td>\n", 2864 " <td>761</td>\n", 2865 " <td>761</td>\n", 2866 " <td>36</td>\n", 2867 " <td>rcu_preempt</td>\n", 2868 " <td>246</td>\n", 2869 " </tr>\n", 2870 " <tr>\n", 2871 " <th>6</th>\n", 2872 " <td>2275</td>\n", 2873 " <td>1</td>\n", 2874 " <td>kworker/u8:0</td>\n", 2875 " <td>2275</td>\n", 2876 " <td>2275</td>\n", 2877 " <td>64</td>\n", 2878 " <td>chrome</td>\n", 2879 " <td>475</td>\n", 2880 " </tr>\n", 2881 " </tbody>\n", 2882 "</table>\n", 2883 "</div>" 2884 ], 2885 "text/plain": [ 2886 " next_comm prev_comm \\\n", 2887 " count unique top freq count unique top \n", 2888 "next_pid \n", 2889 "0 20400 4 swapper/1 8442 20400 158 chrome \n", 2890 "1 372 1 init 372 372 33 dbus-daemon \n", 2891 "2 5 1 kthreadd 5 5 5 swapper/1 \n", 2892 "3 761 1 ksoftirqd/0 761 761 36 rcu_preempt \n", 2893 "6 2275 1 kworker/u8:0 2275 2275 64 chrome \n", 2894 "\n", 2895 " \n", 2896 " freq \n", 2897 "next_pid \n", 2898 "0 5964 \n", 2899 "1 90 \n", 2900 "2 1 \n", 2901 "3 246 \n", 2902 "6 475 " 2903 ] 2904 }, 2905 "execution_count": 119, 2906 "metadata": {}, 2907 "output_type": "execute_result" 2908 } 2909 ], 2910 "source": [ 2911 "most_switching = most_switching.unstack()\n", 2912 "most_switching.head()" 2913 ] 2914 }, 2915 { 2916 "cell_type": "code", 2917 "execution_count": 124, 2918 "metadata": { 2919 "collapsed": false 2920 }, 2921 "outputs": [ 2922 { 2923 "data": { 2924 "text/html": [ 2925 "<div>\n", 2926 "<table border=\"1\" class=\"dataframe\">\n", 2927 " <thead>\n", 2928 " <tr style=\"text-align: right;\">\n", 2929 " <th></th>\n", 2930 " <th>count</th>\n", 2931 " <th>unique</th>\n", 2932 " <th>top</th>\n", 2933 " <th>freq</th>\n", 2934 " </tr>\n", 2935 " <tr>\n", 2936 " <th>next_pid</th>\n", 2937 " <th></th>\n", 2938 " <th></th>\n", 2939 " <th></th>\n", 2940 " <th></th>\n", 2941 " </tr>\n", 2942 " </thead>\n", 2943 " <tbody>\n", 2944 " <tr>\n", 2945 " <th>0</th>\n", 2946 " <td>20400</td>\n", 2947 " <td>4</td>\n", 2948 " <td>swapper/1</td>\n", 2949 " <td>8442</td>\n", 2950 " </tr>\n", 2951 " <tr>\n", 2952 " <th>20552</th>\n", 2953 " <td>9224</td>\n", 2954 " <td>2</td>\n", 2955 " <td>Chrome_IOThread</td>\n", 2956 " <td>9223</td>\n", 2957 " </tr>\n", 2958 " <tr>\n", 2959 " <th>20527</th>\n", 2960 " <td>8309</td>\n", 2961 " <td>2</td>\n", 2962 " <td>chrome</td>\n", 2963 " <td>8307</td>\n", 2964 " </tr>\n", 2965 " <tr>\n", 2966 " <th>20560</th>\n", 2967 " <td>6898</td>\n", 2968 " <td>3</td>\n", 2969 " <td>chrome</td>\n", 2970 " <td>6797</td>\n", 2971 " </tr>\n", 2972 " <tr>\n", 2973 " <th>7</th>\n", 2974 " <td>5516</td>\n", 2975 " <td>1</td>\n", 2976 " <td>rcu_preempt</td>\n", 2977 " <td>5516</td>\n", 2978 " </tr>\n", 2979 " </tbody>\n", 2980 "</table>\n", 2981 "</div>" 2982 ], 2983 "text/plain": [ 2984 " count unique top freq\n", 2985 "next_pid \n", 2986 "0 20400 4 swapper/1 8442\n", 2987 "20552 9224 2 Chrome_IOThread 9223\n", 2988 "20527 8309 2 chrome 8307\n", 2989 "20560 6898 3 chrome 6797\n", 2990 "7 5516 1 rcu_preempt 5516" 2991 ] 2992 }, 2993 "execution_count": 124, 2994 "metadata": {}, 2995 "output_type": "execute_result" 2996 } 2997 ], 2998 "source": [ 2999 "most_switching = most_switching['next_comm']\\\n", 3000 " .sort_values(by=['count'], ascending=False)\n", 3001 "most_switching.head()" 3002 ] 3003 }, 3004 { 3005 "cell_type": "code", 3006 "execution_count": 231, 3007 "metadata": { 3008 "collapsed": false 3009 }, 3010 "outputs": [ 3011 { 3012 "name": "stderr", 3013 "output_type": "stream", 3014 "text": [ 3015 "07:08:50 INFO : The second most swithing task is: [20552:Chrome_IOThread]\n" 3016 ] 3017 } 3018 ], 3019 "source": [ 3020 "most_switching_pid = most_switching.index[1]\n", 3021 "most_switching_task = most_switching.values[1][2]\n", 3022 "task_name = \"{}:{}\".format(most_switching_pid, most_switching_task)\n", 3023 "logging.info(\"The second most swithing task is: [%s]\", task_name)" 3024 ] 3025 }, 3026 { 3027 "cell_type": "markdown", 3028 "metadata": {}, 3029 "source": [ 3030 "## Filtering by column value" 3031 ] 3032 }, 3033 { 3034 "cell_type": "code", 3035 "execution_count": 188, 3036 "metadata": { 3037 "collapsed": false 3038 }, 3039 "outputs": [ 3040 { 3041 "name": "stderr", 3042 "output_type": "stream", 3043 "text": [ 3044 "06:45:37 INFO : Total events: 220234\n" 3045 ] 3046 }, 3047 { 3048 "data": { 3049 "text/html": [ 3050 "<div>\n", 3051 "<table border=\"1\" class=\"dataframe\">\n", 3052 " <thead>\n", 3053 " <tr style=\"text-align: right;\">\n", 3054 " <th></th>\n", 3055 " <th>comm</th>\n", 3056 " <th>cpu</th>\n", 3057 " <th>load_avg</th>\n", 3058 " <th>load_sum</th>\n", 3059 " <th>period_contrib</th>\n", 3060 " <th>pid</th>\n", 3061 " <th>util_avg</th>\n", 3062 " <th>util_sum</th>\n", 3063 " </tr>\n", 3064 " <tr>\n", 3065 " <th>Time</th>\n", 3066 " <th></th>\n", 3067 " <th></th>\n", 3068 " <th></th>\n", 3069 " <th></th>\n", 3070 " <th></th>\n", 3071 " <th></th>\n", 3072 " <th></th>\n", 3073 " <th></th>\n", 3074 " </tr>\n", 3075 " </thead>\n", 3076 " <tbody>\n", 3077 " <tr>\n", 3078 " <th>0.000014</th>\n", 3079 " <td>trace-cmd</td>\n", 3080 " <td>1</td>\n", 3081 " <td>58</td>\n", 3082 " <td>2811439</td>\n", 3083 " <td>916</td>\n", 3084 " <td>20278</td>\n", 3085 " <td>33</td>\n", 3086 " <td>1601714</td>\n", 3087 " </tr>\n", 3088 " <tr>\n", 3089 " <th>0.000229</th>\n", 3090 " <td>trace-cmd</td>\n", 3091 " <td>1</td>\n", 3092 " <td>59</td>\n", 3093 " <td>2820191</td>\n", 3094 " <td>111</td>\n", 3095 " <td>20278</td>\n", 3096 " <td>33</td>\n", 3097 " <td>1612418</td>\n", 3098 " </tr>\n", 3099 " <tr>\n", 3100 " <th>0.000334</th>\n", 3101 " <td>sh</td>\n", 3102 " <td>0</td>\n", 3103 " <td>0</td>\n", 3104 " <td>0</td>\n", 3105 " <td>957</td>\n", 3106 " <td>20277</td>\n", 3107 " <td>0</td>\n", 3108 " <td>0</td>\n", 3109 " </tr>\n", 3110 " <tr>\n", 3111 " <th>0.000982</th>\n", 3112 " <td>sh</td>\n", 3113 " <td>0</td>\n", 3114 " <td>5</td>\n", 3115 " <td>285169</td>\n", 3116 " <td>710</td>\n", 3117 " <td>20277</td>\n", 3118 " <td>3</td>\n", 3119 " <td>164585</td>\n", 3120 " </tr>\n", 3121 " <tr>\n", 3122 " <th>0.001178</th>\n", 3123 " <td>sh</td>\n", 3124 " <td>0</td>\n", 3125 " <td>5</td>\n", 3126 " <td>355825</td>\n", 3127 " <td>903</td>\n", 3128 " <td>20277</td>\n", 3129 " <td>3</td>\n", 3130 " <td>205364</td>\n", 3131 " </tr>\n", 3132 " </tbody>\n", 3133 "</table>\n", 3134 "</div>" 3135 ], 3136 "text/plain": [ 3137 " comm cpu load_avg load_sum period_contrib pid util_avg \\\n", 3138 "Time \n", 3139 "0.000014 trace-cmd 1 58 2811439 916 20278 33 \n", 3140 "0.000229 trace-cmd 1 59 2820191 111 20278 33 \n", 3141 "0.000334 sh 0 0 0 957 20277 0 \n", 3142 "0.000982 sh 0 5 285169 710 20277 3 \n", 3143 "0.001178 sh 0 5 355825 903 20277 3 \n", 3144 "\n", 3145 " util_sum \n", 3146 "Time \n", 3147 "0.000014 1601714 \n", 3148 "0.000229 1612418 \n", 3149 "0.000334 0 \n", 3150 "0.000982 164585 \n", 3151 "0.001178 205364 " 3152 ] 3153 }, 3154 "execution_count": 188, 3155 "metadata": {}, 3156 "output_type": "execute_result" 3157 } 3158 ], 3159 "source": [ 3160 "# Lets use the previous information to filter values of another DataFrame\n", 3161 "# Here we use the events reporting the task utilization signal\n", 3162 "df = ftrace.sched_load_avg_task.data_frame.ix[:,'comm':'util_sum']\n", 3163 "logging.info(\"Total events: %d\", len(df))\n", 3164 "df.head()" 3165 ] 3166 }, 3167 { 3168 "cell_type": "code", 3169 "execution_count": 189, 3170 "metadata": { 3171 "collapsed": false 3172 }, 3173 "outputs": [ 3174 { 3175 "name": "stderr", 3176 "output_type": "stream", 3177 "text": [ 3178 "06:45:37 INFO : Selected events: 19129\n" 3179 ] 3180 }, 3181 { 3182 "data": { 3183 "text/html": [ 3184 "<div>\n", 3185 "<table border=\"1\" class=\"dataframe\">\n", 3186 " <thead>\n", 3187 " <tr style=\"text-align: right;\">\n", 3188 " <th></th>\n", 3189 " <th>comm</th>\n", 3190 " <th>cpu</th>\n", 3191 " <th>load_avg</th>\n", 3192 " <th>load_sum</th>\n", 3193 " <th>period_contrib</th>\n", 3194 " <th>pid</th>\n", 3195 " <th>util_avg</th>\n", 3196 " <th>util_sum</th>\n", 3197 " </tr>\n", 3198 " <tr>\n", 3199 " <th>Time</th>\n", 3200 " <th></th>\n", 3201 " <th></th>\n", 3202 " <th></th>\n", 3203 " <th></th>\n", 3204 " <th></th>\n", 3205 " <th></th>\n", 3206 " <th></th>\n", 3207 " <th></th>\n", 3208 " </tr>\n", 3209 " </thead>\n", 3210 " <tbody>\n", 3211 " <tr>\n", 3212 " <th>10.277545</th>\n", 3213 " <td>chrome</td>\n", 3214 " <td>3</td>\n", 3215 " <td>5</td>\n", 3216 " <td>279939</td>\n", 3217 " <td>876</td>\n", 3218 " <td>20552</td>\n", 3219 " <td>0</td>\n", 3220 " <td>0</td>\n", 3221 " </tr>\n", 3222 " <tr>\n", 3223 " <th>10.278066</th>\n", 3224 " <td>Chrome_IOThread</td>\n", 3225 " <td>3</td>\n", 3226 " <td>8</td>\n", 3227 " <td>421520</td>\n", 3228 " <td>374</td>\n", 3229 " <td>20552</td>\n", 3230 " <td>3</td>\n", 3231 " <td>147580</td>\n", 3232 " </tr>\n", 3233 " <tr>\n", 3234 " <th>10.278226</th>\n", 3235 " <td>Chrome_IOThread</td>\n", 3236 " <td>3</td>\n", 3237 " <td>8</td>\n", 3238 " <td>421520</td>\n", 3239 " <td>501</td>\n", 3240 " <td>20552</td>\n", 3241 " <td>3</td>\n", 3242 " <td>147580</td>\n", 3243 " </tr>\n", 3244 " <tr>\n", 3245 " <th>10.279379</th>\n", 3246 " <td>Chrome_IOThread</td>\n", 3247 " <td>3</td>\n", 3248 " <td>15</td>\n", 3249 " <td>739012</td>\n", 3250 " <td>629</td>\n", 3251 " <td>20552</td>\n", 3252 " <td>9</td>\n", 3253 " <td>470942</td>\n", 3254 " </tr>\n", 3255 " <tr>\n", 3256 " <th>10.279542</th>\n", 3257 " <td>Chrome_IOThread</td>\n", 3258 " <td>3</td>\n", 3259 " <td>15</td>\n", 3260 " <td>739012</td>\n", 3261 " <td>765</td>\n", 3262 " <td>20552</td>\n", 3263 " <td>9</td>\n", 3264 " <td>470942</td>\n", 3265 " </tr>\n", 3266 " </tbody>\n", 3267 "</table>\n", 3268 "</div>" 3269 ], 3270 "text/plain": [ 3271 " comm cpu load_avg load_sum period_contrib pid \\\n", 3272 "Time \n", 3273 "10.277545 chrome 3 5 279939 876 20552 \n", 3274 "10.278066 Chrome_IOThread 3 8 421520 374 20552 \n", 3275 "10.278226 Chrome_IOThread 3 8 421520 501 20552 \n", 3276 "10.279379 Chrome_IOThread 3 15 739012 629 20552 \n", 3277 "10.279542 Chrome_IOThread 3 15 739012 765 20552 \n", 3278 "\n", 3279 " util_avg util_sum \n", 3280 "Time \n", 3281 "10.277545 0 0 \n", 3282 "10.278066 3 147580 \n", 3283 "10.278226 3 147580 \n", 3284 "10.279379 9 470942 \n", 3285 "10.279542 9 470942 " 3286 ] 3287 }, 3288 "execution_count": 189, 3289 "metadata": {}, 3290 "output_type": "execute_result" 3291 } 3292 ], 3293 "source": [ 3294 "# Select only events for the task of interest\n", 3295 "select = (df.pid == most_switching_pid)\n", 3296 "\n", 3297 "task_events = df[select]\n", 3298 "logging.info(\"Selected events: %d\", len(task_events))\n", 3299 "task_events.head()" 3300 ] 3301 }, 3302 { 3303 "cell_type": "code", 3304 "execution_count": 194, 3305 "metadata": { 3306 "collapsed": false 3307 }, 3308 "outputs": [ 3309 { 3310 "name": "stderr", 3311 "output_type": "stream", 3312 "text": [ 3313 "06:47:30 INFO : Selected events: 2007\n" 3314 ] 3315 }, 3316 { 3317 "data": { 3318 "text/html": [ 3319 "<div>\n", 3320 "<table border=\"1\" class=\"dataframe\">\n", 3321 " <thead>\n", 3322 " <tr style=\"text-align: right;\">\n", 3323 " <th></th>\n", 3324 " <th>comm</th>\n", 3325 " <th>cpu</th>\n", 3326 " <th>load_avg</th>\n", 3327 " <th>load_sum</th>\n", 3328 " <th>period_contrib</th>\n", 3329 " <th>pid</th>\n", 3330 " <th>util_avg</th>\n", 3331 " <th>util_sum</th>\n", 3332 " </tr>\n", 3333 " <tr>\n", 3334 " <th>Time</th>\n", 3335 " <th></th>\n", 3336 " <th></th>\n", 3337 " <th></th>\n", 3338 " <th></th>\n", 3339 " <th></th>\n", 3340 " <th></th>\n", 3341 " <th></th>\n", 3342 " <th></th>\n", 3343 " </tr>\n", 3344 " </thead>\n", 3345 " <tbody>\n", 3346 " <tr>\n", 3347 " <th>17.112905</th>\n", 3348 " <td>Chrome_IOThread</td>\n", 3349 " <td>3</td>\n", 3350 " <td>989</td>\n", 3351 " <td>47260557</td>\n", 3352 " <td>91</td>\n", 3353 " <td>20552</td>\n", 3354 " <td>452</td>\n", 3355 " <td>21592551</td>\n", 3356 " </tr>\n", 3357 " <tr>\n", 3358 " <th>17.113017</th>\n", 3359 " <td>Chrome_IOThread</td>\n", 3360 " <td>3</td>\n", 3361 " <td>989</td>\n", 3362 " <td>47333261</td>\n", 3363 " <td>196</td>\n", 3364 " <td>20552</td>\n", 3365 " <td>452</td>\n", 3366 " <td>21592551</td>\n", 3367 " </tr>\n", 3368 " <tr>\n", 3369 " <th>17.113273</th>\n", 3370 " <td>Chrome_IOThread</td>\n", 3371 " <td>3</td>\n", 3372 " <td>989</td>\n", 3373 " <td>47571853</td>\n", 3374 " <td>429</td>\n", 3375 " <td>20552</td>\n", 3376 " <td>452</td>\n", 3377 " <td>21831143</td>\n", 3378 " </tr>\n", 3379 " <tr>\n", 3380 " <th>17.113552</th>\n", 3381 " <td>Chrome_IOThread</td>\n", 3382 " <td>3</td>\n", 3383 " <td>989</td>\n", 3384 " <td>47866765</td>\n", 3385 " <td>717</td>\n", 3386 " <td>20552</td>\n", 3387 " <td>452</td>\n", 3388 " <td>21831143</td>\n", 3389 " </tr>\n", 3390 " <tr>\n", 3391 " <th>17.114018</th>\n", 3392 " <td>Chrome_IOThread</td>\n", 3393 " <td>3</td>\n", 3394 " <td>990</td>\n", 3395 " <td>47295142</td>\n", 3396 " <td>143</td>\n", 3397 " <td>20552</td>\n", 3398 " <td>456</td>\n", 3399 " <td>21817410</td>\n", 3400 " </tr>\n", 3401 " </tbody>\n", 3402 "</table>\n", 3403 "</div>" 3404 ], 3405 "text/plain": [ 3406 " comm cpu load_avg load_sum period_contrib pid \\\n", 3407 "Time \n", 3408 "17.112905 Chrome_IOThread 3 989 47260557 91 20552 \n", 3409 "17.113017 Chrome_IOThread 3 989 47333261 196 20552 \n", 3410 "17.113273 Chrome_IOThread 3 989 47571853 429 20552 \n", 3411 "17.113552 Chrome_IOThread 3 989 47866765 717 20552 \n", 3412 "17.114018 Chrome_IOThread 3 990 47295142 143 20552 \n", 3413 "\n", 3414 " util_avg util_sum \n", 3415 "Time \n", 3416 "17.112905 452 21592551 \n", 3417 "17.113017 452 21592551 \n", 3418 "17.113273 452 21831143 \n", 3419 "17.113552 452 21831143 \n", 3420 "17.114018 456 21817410 " 3421 ] 3422 }, 3423 "execution_count": 194, 3424 "metadata": {}, 3425 "output_type": "execute_result" 3426 } 3427 ], 3428 "source": [ 3429 "# We can also compose a query using multiple conditions\n", 3430 "select = (((task_events.cpu != 1) & (task_events.cpu != 2)) & ~(task_events.util_avg < 450))\n", 3431 "\n", 3432 "task_events = task_events[select]\n", 3433 "logging.info(\"Selected events: %d\", len(task_events))\n", 3434 "task_events.head()" 3435 ] 3436 }, 3437 { 3438 "cell_type": "markdown", 3439 "metadata": {}, 3440 "source": [ 3441 "## Row selection" 3442 ] 3443 }, 3444 { 3445 "cell_type": "code", 3446 "execution_count": 198, 3447 "metadata": { 3448 "collapsed": false 3449 }, 3450 "outputs": [ 3451 { 3452 "data": { 3453 "text/html": [ 3454 "<div>\n", 3455 "<table border=\"1\" class=\"dataframe\">\n", 3456 " <thead>\n", 3457 " <tr style=\"text-align: right;\">\n", 3458 " <th></th>\n", 3459 " <th>comm</th>\n", 3460 " <th>cpu</th>\n", 3461 " <th>load_avg</th>\n", 3462 " <th>load_sum</th>\n", 3463 " <th>period_contrib</th>\n", 3464 " <th>pid</th>\n", 3465 " <th>util_avg</th>\n", 3466 " <th>util_sum</th>\n", 3467 " </tr>\n", 3468 " <tr>\n", 3469 " <th>Time</th>\n", 3470 " <th></th>\n", 3471 " <th></th>\n", 3472 " <th></th>\n", 3473 " <th></th>\n", 3474 " <th></th>\n", 3475 " <th></th>\n", 3476 " <th></th>\n", 3477 " <th></th>\n", 3478 " </tr>\n", 3479 " </thead>\n", 3480 " <tbody>\n", 3481 " <tr>\n", 3482 " <th>21.983876</th>\n", 3483 " <td>Chrome_IOThread</td>\n", 3484 " <td>3</td>\n", 3485 " <td>860</td>\n", 3486 " <td>41072776</td>\n", 3487 " <td>117</td>\n", 3488 " <td>20552</td>\n", 3489 " <td>452</td>\n", 3490 " <td>21610419</td>\n", 3491 " </tr>\n", 3492 " <tr>\n", 3493 " <th>21.983908</th>\n", 3494 " <td>Chrome_IOThread</td>\n", 3495 " <td>3</td>\n", 3496 " <td>860</td>\n", 3497 " <td>41109640</td>\n", 3498 " <td>153</td>\n", 3499 " <td>20552</td>\n", 3500 " <td>452</td>\n", 3501 " <td>21610419</td>\n", 3502 " </tr>\n", 3503 " <tr>\n", 3504 " <th>21.983928</th>\n", 3505 " <td>Chrome_IOThread</td>\n", 3506 " <td>3</td>\n", 3507 " <td>860</td>\n", 3508 " <td>41129096</td>\n", 3509 " <td>172</td>\n", 3510 " <td>20552</td>\n", 3511 " <td>452</td>\n", 3512 " <td>21629875</td>\n", 3513 " </tr>\n", 3514 " <tr>\n", 3515 " <th>21.983987</th>\n", 3516 " <td>Chrome_IOThread</td>\n", 3517 " <td>3</td>\n", 3518 " <td>860</td>\n", 3519 " <td>41188488</td>\n", 3520 " <td>230</td>\n", 3521 " <td>20552</td>\n", 3522 " <td>452</td>\n", 3523 " <td>21629875</td>\n", 3524 " </tr>\n", 3525 " <tr>\n", 3526 " <th>21.984067</th>\n", 3527 " <td>Chrome_IOThread</td>\n", 3528 " <td>3</td>\n", 3529 " <td>860</td>\n", 3530 " <td>41263240</td>\n", 3531 " <td>303</td>\n", 3532 " <td>20552</td>\n", 3533 " <td>452</td>\n", 3534 " <td>21704627</td>\n", 3535 " </tr>\n", 3536 " </tbody>\n", 3537 "</table>\n", 3538 "</div>" 3539 ], 3540 "text/plain": [ 3541 " comm cpu load_avg load_sum period_contrib pid \\\n", 3542 "Time \n", 3543 "21.983876 Chrome_IOThread 3 860 41072776 117 20552 \n", 3544 "21.983908 Chrome_IOThread 3 860 41109640 153 20552 \n", 3545 "21.983928 Chrome_IOThread 3 860 41129096 172 20552 \n", 3546 "21.983987 Chrome_IOThread 3 860 41188488 230 20552 \n", 3547 "21.984067 Chrome_IOThread 3 860 41263240 303 20552 \n", 3548 "\n", 3549 " util_avg util_sum \n", 3550 "Time \n", 3551 "21.983876 452 21610419 \n", 3552 "21.983908 452 21610419 \n", 3553 "21.983928 452 21629875 \n", 3554 "21.983987 452 21629875 \n", 3555 "21.984067 452 21704627 " 3556 ] 3557 }, 3558 "execution_count": 198, 3559 "metadata": {}, 3560 "output_type": "execute_result" 3561 } 3562 ], 3563 "source": [ 3564 "# Row selection is also possible, which in our case corresponds to limiting \n", 3565 "# the events on a specified time frame\n", 3566 "task_events.ix[21.1:22.9,].head()" 3567 ] 3568 }, 3569 { 3570 "cell_type": "markdown", 3571 "metadata": {}, 3572 "source": [ 3573 "## DataFrame Merging" 3574 ] 3575 }, 3576 { 3577 "cell_type": "code", 3578 "execution_count": 218, 3579 "metadata": { 3580 "collapsed": false 3581 }, 3582 "outputs": [ 3583 { 3584 "name": "stderr", 3585 "output_type": "stream", 3586 "text": [ 3587 "06:59:46 INFO : Selected events: 17\n" 3588 ] 3589 }, 3590 { 3591 "data": { 3592 "text/html": [ 3593 "<div>\n", 3594 "<table border=\"1\" class=\"dataframe\">\n", 3595 " <thead>\n", 3596 " <tr style=\"text-align: right;\">\n", 3597 " <th></th>\n", 3598 " <th>cpu</th>\n", 3599 " <th>frequency</th>\n", 3600 " </tr>\n", 3601 " <tr>\n", 3602 " <th>Time</th>\n", 3603 " <th></th>\n", 3604 " <th></th>\n", 3605 " </tr>\n", 3606 " </thead>\n", 3607 " <tbody>\n", 3608 " <tr>\n", 3609 " <th>21.215426</th>\n", 3610 " <td>0</td>\n", 3611 " <td>1001000</td>\n", 3612 " </tr>\n", 3613 " <tr>\n", 3614 " <th>21.265745</th>\n", 3615 " <td>0</td>\n", 3616 " <td>1404000</td>\n", 3617 " </tr>\n", 3618 " <tr>\n", 3619 " <th>21.412728</th>\n", 3620 " <td>0</td>\n", 3621 " <td>507000</td>\n", 3622 " </tr>\n", 3623 " <tr>\n", 3624 " <th>21.465761</th>\n", 3625 " <td>0</td>\n", 3626 " <td>1404000</td>\n", 3627 " </tr>\n", 3628 " <tr>\n", 3629 " <th>21.541466</th>\n", 3630 " <td>0</td>\n", 3631 " <td>507000</td>\n", 3632 " </tr>\n", 3633 " </tbody>\n", 3634 "</table>\n", 3635 "</div>" 3636 ], 3637 "text/plain": [ 3638 " cpu frequency\n", 3639 "Time \n", 3640 "21.215426 0 1001000\n", 3641 "21.265745 0 1404000\n", 3642 "21.412728 0 507000\n", 3643 "21.465761 0 1404000\n", 3644 "21.541466 0 507000" 3645 ] 3646 }, 3647 "execution_count": 218, 3648 "metadata": {}, 3649 "output_type": "execute_result" 3650 } 3651 ], 3652 "source": [ 3653 "# Let's make use of yet another DataFrame, let's look at the frequencies\n", 3654 "frequencies = ftrace.cpu_frequency.data_frame\n", 3655 "\n", 3656 "select = (frequencies.cpu == 0)\n", 3657 "frequencies = frequencies.ix[21.1:22.9,'cpu':'frequency'][select]\n", 3658 "logging.info(\"Selected events: %d\", len(frequencies))\n", 3659 "frequencies.head()" 3660 ] 3661 }, 3662 { 3663 "cell_type": "code", 3664 "execution_count": 222, 3665 "metadata": { 3666 "collapsed": false 3667 }, 3668 "outputs": [ 3669 { 3670 "name": "stderr", 3671 "output_type": "stream", 3672 "text": [ 3673 "06:59:59 INFO : Selected events: 2024\n" 3674 ] 3675 }, 3676 { 3677 "data": { 3678 "text/html": [ 3679 "<div>\n", 3680 "<table border=\"1\" class=\"dataframe\">\n", 3681 " <thead>\n", 3682 " <tr style=\"text-align: right;\">\n", 3683 " <th></th>\n", 3684 " <th>comm</th>\n", 3685 " <th>cpulx_</th>\n", 3686 " <th>load_avg</th>\n", 3687 " <th>load_sum</th>\n", 3688 " <th>period_contrib</th>\n", 3689 " <th>pid</th>\n", 3690 " <th>util_avg</th>\n", 3691 " <th>util_sum</th>\n", 3692 " <th>cpu</th>\n", 3693 " <th>frequency</th>\n", 3694 " </tr>\n", 3695 " <tr>\n", 3696 " <th>Time</th>\n", 3697 " <th></th>\n", 3698 " <th></th>\n", 3699 " <th></th>\n", 3700 " <th></th>\n", 3701 " <th></th>\n", 3702 " <th></th>\n", 3703 " <th></th>\n", 3704 " <th></th>\n", 3705 " <th></th>\n", 3706 " <th></th>\n", 3707 " </tr>\n", 3708 " </thead>\n", 3709 " <tbody>\n", 3710 " <tr>\n", 3711 " <th>22.701783</th>\n", 3712 " <td>Chrome_IOThread</td>\n", 3713 " <td>3</td>\n", 3714 " <td>893</td>\n", 3715 " <td>42702053</td>\n", 3716 " <td>124</td>\n", 3717 " <td>20552</td>\n", 3718 " <td>457</td>\n", 3719 " <td>21865198</td>\n", 3720 " <td>NaN</td>\n", 3721 " <td>NaN</td>\n", 3722 " </tr>\n", 3723 " <tr>\n", 3724 " <th>22.701807</th>\n", 3725 " <td>Chrome_IOThread</td>\n", 3726 " <td>3</td>\n", 3727 " <td>893</td>\n", 3728 " <td>42727653</td>\n", 3729 " <td>149</td>\n", 3730 " <td>20552</td>\n", 3731 " <td>457</td>\n", 3732 " <td>21865198</td>\n", 3733 " <td>NaN</td>\n", 3734 " <td>NaN</td>\n", 3735 " </tr>\n", 3736 " <tr>\n", 3737 " <th>22.701824</th>\n", 3738 " <td>Chrome_IOThread</td>\n", 3739 " <td>3</td>\n", 3740 " <td>893</td>\n", 3741 " <td>42743013</td>\n", 3742 " <td>164</td>\n", 3743 " <td>20552</td>\n", 3744 " <td>457</td>\n", 3745 " <td>21880558</td>\n", 3746 " <td>NaN</td>\n", 3747 " <td>NaN</td>\n", 3748 " </tr>\n", 3749 " <tr>\n", 3750 " <th>22.768356</th>\n", 3751 " <td>NaN</td>\n", 3752 " <td>NaN</td>\n", 3753 " <td>NaN</td>\n", 3754 " <td>NaN</td>\n", 3755 " <td>NaN</td>\n", 3756 " <td>NaN</td>\n", 3757 " <td>NaN</td>\n", 3758 " <td>NaN</td>\n", 3759 " <td>0</td>\n", 3760 " <td>1183000</td>\n", 3761 " </tr>\n", 3762 " <tr>\n", 3763 " <th>22.818657</th>\n", 3764 " <td>NaN</td>\n", 3765 " <td>NaN</td>\n", 3766 " <td>NaN</td>\n", 3767 " <td>NaN</td>\n", 3768 " <td>NaN</td>\n", 3769 " <td>NaN</td>\n", 3770 " <td>NaN</td>\n", 3771 " <td>NaN</td>\n", 3772 " <td>0</td>\n", 3773 " <td>1404000</td>\n", 3774 " </tr>\n", 3775 " </tbody>\n", 3776 "</table>\n", 3777 "</div>" 3778 ], 3779 "text/plain": [ 3780 " comm cpulx_ load_avg load_sum period_contrib pid \\\n", 3781 "Time \n", 3782 "22.701783 Chrome_IOThread 3 893 42702053 124 20552 \n", 3783 "22.701807 Chrome_IOThread 3 893 42727653 149 20552 \n", 3784 "22.701824 Chrome_IOThread 3 893 42743013 164 20552 \n", 3785 "22.768356 NaN NaN NaN NaN NaN NaN \n", 3786 "22.818657 NaN NaN NaN NaN NaN NaN \n", 3787 "\n", 3788 " util_avg util_sum cpu frequency \n", 3789 "Time \n", 3790 "22.701783 457 21865198 NaN NaN \n", 3791 "22.701807 457 21865198 NaN NaN \n", 3792 "22.701824 457 21880558 NaN NaN \n", 3793 "22.768356 NaN NaN 0 1183000 \n", 3794 "22.818657 NaN NaN 0 1404000 " 3795 ] 3796 }, 3797 "execution_count": 222, 3798 "metadata": {}, 3799 "output_type": "execute_result" 3800 } 3801 ], 3802 "source": [ 3803 "# Let's merge the task signal frame with the CPUs frequencies\n", 3804 "task_util_and_freq = task_events.join(\n", 3805 " frequencies,\n", 3806 " how='outer',\n", 3807 " lsuffix='lx_')#[['util_avg', 'frequency']]\n", 3808 "logging.info(\"Selected events: %d\", len(task_util_and_freq))\n", 3809 "task_util_and_freq.tail()" 3810 ] 3811 }, 3812 { 3813 "cell_type": "code", 3814 "execution_count": 223, 3815 "metadata": { 3816 "collapsed": false 3817 }, 3818 "outputs": [ 3819 { 3820 "data": { 3821 "text/plain": [ 3822 "2024" 3823 ] 3824 }, 3825 "execution_count": 223, 3826 "metadata": {}, 3827 "output_type": "execute_result" 3828 } 3829 ], 3830 "source": [ 3831 "# The new table has the union of events from the two original tables\n", 3832 "len(task_events) + len(frequencies)" 3833 ] 3834 }, 3835 { 3836 "cell_type": "code", 3837 "execution_count": 224, 3838 "metadata": { 3839 "collapsed": false 3840 }, 3841 "outputs": [ 3842 { 3843 "data": { 3844 "text/html": [ 3845 "<div>\n", 3846 "<table border=\"1\" class=\"dataframe\">\n", 3847 " <thead>\n", 3848 " <tr style=\"text-align: right;\">\n", 3849 " <th></th>\n", 3850 " <th>comm</th>\n", 3851 " <th>cpulx_</th>\n", 3852 " <th>load_avg</th>\n", 3853 " <th>load_sum</th>\n", 3854 " <th>period_contrib</th>\n", 3855 " <th>pid</th>\n", 3856 " <th>util_avg</th>\n", 3857 " <th>util_sum</th>\n", 3858 " <th>cpu</th>\n", 3859 " <th>frequency</th>\n", 3860 " </tr>\n", 3861 " <tr>\n", 3862 " <th>Time</th>\n", 3863 " <th></th>\n", 3864 " <th></th>\n", 3865 " <th></th>\n", 3866 " <th></th>\n", 3867 " <th></th>\n", 3868 " <th></th>\n", 3869 " <th></th>\n", 3870 " <th></th>\n", 3871 " <th></th>\n", 3872 " <th></th>\n", 3873 " </tr>\n", 3874 " </thead>\n", 3875 " <tbody>\n", 3876 " <tr>\n", 3877 " <th>22.701783</th>\n", 3878 " <td>Chrome_IOThread</td>\n", 3879 " <td>3</td>\n", 3880 " <td>893</td>\n", 3881 " <td>42702053</td>\n", 3882 " <td>124</td>\n", 3883 " <td>20552</td>\n", 3884 " <td>457</td>\n", 3885 " <td>21865198</td>\n", 3886 " <td>0</td>\n", 3887 " <td>1404000</td>\n", 3888 " </tr>\n", 3889 " <tr>\n", 3890 " <th>22.701807</th>\n", 3891 " <td>Chrome_IOThread</td>\n", 3892 " <td>3</td>\n", 3893 " <td>893</td>\n", 3894 " <td>42727653</td>\n", 3895 " <td>149</td>\n", 3896 " <td>20552</td>\n", 3897 " <td>457</td>\n", 3898 " <td>21865198</td>\n", 3899 " <td>0</td>\n", 3900 " <td>1404000</td>\n", 3901 " </tr>\n", 3902 " <tr>\n", 3903 " <th>22.701824</th>\n", 3904 " <td>Chrome_IOThread</td>\n", 3905 " <td>3</td>\n", 3906 " <td>893</td>\n", 3907 " <td>42743013</td>\n", 3908 " <td>164</td>\n", 3909 " <td>20552</td>\n", 3910 " <td>457</td>\n", 3911 " <td>21880558</td>\n", 3912 " <td>0</td>\n", 3913 " <td>1404000</td>\n", 3914 " </tr>\n", 3915 " <tr>\n", 3916 " <th>22.768356</th>\n", 3917 " <td>Chrome_IOThread</td>\n", 3918 " <td>3</td>\n", 3919 " <td>893</td>\n", 3920 " <td>42743013</td>\n", 3921 " <td>164</td>\n", 3922 " <td>20552</td>\n", 3923 " <td>457</td>\n", 3924 " <td>21880558</td>\n", 3925 " <td>0</td>\n", 3926 " <td>1183000</td>\n", 3927 " </tr>\n", 3928 " <tr>\n", 3929 " <th>22.818657</th>\n", 3930 " <td>Chrome_IOThread</td>\n", 3931 " <td>3</td>\n", 3932 " <td>893</td>\n", 3933 " <td>42743013</td>\n", 3934 " <td>164</td>\n", 3935 " <td>20552</td>\n", 3936 " <td>457</td>\n", 3937 " <td>21880558</td>\n", 3938 " <td>0</td>\n", 3939 " <td>1404000</td>\n", 3940 " </tr>\n", 3941 " </tbody>\n", 3942 "</table>\n", 3943 "</div>" 3944 ], 3945 "text/plain": [ 3946 " comm cpulx_ load_avg load_sum period_contrib pid \\\n", 3947 "Time \n", 3948 "22.701783 Chrome_IOThread 3 893 42702053 124 20552 \n", 3949 "22.701807 Chrome_IOThread 3 893 42727653 149 20552 \n", 3950 "22.701824 Chrome_IOThread 3 893 42743013 164 20552 \n", 3951 "22.768356 Chrome_IOThread 3 893 42743013 164 20552 \n", 3952 "22.818657 Chrome_IOThread 3 893 42743013 164 20552 \n", 3953 "\n", 3954 " util_avg util_sum cpu frequency \n", 3955 "Time \n", 3956 "22.701783 457 21865198 0 1404000 \n", 3957 "22.701807 457 21865198 0 1404000 \n", 3958 "22.701824 457 21880558 0 1404000 \n", 3959 "22.768356 457 21880558 0 1183000 \n", 3960 "22.818657 457 21880558 0 1404000 " 3961 ] 3962 }, 3963 "execution_count": 224, 3964 "metadata": {}, 3965 "output_type": "execute_result" 3966 } 3967 ], 3968 "source": [ 3969 "# Let's propagate missing columns values...\n", 3970 "task_util_and_freq = task_util_and_freq.fillna(method='ffill')\n", 3971 "task_util_and_freq.tail()" 3972 ] 3973 }, 3974 { 3975 "cell_type": "code", 3976 "execution_count": 226, 3977 "metadata": { 3978 "collapsed": true 3979 }, 3980 "outputs": [], 3981 "source": [ 3982 "# NOTE: missing values at the beginning can be fixe as well\n", 3983 "# ...but that behind that demo!\n", 3984 "# LISA has a set of methods which provides a complete and realiable solutions\n", 3985 "# to do this kind of compositions on data frames" 3986 ] 3987 }, 3988 { 3989 "cell_type": "markdown", 3990 "metadata": {}, 3991 "source": [ 3992 "# Plotting" 3993 ] 3994 }, 3995 { 3996 "cell_type": "markdown", 3997 "metadata": {}, 3998 "source": [ 3999 "## Using pylab" 4000 ] 4001 }, 4002 { 4003 "cell_type": "code", 4004 "execution_count": 227, 4005 "metadata": { 4006 "collapsed": false 4007 }, 4008 "outputs": [ 4009 { 4010 "name": "stdout", 4011 "output_type": "stream", 4012 "text": [ 4013 "Populating the interactive namespace from numpy and matplotlib\n" 4014 ] 4015 }, 4016 { 4017 "name": "stderr", 4018 "output_type": "stream", 4019 "text": [ 4020 "WARNING: pylab import has clobbered these variables: ['e', 'select']\n", 4021 "`%matplotlib` prevents importing * from pylab and numpy\n" 4022 ] 4023 } 4024 ], 4025 "source": [ 4026 "# Enable generation of Notebook emebedded plots\n", 4027 "%pylab inline" 4028 ] 4029 }, 4030 { 4031 "cell_type": "code", 4032 "execution_count": 229, 4033 "metadata": { 4034 "collapsed": false 4035 }, 4036 "outputs": [ 4037 { 4038 "data": { 4039 "text/plain": [ 4040 "<matplotlib.axes._subplots.AxesSubplot at 0x7f0c7e2c0890>" 4041 ] 4042 }, 4043 "execution_count": 229, 4044 "metadata": {}, 4045 "output_type": "execute_result" 4046 }, 4047 { 4048 "data": { 4049 "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAEPCAYAAAC+35gCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmY1tV99/H3BxUNCAgoOyKKWDBuqKi1NhMsi8ZHNHHB\nBVC5kj6BtNGmjRgrQoyXik1CNcU2LRHUwLilEXwQRiKTNEYUjAYjyEAjCIOMkc0oRrbv88d9GG6G\nGebHLAwzfF7XxeXv/p7lPkd0vvM757coIjAzM8uiWUMPwMzMGg8nDTMzy8xJw8zMMnPSMDOzzJw0\nzMwsMycNMzPLrNqkIWmKpDJJiyvE/07SUklvSbo/L36HpOWpbFBevJ+kxZJKJE3KizeXVJjavCLp\n+Lyykan+Mkkj8uInSFqQymZIOrw2/xLMzCybLGcajwKD8wOSCoD/A5wWEacB/5LifYBrgD7AJcBk\nSUrNHgFGRURvoLekXX2OAjZExMnAJGBi6qstMA44FzgPuFtSm9TmAeD7qa9NqQ8zM6tn1SaNiPg1\nsLFC+OvA/RGxPdX5MMWHAoURsT0iVgLLgf6SOgGtImJhqvcYcEVem2np+BlgQDoeDBRFxOaI2AQU\nAUNS2QDg2XQ8Dbgyw1zNzKyWarqn0Rv467RENF/S2SneFVidV680xboCa/Lia1JsjzYRsQPYLKld\nVX1Jag9sjIideX11qeE8zMxsP9R0L+BwoG1EnC/pXOBp4MQ6GpOqr5KpjpmZ1bGaJo3VwM8AImKh\npB3pDKAUOD6vXrcUKwW6VxInr2ytpMOA1hGxQVIpUFChzfyIWC+pjaRm6Wwjv6+9SPLDtczMaiAi\n9voFPevylNjzt/ufk/YeJPUGmkfEemAmcG26Iqon0At4LSLWkVt26p82xkcAz6W+ZgIj0/HVwEvp\neC4wMCWItsDAFAOYn+qS2u7qq1IR0WT+3H333Q0+Bs/V8/Rcm/5cq1LtmYak6eR+428v6T3gbuAn\nwKOS3gI+S0mAiFgi6SlgCbANGB27v30MMBU4CpgdEXNSfArwuKTlwHpgWOpro6R7gEVAABMityEO\nMBYoTOVvpD7MzKyeVZs0IuL6KoqGV1H/PuC+SuKvA6dVEv+M3GW6lfU1lVyiqRh/l9xluGZmdgD5\njvBGpqCgoKGHcMAcKnM9VOYJnmtToH2tXTUFkqKpz9HMrK5JIirZCD9kH79xwgknsGrVqoYehlWh\nR48erFy5sqGHYWYVHLJnGimLNsCILAv//Zg1rKrONLynYWZmmTlpmJlZZk4aZmaWmZNGE3Dffffx\nta99DYBVq1bRrFkzdu7cWU0rM7P9543wRuaXv/wlN954I6tXr660fNWqVZx44ols27aNZs0a7+8E\njfXvx6yp8EZ4ExER7H6vlZnZgeWkcRBq1qwZf/jDH8o/33zzzYwbN44tW7Zw6aWXsnbtWlq1akXr\n1q1Zt24dEyZMYPjwSp/qUqWpU6fSt29fWrduTa9evfjxj39cXta3b19mz55d/nnHjh106NCBN998\nE4DHHnuME044geOOO47vfe979OzZk5deemmv7zCzpsdJ4yBU1ZlEixYteOGFF+jSpQt/+tOf+Oij\nj+jUqdM+21SlY8eOzJ49m48++ohHH32U2267rTwpXHfddUyfPr287pw5czjuuOM488wzWbJkCWPG\njGHGjBm8//77bN68mbVr19ZwpmbW2DhpVEGqmz81cSDW8i+55BJOOOEEAC666CIGDRrE//zP/wBw\n/fXXM3PmTP785z8DMGPGDK677joAnn32WS6//HIuuOACDj/8cL773e/W+1jN7ODhpFGFiLr5c7B6\n4YUXuOCCC2jfvj1t27blhRde4MMPc696P+mkk+jbty+zZs3i008/ZebMmdxwww0ArF27lu7dd79P\n63Of+xzt27dvkDmY2YF3yD576mDWokULtmzZUv553bp15T+o62ITfOvWrVx11VU88cQTDB06lGbN\nmnHllVfucYYzbNgwpk+fzo4dOzj11FPp2bMnAJ07d6akpKS83qeffsr69etrPSYzaxx8pnEQOuus\ns5g+fTo7d+5kzpw5/PKXvywv69ixI+vXr+ejjz6qsn11y1tbt25l69atHHvssTRr1owXXniBoqKi\nPeoMGzaMoqIiHnnkEa6/fvcrVa666ipmzZrFggUL2LZtG+PHj6/ZJM2sUXLSOAhNmjSJmTNn0rZt\nW2bMmMGVV15ZXnbKKadw3XXXceKJJ9KuXTvWrVu3V/vqzkaOPvpoHnroIa6++mratWtHYWEhQ4cO\n3aNOp06duOCCC1iwYAHXXnttebxv3748/PDDXHvttXTp0oXWrVvToUMHjjzyyFrO2swaA9/cZ7Xy\nySefcMwxx7BixQp69OhRZ/3678esYfnmPqszzz//PJ9++imffPIJ3/rWtzj99NPrNGGY2cGr2qQh\n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\n", 4050 "text/plain": [ 4051 "<matplotlib.figure.Figure at 0x7f0cb5032610>" 4052 ] 4053 }, 4054 "metadata": {}, 4055 "output_type": "display_data" 4056 } 4057 ], 4058 "source": [ 4059 "task_util_and_freq[['util_avg', 'frequency']].plot(drawstyle=\"steps-post\")" 4060 ] 4061 }, 4062 { 4063 "cell_type": "code", 4064 "execution_count": 260, 4065 "metadata": { 4066 "collapsed": false 4067 }, 4068 "outputs": [ 4069 { 4070 "data": { 4071 "image/png": "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\nzE0j4hAgM/Ooev9fAl/MzGv6OVbX9Aj39PQ8/wuisphtubox227pEe7GbLuF2ZbLbMtltmXr2LNG\nR8QKEbFiff/FwK7ATcCFwPR6tw8AF9T3LwTeExHLRsQGwIbAtWNatCRJkiSpCG3pEa4bs+dRDX1e\nGjg9M4+MiNWAs4F1gbuAvTNzTv2YQ4EPAvOBgzPzkgGO3TU9wpLUCbqlR1iSJI2NVvQIj4uh0a1k\nQ1iSxpe114Zp0+CSS+D886uGbyMbwpIkaSg6dmi0WqN3IrnKY7bl6tZs3/UuePnL4Zxz2l3J6OnW\nbLuB2ZbLbMtltmrGhrAkadRtsQW88Y3trkKSJKni0GhJ0qhae22YMQNOPhnmzoXDD198u0OjJUnS\nUDg0WpIkSZKkIbIh3MGc+1Ausy2X2S7ZhAmL3/7jP9pd0eCZbbnMtlxmWy6zVTM2hCVJ48LWW8OC\nBYtup50Gs2e3uypJklSipdtdgIZv6tSp7S5Bo8Rsy2W2A+vtBW5c7iRmWy6zLZfZlsts1UyH/TdD\nkiRJkqSRsSHcwZz7UC6zLVe3ZHvXXfCd77S7irHVLdl2I7Mtl9mWy2zVjA1hSVLLXXIJfPSj7a5C\nkiSpfzaEO5hzH8pltuUy23KZbbnMtlxmWy6zVTM2hCVJkiRJXcWGcAdz7kO5zLZcZlsusy2X2ZbL\nbMtltmrGhrAkadSsvTZktrsKSZKkxdkQ7mDOfSiX2ZarW7KNgA98AB58sHsawt2SbTcy23KZbbnM\nVs3YEJYkjYqll64axJIkSeONDeEO5tyHcpltucy2XGZbLrMtl9mWy2zVjA1hSZIkSVJXsSHcwZz7\nUC6zLZfZlstsy2W25TLbcpmtmrEhLEmSJEnqKjaEO5hzH8pltuUy23KZbbnMtlxmWy6zVTM2hCVJ\nkiRJXcWGcAdz7kO5zLZcZlsusy2X2ZbLbMtltmrGhrAkSZIkqavYEO5gzn0ol9mWy2zLZbblMtty\nmW25zFbN2BCWJEmSJHUVG8IdzLkP5TLbcpltucy2XGZbLrMtl9mqGRvCkiRJkqSuYkO4gzn3oVxm\nWy6zLZfZlstsy2W25TJbNWNDWJIkSZLUVWwIdzDnPpTLbMtltuUy23KZbbnMtlxmq2ZsCEuSJEmS\nuooN4Q7m3IdymW25zLZcZlsusy2X2ZbLbNWMDWFJkiRJUlexIdzBnPtQLrMtl9mWy2zLZbblMtty\n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\nZg4BG4BDImI+8OLMXFetdynwzhYNuac496FcZlsusy2X2ZbLbMtltuUyWzXT9jnCEbES2JiZd45Z\ntADY2NDeXPUtADY19G+q+iRJkiRJ2mlz2rmziNgdOJP6adEt84IXtO6xf/mX4ZZbWvf44xkZgYUL\n4fHHxy5Z0d6BqI1WdHoAz7joInjf+9q7z7/4CzjrrPbus31WjNv7+c/DiSe2dySd8rGP1TPepbjL\nNa7o9ADUMis6PYCW+vSn4ZRT2rvP88+HNWvau8/xrXhezxvfCDfd1N5RDA3Ba18L27e3d7/d5oUv\nhOFh2HffmT/WihUrprzu3nvDPffAvHkz3696R1sLYeDVwABwezX/dyFwW0QcQv0I8KKGdRdWfZuB\n/cbpn9C73rWKgYEBAPbccy5Lly595sUweprEdNrDw/Crv1qjVpve9tNtb9sGe+yxgoceas/+bNse\nbf/+79e4+WZ43/vau//771/B+efD0qXd9e/RqvbVV6/g/vu7ZzztyPdzn4MlS7pjPLZt93P729/u\nzO+f226rceKJcNFF3fXvsd9+KzjyyPbv/4Ybarz85XDPPd3179Hu9gknrOCxx+D732/v/p98ssaN\nN8Ixx3T2+dueuD04OMjIyAgAQ0NDzIaWXjUaICIGgCsz83XjLPsxsCwzH4yIg4DLgEOpn/p8HbB/\nZmZE3AScAqwDvgl8NjOvnmB/Lbtq9PAwLF9ev22nLVtg2bL6baNarfbMfxCVpVuyPfNM2GOP+m07\nnXYaLFpUvy3NeNmuXg177VW/7QcnnQQHH1y/LUm3vG41+0rO9pxzYMeO+m07feQjsM8+9dtOGpvt\nD38IRxxRv22nO++E44+v3/azgQGo1eq3M7Uzr9t58+BHP/KIcC/p+qtGR8SXgX+jfqXneyPiD8es\nkkAAZOZ64ApgPXAVcHJDRfvHwMXA3cCGiYpgSZIkSZKaaemp0Zl5fJPlrxrTPhc4d5z1bgWed0S5\n35X66bTMtmRmWy6zLZfZlstsy2W2aqalR4QlSZIkSeo2FsI9bHQiucpjtuUy23KZbbnMtlxmWy6z\nVTMWwpIkSZKkvmIh3MOc+1Ausy2X2ZbLbMtltuUy23KZrZqxEJYkSZIk9RUL4R7m3IdymW25zLZc\nZlsusy2X2ZbLbNWMhbAkSZIkqa9YCPcw5z6Uy2zLZbblMttymW25zLZcZqtmLIQlSZIkSX3FQriH\nOfehXGZbLrMtl9mWy2zLZbblMls1YyEsSZIkSeorFsI9zLkP5TLbcpltucy2XGZbLrMtl9mqGQth\nSZIkSVJfsRDuYc59KJfZlstsy2W25TLbcpltucxWzVgIS5IkSZL6ioVwD3PuQ7nMtlxmWy6zLZfZ\nlstsy2W2asZCWJIkSZLUVyyEe5hzH8pltuUy23KZbbnMtlxmWy6zVTMtLYQj4uKI2BoRdzT0nR8R\nd0XEYER8PSJe0rBsTURsqJYf0dC/LCLuiIi7I+KCVo5ZkiRJklS2Vh8RXgu8bUzftcAvZeZSYAOw\nBiAiDgKOA5YARwIXRkRU21wEnJiZBwAHRMTYx+xLzn0ol9mWy2zLZbblMttymW25zFbNtLQQzswb\ngQfH9F2fmU9XzZuAhdX9lcDlmbkjM4eoF8mHRMR84MWZua5a71Lgna0ctyRJkiSpXJ2eI3wCcFV1\nfwGwsWHZ5qpvAbCpoX9T1df3nPtQLrMtl9mWy2zLZbblMttyma2a6VghHBEfBbZn5lc6NQZJkiRJ\nUv+Z04mdRsQq4B3A4Q3dm4H9GtoLq76J+ie0atUqBgYGAJg7dy5Lly59Zp7A6KdD020/8USNWm36\n20+nvW0bwPOXr1ixoi37t92/7eHhGrvvDuP9/2tlu937a3d7VL88337Jd7SvW8Zje/baKwr+e9up\n1+O999Z46KHO7X+i9n77dWb/69bVePRR6LZ/j17//ziq2frbt9e48UY45pj2Pl/bU28PDg4yMjIC\nwNDQELMhMnNWHmjCHUQMAFdm5uuq9tuBTwHLM3Nbw3oHAZcBh1I/9fk6YP/MzIi4CTgFWAd8E/hs\nZl49wf6yVc9peBiWL6/fttOWLbBsWf1Waqczz4Q99qjfttNpp8GiRfXbfrB6Ney1V/22H5x0Ehx8\ncP1WUmedcw7s2FG/baePfAT22ad+201++EM4/HC4+eb27veuu+ADH4A772zvfrvNwAB89av19wDt\ndMABMDQE8+a1d7+avoggM6P5mhNr6RHhiPgy9Y929o6Ie4GzgTOBXYHrqotC35SZJ2fm+oi4AlgP\nbAdObqho/xj4IrAbcNVERXC/qTUceVBZzLZcZlsusy2X2ZZrbLZ77gmZ9Q/r2u3Nb27/PrvNgQfC\n0UfPzmP9/Oc1dt11xZTW3Xtv2G232dmvekdLC+HMPH6c7rWTrH8ucO44/bcCr5vFoUmSJEnPsc8+\ncO+9nR5F/7rmmtl7rFoN/PxKk9ml0wPQ9PnpdLnMtlxmWy6zLZfZlstsy2W2asZCWJIkSZLUVyyE\ne9jYK+KpHGZbLrMtl9mWy2zLZbblMls1YyEsSZIkSeorFsI9zLkP5TLbcpltucy2XGZbLrMtl9mq\nGQthSZIkSVJfsRDuYc59KJfZlstsy2W25TLbcpltucxWzVgIS5IkSZL6ypxOD0DT59yHcpltubop\n2+9+F77xjc7s9+CD27/fVuumbDW7zLZcZlsus1UzFsKS1Ke+/nW46y447LD27vf44+Goo9q7T0mS\npEYWwj2sVqv5aVehzLZc3ZbtW94Cp5/e6VGUoduy1ewx23KZbbnMVs04R1iSJEmS1FcshHuYn3KV\ny2zLZbblMttymW25zLZcZqtmLIQlSZIkSX3FQriH+f1o5TLbcpltucy2XGZbLrMtl9mqmSkVwhHx\nw4j4r2P6/rk1Q5IkSZIkqXWmekR4O/CWiFgbEbtWfQtaNCZNkXMfymW25TLbcpltucy2XGZbLrNV\nM1MthH+Wmb8D3AV8OyIWAdm6YUmSJEmS1BpTLYQDIDPPBz4KXAssbLpRxMURsTUi7mjomxcR10bE\nDyLimojYs2HZmojYEBF3RcQRDf3LIuKOiLg7Ii6Y6pMrnXMfymW25TLbcpltucy2XGZbLrNVM1Mt\nhM8avZOZ1wNvA/7nFLZbW63b6Azg+sw8ELgBWAMQEQcBxwFLgCOBCyMiqm0uAk7MzAOAAyJi7GNK\nkiRJkjQlcyZbGBHLqrubG+6PanqxrMy8MSIWj+k+Fjisun8JUKNeHK8ELs/MHcBQRGwADomIYeDF\nmbmu2uZS4J3ANc32XzrnPpTLbMtltuUy23KZbbnMtlxmq2YmLYSBTzXc/xXgFqrTpKnPET58Gvt8\naWZuBcjMn0TES6v+BcB3G9bbXPXtADY19G/CC3VJkiRJkqZp0kI4M98yej8ivpeZ0yl8m/GiW9NU\nq9X8tKtQ3ZRtrQbPTFJok5tvhkWL2rvPdummbDW7zLZcpWd7441w7rnt3edNN8HRR7d3n+MpPdt+\nZrZqptkR4UazVbBujYiXZebWiJgP3Ff1bwb2a1hvYdU3Uf+EVq1axcDAAABz585l6dKlz7wQRifO\nT7f9xBM1arXpbz+d9rZtAO3bn+3Ot0d1ejyLF9cYGoKHH663h4drVX9r28uXr+Btb+v8829Fe3Bw\ncJy8OzOejRtrPPZY5/ZfWntwcLCrxmPb9lTaK1eu4PHH4c476+1W/34fbS9cWGPffaHTv39GdUse\ntmevPd7fW9u92x4cHGRkZASAoaEhZkNkTq2+jYjbMnPsPOGpbDcAXJmZr6va5wEPZOZ5EbEamJeZ\nZ1QXy7oMOJT6qc/XAftnZkbETcApwDrgm8BnM/PqCfaXU31OO2t4GJYvr9+205YtsGxZ/VZSeVav\nhr32qt+20+mnw/z59VtJkqReERFk5ozOWWx2sazP8eyR4IUR8dnG5Zl5SpPtv0z9o769I+Je4Gzg\nE8BXI+IEYJj6laLJzPURcQWwHtgOnNxQ0f4x8EVgN+CqiYpgSZIkSZKa2aXJ8luAW6ufDzfcH/2Z\nVGYen5mvyMwXZuaizFybmQ9m5lsz88DMPCIzRxrWPzczX5OZSzLz2ob+WzPzdZm5f2aeOp0nWqKx\np/WoHGZbLrMtl9mWy2zLZbblMls10+xiWZe0ayCSJEmSJLVDs1Oj/2my5Zm5cnaHo50xOoFc5THb\ncpltucy2XGZbLrMtl9mqmWZXjf5VYCPwFeDfefY7hCVJkiRJ6knN5gjPB84E/gvwGeC3gPsz81uZ\n+a1WD06Tc+5Ducy2XGZbLrMtl9mWy2zLZbZqZtJCODOfysyrM/MPgDcB9wC1iPiTtoxOkiRJkqRZ\n1uzUaCLihcBRwO8BA8BngW+0dliaCuc+lMtsy2W25TLbcpltucy2XGarZppdLOtS6qdFXwX8eWb+\nR1tGJUmSJElSizSbI/xuYH/gVODfIuLh6ueRiHi49cPTZJz7UC6zLZfZlstsy2W25TLbcpmtmmn2\nPcLNCmVJkiRJknqKhW4Pc+5Ducy2XGZbLrMtl9mWy2zLZbZqxkJYkiRJktRXLIR7mHMfymW25TLb\ncpltucy2XGZbLrNVMxbCkiRJkqS+YiHcw5z7UC6zLZfZlstsy2W25TLbcpmtmrEQliRJkiT1FQvh\nHubch3KZbbnMtlxmWy6zLZfZlsts1YyFsCRJkiSpr1gI9zDnPpTLbMtltuUy23KZbbnMtlxmq2Y6\nVghHxJqI+H5E3BERl0XErhExLyKujYgfRMQ1EbHnmPU3RMRdEXFEp8YtSZIkSeptHSmEI2Ix8F7g\nlzPzYGAO8HvAGcD1mXkgcAOwplr/IOA4YAlwJHBhREQnxt5NnPtQLrMtl9mWy2zLZbblMttyma2a\n6dQR4YeBnwO/GBFzgN2BzcCxwCXVOpcA76zurwQuz8wdmTkEbAAOaeuIJUmSJElF6EghnJkPAp8C\n7qVeAD+UmdcDL8vMrdU6PwFeWm2yANjY8BCbq76+5tyHcpltucy2XGZbLrMtl9mWy2zVTKdOjX4V\ncBqwGHgF9SPD7wJyzKpj25IkSZIkzcicDu33DcB3MvMBgIj4BvBrwNaIeFlmbo2I+cB91fqbgf0a\ntl9Y9Y1r1apVDAwMADB37lyWLl36zKdCo/MFptt+4okatdr0t59Oe9s2gOcvb5z70M7x2G59e7Sv\nW8Zje/bag4ODfPCDH3zO8vFe3+1ob9xY47HHOrf/0toXXHDBrP69sd097Wdfq90xHtv+vbXdvD3e\n39tuGp/tnc9zZGQEgKGhIWZDZLb/oGtEvB74O+CNwJPAWmAdsAh4IDPPi4jVwLzMPKO6WNZlwKHU\nT4m+Dtg/xxl8RIzXPSuGh2H58vptO23ZAsuW1W8b1Wq1Z/6DqCxmW67xsl29Gvbaq37bTqefDvPn\n1281c75uy2W25TLbcplt2SKCzJzRxZM7ckQ4M2+PiEuBW4GngO8BnwdeDFwREScAw9SvFE1mro+I\nK4D1wHbg5JZVuz3EF3e5zLZcZlsusy2X2ZbLbMtltmqmU6dGk5mfBD45pvsB4K0TrH8ucG6rxyVJ\nkiRJKtsunR6Apm/0/HmVx2zLZbblMttymW25zLZcZqtmLIQlSZIkSX3FQriHOfehXGZbLrMtl9mW\ny2zLZbblMls1YyEsSZIkSeorFsI9zLkP5TLbcpltucy2XGZbLrMtl9mqGQthSZIkSVJfsRDuYc59\nKJfZlstsy2W25TLbcpltucxWzVgIS5IkSZL6ioVwD3PuQ7nMtlxmWy6zLZfZlstsy2W2asZCWJIk\nSZLUVyyEe5hzH8pltuUy23KZbbnMtlxmWy6zVTMWwpIkSZKkvmIh3MOc+1Ausy2X2ZbLbMtltuUy\n23KZrZqxEJYkSZIk9RUL4R7m3IdymW25zLZcZlsusy2X2ZbLbNWMhbAkSZIkqa9YCPcw5z6Uy2zL\nZbblMttymW25zLZcZqtmLIQlSZIkSX2lY4VwROwZEV+NiLsi4vsRcWhEzIuIayPiBxFxTUTs2bD+\nmojYUK1/RKfG3U2c+1Ausy2X2ZbLbMtltuUy23KZrZrp5BHhzwBXZeYS4PXAfwJnANdn5oHADcAa\ngIg4CDgOWAIcCVwYEdGRUUuSJEmSelpHCuGIeAnwG5m5FiAzd2TmQ8CxwCXVapcA76zurwQur9Yb\nAjYAh7R31N3HuQ/lMttymW25zLZcZlsusy2X2aqZTh0RfiVwf0SsjYjbIuLzEfEi4GWZuRUgM38C\nvLRafwGwsWH7zVWfJEmSJEk7pVOF8BxgGfDXmbkMeIz6adE5Zr2xbTVw7kO5zLZcZlsusy2X2ZbL\nbMtltmpmTof2uwnYmJm3VO2vUy+Et0bEyzJza0TMB+6rlm8G9mvYfmHVN65Vq1YxMDAAwNy5c1m6\ndOkzL4bR0ySm237iiRq12vS3n0572zaA9u3Ptm3b7W136vW9cWONxx7r3P5t27Zt27Zt27an0h4c\nHGRkZASAoaEhZkNkduaga0R8C3hvZt4dEWcDL6oWPZCZ50XEamBeZp5RXSzrMuBQ6qdEXwfsn+MM\nPiLG654Vw8OwfHn9tp22bIFly+q3jWq12jP/QVQWsy3XeNmuXg177VW/bafTT4f58+u3mjlft+Uy\n23KZbbnMtmwRQWbO6OLJnToiDHAKcFlE/ALwI+APgRcAV0TECcAw9StFk5nrI+IKYD2wHTi5ZdWu\nJEmSJKloHTsi3Cr9dERYUhk8IixJkjR1s3FEeJfZGowkSZIkSb3AQriHjU4kV3nMtlxmWy6zLZfZ\nlstsy2W2asZCWJIkSZLUVyyEe5hXwiuX2ZbLbMtltuUy23KZbbnMVs1YCEuSJEmS+oqFcA9z7kO5\nzLZcZlsusy2X2ZbLbMtltmrGQriHDQ4OdnoIahGzLZfZlstsy2W25TLbcpmtmrEQ7mEjIyOdHoJa\nxGzLZbblMttymW25zLZcZqtm5nR6AL0kAn76Uzj++Pbu9/HH6/uWVKYI+MpX4Pbb27vf226D9763\nvfuUJEnqBhbCO2HhQvjSl+DJJ9u/71NPfX7f0NBQ28eh9jDbco2X7UknwcEHt38sRx8Nhx/e/v2W\nytdtucy2XGZbLrNVM5GZnR7DrIqIsp6QJEmSJOk5MnNG58wWVwhLkiRJkjQZL5YlSZIkSeorFsKS\nJEmSpL5iIdyFImJhRNwQEd+PiDsj4pSq/7cj4j8i4qmIWDbJ9ntGxFcj4q7qMQ5t3+g1mVnIdk21\n7R0RcVlE7Nq+0Wsy42T7gar//Oq1OBgRX4+Il0yw/dsj4j8j4u6IWN3e0WsyM8l2ote8usNMX7fV\nurtExG0R8U/tG7mamYXfyb6X6lKzkK3vpbrUJNmeExG3V9leHxELJ9h+p95LOUe4C0XEfGB+sBCH\n+QAABYJJREFUZg5GxB7ArcCxQAJPA38DnJ6Zt02w/ReBb2Xm2oiYA7woMx9uz+g1mZlkGxGLgX8F\nXpuZP4+I/w18MzMvbd8z0EQmyXYhcENmPh0RnwAyM9eM2XYX4G7gN4H/B6wDfjcz/7OtT0LjmmG2\n425rtt1hJtk2PMZpwK8AL8nMle0auyY302x9L9W9Zvg72fdSXWySbDdl5qPVOh8AXp+ZfzRm251+\nL+UR4S6UmT/JzMHq/qPAXcCCzPxBZm4AJrxCWvXp129k5tpq+x3+4u4eM8kWeBj4OfCLo3+Uqb/Q\n1QUmyfb6zHy6Wu0m6n+oxzoE2JCZw5m5Hbic+i9+dYGZZDvRtu0ZuZqZ4euW6qjEO4AvtGO8mrqZ\nZOt7qe42w9et76W62CTZPtqw2i8C94+z+U6/l7IQ7nIRMQAsBf59ipu8Erg/ItZWp2p9PiJ2b9X4\nNH07m21mPgh8CrgX2AyMZOb1rRqfpm+SbE8A/s84mywANja0N2Gx1JWmke1UtlUXmGa2nwY+TP2s\nHnWpaWTre6kesbPZ+l6qd4zNNiI+HhH3AquAc8fZZKffS1kId7HqlICvAaeO+SRkMnOAZcBfZ+Yy\n4GfAGS0aoqZpOtlGxKuA04DFwCuAPSLi+NaNUtMxUbYR8VFge2Z+uWOD04zMJNtp/j5Xm0wn24g4\nCthaHb0IJj+jRx0yzdet76V6wDRft76X6gHjZZuZH8vMRcBa4ILZ2I+FcJeqTtf4GvClzPzHndh0\nE7AxM2+p2l+j/stcXWIG2b4B+E5mPpCZTwF/D/xaK8ao6Zko24hYRf30yYn+2G4GFjW0F1Z96hIz\nyHYmr3m1wQyyfTOwMiJ+BHwFeEtEOM+wi8wgW99LdbkZZOt7qS43hb+ZX6ae41g7/V7KQrh7/S9g\nfWZ+ZoLl437ynJlbgY0RcUDV9ZvA+haMT9M3rWyBHwBviojdIiKoZ3tXKwaoaXtethHxduqnTq7M\nzCcn2G4d8JqIWFxdvfJ3Aa9A212mm+2426qrTCvbzDwzMxdl5quov2ZvyMz3tGXEmqrpZut7qe43\n3d/JvpfqfuNl+5qG5e8EBsfZbqffS3nV6C4UEW8G/i9wJ/V5RwmcCewGfA7YBxgBBjPzyIh4OfC3\nmXl0tf3rqV+44xeAHwF/mJkPtf2J6HlmIdsPU58b8RTwPeCPqgsCqMMmyPajwGeBXYFt1ao3ZebJ\n42T7duAz1D+gvDgzP9Hmp6AJzCTbiV7zmXl1m5+GxjHT123D4xwGfCi9anTXmIXfyb6X6lKzkK3v\npbrUJO+T/wg4ENhB/fV4UmbeN9P3UhbCkiRJkqS+4qnRkiRJkqS+YiEsSZIkSeorFsKSJEmSpL5i\nISxJkiRJ6isWwpIkSZKkvmIhLEmSJEnqK3M6PQBJkvSsiNgL+Bfq35/4curfdXkfEMBjmfnrHRye\nJElF8HuEJUnqUhFxFvBoZv5Vp8ciSVJJPDVakqTuFc9pRDxS3R4WEbWI+IeIuCciPhER746ImyPi\n9oh4ZbXePhHxtYj49+rn1zrxJCRJ6jYWwpIk9Y7G07gOBt4HHAT8PvCazDwEuBj4QLXOZ4C/ysxD\ngd8GvtDGsUqS1LWcIyxJUm9al5n3AUTEPcA1Vf+dwIrq/luBJRExemR5j4h4UWb+rK0jlSSpy1gI\nS5LUm55suP90Q/tpnv37HsChmbm9nQOTJKnbeWq0JEm9I5qv8hzXAqc+s3HE62d3OJIk9SYLYUmS\nesdEX/UwUf+pwBuqC2j9B/D+1gxLkqTe4tcnSZIkSZL6ikeEJUmSJEl9xUJYkiRJktRXLIQlSZIk\nSX3FQliSJEmS1FcshCVJkiRJfcVCWJIkSZLUVyyEJUmSJEl9xUJYkiRJktRX/j9bv+UFGAK2FgAA\nAABJRU5ErkJggg==\n", 4072 "text/plain": [ 4073 "<matplotlib.figure.Figure at 0x7f0c785c7850>" 4074 ] 4075 }, 4076 "metadata": {}, 4077 "output_type": "display_data" 4078 } 4079 ], 4080 "source": [ 4081 "import matplotlib.gridspec as gridspec\n", 4082 "\n", 4083 "t_min = 21.5\n", 4084 "t_max = 23.0\n", 4085 "\n", 4086 "gs = gridspec.GridSpec(2, 1, height_ratios=[2,1]);\n", 4087 "\n", 4088 "plt.figure(figsize=(16, 8));\n", 4089 "plt.suptitle(\"Task Utilization vs Frequency\",\n", 4090 " y=.97, fontsize=16, horizontalalignment='center');\n", 4091 "\n", 4092 "# Plot Utilization\n", 4093 "data = task_util_and_freq['util_avg']\n", 4094 "axes = plt.subplot(gs[0,0]);\n", 4095 "data.plot(ax=axes, drawstyle='steps-post');\n", 4096 "axes.set_title('Task [{}] Utilization'.format(task_name));\n", 4097 "axes.set_ylabel('Utilization')\n", 4098 "axes.set_xlim(t_min, t_max);\n", 4099 "axes.grid(True);\n", 4100 "axes.set_xticklabels([])\n", 4101 "axes.set_xlabel('')\n", 4102 "\n", 4103 "\n", 4104 "# Plot Frequencies\n", 4105 "data = task_util_and_freq['frequency']/1000\n", 4106 "axes = plt.subplot(gs[1,0]);\n", 4107 "data.plot(ax=axes, drawstyle='steps-post');\n", 4108 "axes.set_title('Frequencies');\n", 4109 "axes.set_ylabel('MHz')\n", 4110 "axes.set_xlim(t_min, t_max);\n", 4111 "axes.grid(True);" 4112 ] 4113 }, 4114 { 4115 "cell_type": "markdown", 4116 "metadata": {}, 4117 "source": [ 4118 "Plots can be much better with just a little bit of setup and using the proper APIs.<br>\n", 4119 "That's why **LISA** aims at providing a **predefined set of plot functions** for commonly used analysis." 4120 ] 4121 }, 4122 { 4123 "cell_type": "markdown", 4124 "metadata": {}, 4125 "source": [ 4126 "## Using TRAPpy LinePlotter" 4127 ] 4128 }, 4129 { 4130 "cell_type": "code", 4131 "execution_count": 306, 4132 "metadata": { 4133 "collapsed": false 4134 }, 4135 "outputs": [ 4136 { 4137 "name": "stderr", 4138 "output_type": "stream", 4139 "text": [ 4140 "08:01:48 INFO : Table for 'cpu_frequency' events:\n" 4141 ] 4142 }, 4143 { 4144 "data": { 4145 "text/html": [ 4146 "<div>\n", 4147 "<table border=\"1\" class=\"dataframe\">\n", 4148 " <thead>\n", 4149 " <tr style=\"text-align: right;\">\n", 4150 " <th></th>\n", 4151 " <th>__comm</th>\n", 4152 " <th>__cpu</th>\n", 4153 " <th>__pid</th>\n", 4154 " <th>cpu</th>\n", 4155 " <th>frequency</th>\n", 4156 " <th>start</th>\n", 4157 " <th>delta</th>\n", 4158 " </tr>\n", 4159 " <tr>\n", 4160 " <th>Time</th>\n", 4161 " <th></th>\n", 4162 " <th></th>\n", 4163 " <th></th>\n", 4164 " <th></th>\n", 4165 " <th></th>\n", 4166 " <th></th>\n", 4167 " <th></th>\n", 4168 " </tr>\n", 4169 " </thead>\n", 4170 " <tbody>\n", 4171 " <tr>\n", 4172 " <th>0.661132</th>\n", 4173 " <td>kschedfreq:2</td>\n", 4174 " <td>2</td>\n", 4175 " <td>119</td>\n", 4176 " <td>2</td>\n", 4177 " <td>1807000</td>\n", 4178 " <td>0.661132</td>\n", 4179 " <td>0.000004</td>\n", 4180 " </tr>\n", 4181 " </tbody>\n", 4182 "</table>\n", 4183 "</div>" 4184 ], 4185 "text/plain": [ 4186 " __comm __cpu __pid cpu frequency start delta\n", 4187 "Time \n", 4188 "0.661132 kschedfreq:2 2 119 2 1807000 0.661132 0.000004" 4189 ] 4190 }, 4191 "execution_count": 306, 4192 "metadata": {}, 4193 "output_type": "execute_result" 4194 } 4195 ], 4196 "source": [ 4197 "# Consider the data frame for the frequency switching events\n", 4198 "logging.info(\"Table for 'cpu_frequency' events:\")\n", 4199 "ftrace.cpu_frequency.data_frame.head(1)" 4200 ] 4201 }, 4202 { 4203 "cell_type": "code", 4204 "execution_count": 309, 4205 "metadata": { 4206 "collapsed": false 4207 }, 4208 "outputs": [ 4209 { 4210 "data": { 4211 "image/png": "iVBORw0KGgoAAAANSUhEUgAAA60AAAHRCAYAAACB2l9MAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8VNX9//H3JIRAEkoMGKRgWAREliACghhkUb8u0H5B\nFBG1YkW/iD9BUDEItrW2bG6EVS22+v0CikpBRa0gexQVVJBNkUUWC7JEkDQsCZnfHzDXzGQmmSxD\nzj15PR8PHzIzdznve8+dM5+ZOROP1+v1CgAAAAAAA0VVdAMAAAAAAAiFohUAAAAAYCyKVgAAAACA\nsShaAQAAAADGomgFAAAAABirSkU3AAAAAOXP6/Xq+++/16lTpyq6KQBQrKpVq6phw4byeDyFHvPw\nJ28AAADss3PnTlWtWlVxcXEV3RQAKFZOTo5OnTqlRo0aFXqMrwcDAABY6NSpUxSsAFwjLi4u5DdD\nKFoBAAAAAMaiaAUAAAAAGIuiFQAAANZ57bXXdOONN1Z0M86JBx54QGPHjq3oZpTJwYMH1bNnTzVo\n0EB/+MMfKro5FeLvf/+7mjdvrpSUFB05cqSim2MUfj0YAAAA51SbNm106NAhRUdHKz4+Xj169NDT\nTz9d7nNwg/0KaUns2bNHl156qeLj4/3unzx5snr37l2mbcPfq6++qtq1a2vXrl0V3ZQKkZeXpyee\neEKLFy9WixYtKro5xuGTVgAAgEqoSmZmhW3D4/Ho9ddf1+7du7Vs2TKtW7dOzz77bJnbEwkej0e7\ndu3S7t27nf8oWMvfnj17dPHFF4d8/PTp0+ewNefejz/+qJMnT4Y8BrbnLw5FKwAAQCVUkUWrdObv\nyErSBRdcoGuuuUZbtmzRnDlz1KlTJ6WkpKhdu3Z65ZVXnOU//vhjtWrVStOmTdPFF1+sli1bas6c\nOc7jP/30kwYMGKAGDRro2muv1c6dO/32N2rUKLVu3VoNGjTQ1VdfrU8//dR57Msvv9TVV1+tBg0a\n6JJLLtETTzwRtK0F5ebmqmvXrvrb3/4mScrPz9cNN9ygZ555xtnmddddp0aNGqlly5Z67LHHlJeX\n56xfq1Yt/f3vf1f79u3VoEEDjR07Vt9//72zzqBBg5zlfdmff/55NW3aVG3bttVbb70V8th++OGH\n6tq1qxo1aqQbbrhBmzdvdh7LyMhQy5YtlZKSoo4dO2rVqlVBt5Gfn6/nnntO7dq1c47Zv//9b6ft\nL730ki677DI1a9ZMf/zjH531JkyYoMGDBzu39+zZo1q1aik/Pz9kex944AG9/vrrmjx5slJSUrRy\n5UpNmDBBAwcO1ODBg9WwYUO99tpr8nq9mjRpktq1a6emTZvqnnvu0dGjR53tzJ07V23atFHTpk31\n3HPP6dJLL9XKlSudfRT8CrXvmPrs379fd911l5o1a6bLLrtML730kl+m3//+9xoyZIhSUlJ05ZVX\nav369c7jP/zwg373u9+pWbNmatq0qdLT05Wbm6uLLrpIW7ZscZY7dOiQ6tevr6ysLL/827dvV6dO\nnSRJjRo1Up8+fZzj/PLLL6tDhw7q0KGDJGnr1q266aabdNFFF6ljx45asGCBs53Aa2Ds2LHOV+SD\nnYff/va3mjVrlnN71qxZ6tSpky666CLdcsst2rt3r/NYrVq19Morr6hDhw5q3LixRo4c6Zfh1Vdf\nda7dzp07a8OGDZoyZYruuusuv+XS09P1+OOPq6QoWgEAAFBh9u7dq8WLF6t169Y6//zzNXfuXO3e\nvVtTp07VmDFjtGHDBmfZAwcOKDs7W5s3b9akSZM0cuRI/fzzz5KkRx55RNWrV9e3336ryZMna/bs\n2X77adeunTIzM7Vz50717dtXd999t/PnNUaNGqXBgwdr165d+uKLLwp9khqsaI2JidELL7yg8ePH\na+vWrXr++eeVn5+vhx9+WJIUHR2tsWPHaseOHfrwww+1cuVKvfzyy37bWLZsmVasWKFFixZpypQp\neuihhzRz5kx9/fXX2rRpk+bNm+eX/aefftLmzZs1bdo0DR8+XNu3by/Urq+//lpDhw7VpEmTtGPH\nDg0cOFADBgxQbm6utm3bppkzZ2rZsmXavXu35s2bp5SUFEnSp59+qsaNGzvbmTp1qubPn68333xT\nu3bt0pQpU/y+vv3+++9r+fLlWrZsmT744AO/4ifwa9nFfU172rRpuvnmmzV06FDt3r1bV111lSTp\nX//6l3r37q3vv/9et9xyi1588UV98MEHeu+997R582YlJibqkUcekSR98803evTRR/Xiiy9q8+bN\nysrK0r59+4rcr69dXq9XAwYMUGpqqrZs2aIFCxboxRdf1LJly5xlP/zwQ/Xt21e7du3S9ddfr0cf\nfVTSmeL+tttuU4MGDZzz1qdPH8XExKhv37568803nW3MmzdPXbt2VVJSkqQzBepnn32miy66SJ98\n8okkadeuXZo/f77fcf7oo4+0evVq5eTkqG/fvurXr5+2bduml19+WY8++qi2bt0qKfg1UPDYF3Ue\n3n//fWVkZGjWrFn67rvvdMUVV2jQoEF+yyxatEhLly7VypUrtWDBAi1dulSStGDBAj399NN68cUX\ntXv3bs2ZM0fnnXee+vXrp2XLljnX6OnTpzV//nzddtttRZ6XYChaAQAAKokqmZmqNn68qo0fr+oT\nJ+q8pKQy/Vd94kRneyX91PWOO+5Q48aN1atXL3Xp0kUjRozQtddeqwYNGkiSrrjiCnXv3l2rV692\n1qlataoeffRRRUdH69prr1V8fLy+++475efna+HChXr88cdVrVo1XXLJJYVeGN98882qWbOmoqKi\nNGTIEJ08eVLbtm1ztrtjxw5lZWUpLi5O7dq1c9bzer1q2rSpGjdurEaNGqlx48b67rvvJEmXXHKJ\nHn74Yd15552aPn26XnzxRacwaNOmjdq1ayePx6P69evrrrvu0scff+zXpqFDhyo+Pl4XX3yxLrnk\nEvXo0UMXXnihatSooWuuuUZff/21s6zH49Hjjz+umJgYde7cWddee63fp2w+//u//6uBAweqbdu2\n8ng8uvXWWxUbG6u1a9cqOjpaubm52rJli/Ly8lS/fn3neHfq1Ek7duxwtjN79myNGTPGKWRbtGih\nxMRE5/Fhw4bpV7/6lerVq6fBgwf7FdjlpUOHDrr++uslSbGxsXrllVc0ZswYXXDBBYqJidGjjz6q\nd955R/n5+Xr33Xd13XXXqVOnToqJidHjjz8e9pzmL774QocPH9bDDz+s6OhopaSk6M4779Q///lP\nZ5mOHTvq6quvlsfjUb9+/ZxPr9euXasff/xRTz75pKpVq6aqVauqY8eOkqR+/fr5fSL+xhtvqF+/\nfs7tnTt3Osv6BL5BMmLECNWsWVOxsbH68MMP1aBBA/Xv318ej0etWrXSb37zG7399tthXQNFeeWV\nV/TQQw+pSZMmioqK0kMPPaSNGzf6fdr60EMPqUaNGqpfv77S0tK0ceNGSWc+oR06dKjatGkjSWrY\nsKHq16+vOnXqqFOnTnr77bclSR999JFq1aql1q1bh90uH36ICQAAoJLIS0tTXlqac/tEenqZtldt\n/PhSb2P27Nnq0qWL332LFy/W008/re3btys/P18nTpzw+1Ga8847T1FRv3zmUr16df3nP//RoUOH\ndPr0af361792Hqtfv77ftqdMmaLZs2frxx9/lCRlZ2fr8OHDks78sNLYsWPVsWNHNWjQQCNHjtR/\n/dd/STpTLG7fvj1kAdS/f3/95S9/0W9/+1s1bNjQuX/79u0aM2aM1q1bp+PHj+v06dPOi3qf888/\n3/l3tWrVlJyc7Hf74MGDzu3ExERVq1bNuX3hhRdq//79hdqzZ88ezZ071/nastfrVV5envbt26cr\nrrhCf/3rXzVhwgR9++236tGjh5566ildcMEFhbbzww8/OAVtMAWPdai2lFW9evX8bu/du1d33nmn\n0we8Xq9iYmJ04MAB7d+/32/5uLg45xPN4uzdu1f79u1zCnSv16v8/Hx17tzZWaZOnTp+2z5x4oTy\n8/P173//WxdeeKFfv/Rp3769qlevro8//ljJycnauXOnbrjhhvAPgPyP8549e7R27Vq/dp4+fVr9\n+/fXoUOHlJeXV+Q1UJQ9e/Zo1KhRzlfjvV6vPB6P9u3b52ynYP+sXr26srOzJZ3pK40aNQq63Vtv\nvVWvvvqq7rzzTr355pu69dZbw25TQRStAAAAOOcCP1E6deqU7r77br3wwgu68cYbFRUVpTvvvDPo\nV3MD1a5dW9HR0frhhx/UpEkTSWdeSPusXr1aU6dO1dtvv63mzZtLkho3buxsu1GjRk6R984772jg\nwIF+X731vYAP5pFHHtF1112npUuX6tNPP3XmJj7yyCNKTU3Vyy+/rLi4OL3wwgt69913wz08hRw5\nckTHjx9X9erVJZ0ptIL9ymy9evU0YsQIDR8+POh2+vbtq759+yo7O1vDhw/Xn//8Z02fPj3odr7/\n/nvneAX64YcfnB8N2rt3r1P4xsXFKScnx1muLMVs4DGvV6+epkyZossvv7zQsnXq1HE+AZeknJwc\nv7mj8fHxOn78eNB21atXTw0bNtTnn39e4jbWq1dPe/fuVX5+ftDC9bbbbtPcuXNVp04d/fa3v1XV\nqlVLtP2Cx6BevXq68sorg36qnZ+fr5iYmJDXgO+r3Tk5OUpISJAk5w0c37YfeeQR9e3bt0Tt860b\nOIfcp2fPnho5cqS2bNmiRYsW6cknnyzx9iW+HgwAAFApFfzEtSK34XPq1CmdOnVKtWrVUlRUlBYv\nXuw3p7AoUVFR+s1vfqMJEybo+PHj+uabb/Taa685j2dnZ6tKlSpKSkrSqVOnNHHiROdTIkl68803\nnU9df/WrX8nj8fh9mheqcJ47d66+/vprTZs2TePGjdMDDzzgFGzHjh1TjRo1FBcXp61bt+of//hH\nqY6Lj9fr1fjx45Wbm6vVq1dr8eLFQX/F+He/+53+8Y9/6IsvvpAk/ec//9HixYv1n//8R9u2bdOq\nVat06tQpVa1aVdWqVQtZjN9xxx3OnFxJ2rx5s9/fDp0yZYqOHj2qvXv36oUXXtBNN90kSWrdurVW\nr16tvXv36ueff1ZGRkaZchc0cOBA/eUvf3G+snro0CF98MEHks78qNCHH36ozz77TLm5uRo3bpzf\neWvVqpUWL16sI0eO6Mcff9SLL77oPNauXTslJCRo8uTJOnHihE6fPq0tW7boq6++CtkW37bbtWun\nOnXq6Mknn1ROTo5Onjypzz77zFnu5ptv1nvvvac333xT/fv3LzJfcW/QXHfdddq+fbveeOMN5eXl\nKTc3V1999ZW+++47RUVFqVevXiGvgVq1aqlu3bp68803lZ+fr1mzZun77793Hr/77rv13HPP6Ztv\nvpEk/fzzz87Xeotz5513aurUqc6PU+3cudM5R9WqVVOvXr103333qV27doU+PQ8XRSsAAEAlVJFF\na7BCKSEhQePHj9fdd9+txo0ba/78+cV+lbLgdiZMmKDs7GxdcsklevDBB3X77bc7j1199dXq0aOH\nOnTooLZt26p69ep+L56XLFmizp07KyUlRaNHj9bLL7+s2NhYZx+NGjVSSkqK89+MGTO0d+9ejRkz\nRjNmzFBcXJz69u2rtm3bavTo0ZKkp556Sm+++aZSUlI0YsQI5xdhQx2D4uZf1qlTR4mJiWrRooUG\nDx6s5557ThdddFGhdS+99FJNmjRJjz32mBo3bqzLL7/cKV5OnTqlJ598Uk2bNlWLFi10+PBh/eEP\nf5B05oeYfD/KJJ35td3evXurb9++atCggYYOHer3SeWNN96o7t27q3v37rr++ut1xx13SJK6deum\nPn36qEuXLrr66qt13XXXFZkr3PySNHjwYN1www1Om66//np9+eWXkqTmzZvr6aef1r333qsWLVoo\nKSnJ76uyt956q1q2bKk2bdrolltucYps6cybHq+99po2bNigtm3bqlmzZnrooYd07NixYtsbFRWl\nOXPmaMeOHUpNTVXr1q395hrXr19fqamp8ng8zqfwPikpKX6/Yl1cn0hISNC8efP0z3/+Uy1atFCL\n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\nbZuOHDmi48ePq0mTJpKkq666yllnzZo1zrY6deqkjRs3SpLWr1+v1NRUxcXFKT4+Xqmpqc4LiI0b\nN6pjx46SpK5du+rzzz8v84Eoq3P5YiAS65vIxkyAG7jt2mOcCk9FjzNu61emKm3RivLFMa9YHP/K\np1RzWo8eParExERJUmJioo4ePSpJysrKcr4yJUlJSUnKyspSVlaWatWq5dxfq1YtZWVlOev4HouK\nilJcXJyys7MLrePb1rFjx5SQkKCoqChnWz/99FNpYrgW8wbMwzlBJNG/So5xqmLZ0mdtySHZlcUm\ntpwXW3LAXMXOaQ2Hx+Mpj81IkvM1rbIucy5Uycx03umpPnGic39eWpry0tL8HpekxDp1lNehg/JT\nUiRJcUOGSJJqdOmiKps2SZK80dHynD6tKpmZygvx9apmc+Y4t71RUfLk5/vtP27IEJ0aMCDo+hWt\n0DGpW1cnhg1zHpOkhF69JJ05pt6oKNXo0kX5ycmSJK+kUL2t2vjxzrEvTtyQIYravdu57fV45Ano\nVzW6dDnTxjp1JEnxffv6PV6zQQPn31eMGuXXjoL/D2yT7xj49u/L642JCStD4DH07SvUetXGj3f2\n5esvvmy+PijJ6Zeni2iHL5N0pq86bY+NlefkyaDL+cTOmCHP2cLBlzehVy9nv4FqdOnit3xBv0pN\n/WU7ZzMVFOo6CjxuBc+7ry2nBgwIuk/TBPaDwHMgBT8PxflVaqqi9+49s02dud4KHuOSXGcmYZwq\n2zgV37evqi5b5lxbUui+4PZxSvrlucKXw3ctxc6YIemX45J4/vmSfhkvpMiPU9UnTnTOQ+CxLdgO\nyaxxynd/qPV8x9Qt45TvNUrB8aigguNL4HIFH2s2Z46qSE6OosYpb3S0c+24AeMUylOpPmlNTEzU\nkSNHJElHjhxRzZo1JZ15l/nQoUPOcocPH1ZSUpKSkpJ0+PDhQvf71vE9lp+fr+PHjyshISHktmrU\nqKGcnBzln+2YBbdVnILvAmVmZpb59nJJJ9LTdSI9XZL0UVqaTqSnKy8tze9xSfq2f395cnOVvXCh\ncqZPlyQtOvukc2zVKmeZIwcPSpKWh2hvXlqaks+u/23//jpS4Bh927+/JCln+vSQ6xd1bMr7+IRq\nv98xOXnSub387LLZCxc66x05dEjHVq3Sh8OHn8l79pOPgo6PHCnpzPH3PUEV155FAwboX2f3e3zk\nSC18++1C2/1g3DhJkic3V5L04fDhzvLf9u+v92bP1vGRI3V85EitPrusdOacf9u/f6H+4Nt/Xlqa\nPkpL06IBA3R85EhlL1yob/v318J584IuH9h+3/ofpaX5ZV8uBV3+RHq6Fg0Y4PSX4yNH6oNx4/Rt\n//7KmT5dOdOna9GAAc72fv7xx0LbK5jNl2/h/PnKXrjwzPF7802/5QLbJ0lLWrf2X3/ePOd68PXd\nwOP/89df+23Dd/zfP3sNSGf6SMH1j48cqYVn5y8G9ofAAezI4cPO+fxXerpypk8POsgFXjvh9PeS\nLB+4TnGPSyr0/BJ4DiT/56fi3gX3HcOfv/7auX0kK+vM8VywwHn8RHp6sc8v4eSNNMap8h2n/jNv\nniRp4fz5xT7vuH2ckn557th6Nr/vGC1p3dppvySngD+2apXzvFpwnPLlLe9xyvdaYeGCBX7HyDdu\nmThOSQo5Tvnyum2cWrhgQchxyu98HTqk9wts48jhw86/k8+OO+GMUwvnz2eckj3jFEomrE9avV6v\n37vG7dq10/Lly9W7d28tX75c7du3lyS1b99ekydPVq9evZSVlaX9+/erSZMm8ng8iouL07Zt23TR\nRRdp5cqVuuGGG5x1VqxYoaZNm2r16tVq1aqVJKlNmzZ6/fXXnYF/w4YNuv322yVJLVu21KeffqrO\nnTtrxYoVzv6LU3CSeOCE8bLeLm77KUHepQu2zIkS7K/g8oH7CGf9oh6P9O3A9hbXxrS0NFXLzPTL\nG2yZ8mxfUcukpKQoOS1NOvsEF+xcJofTnrPrh718iPXDWb7g8Qt2u6jtBSppvsBlAtcP5/oo6rHi\n+lJJ8xS3v3P9/FHc8sW1P9Q2Cgo8hoHPR9VCnMvS3I4ExqlzM06lFfG8Z+M4VZI2Bhuninpuqmzj\nVOAylW2cCnweLclroGDtCWd/5Xk78D7GKZxrxX7SmpGRoSeeeEL79u3T/fffr2XLlql3797asGGD\nhg0bpo0bN6p3796SpPr16+uKK67Q8OHDNW7cOA0aNMj5StY999yjGTNmaNiwYbrgggt06aWXSpJ6\n9Oihn3/+WUOHDtX777+vAWff1UxISFDfvn2Vnp6u0aNH6+abb3Z+aOP222/XwoULNWzYMGVnZ6tH\njx4ROTjlKS+MiyGcZaRf3jkKXD7c9U3x1dlPPsIVKl9Zc5d0/by0X94p9/078N25cLdZcDulUZL1\nAvcVbN1gWYrbb1FtCPeclWQbododzrZCbd/0a6e4c1Ie7Q91nMvaR88FxqnyUdLnraLYMk6V9JOX\n4ggvoSYAACAASURBVK6j0mKc8l/GjeNUqDaFm8X0a4dxCpFW7Cetw87ONwz0xBNPBL2/T58+6tOn\nT6H7GzdurGeffbbQ/TExMRoxYkTQbXXr1k3dunUrdH9ycrLGjh1bRKvNU55Fa6jl3XaxHj77Natw\nmVS0Fvq3RS8GArMUt18TXgyUtWh1u8r+YoBxqnyUZ9EaalmT+1F5MKloLfRvxqkSte9cFa3hsOG6\nqezjFMquVHNaUbHSLLkobckhkQWRxTmB29jSZ23JIZHFVLZksSUHzEXRCgAAAAAwFkWrC9ny62a2\n5JDIgsjinMBtbOmztuSQyGIqW7LYkgPmomgFAAAAABiLotWFbJk3YEsOiSyILM4J3MaWPmtLDoks\nprIliy05YC6KVgAAAACAsShaXciWeQO25JDIgsjinMBtbOmztuSQyGIqW7LYkgPmomgFAAAAABiL\notWFbJk3YEsOiSyILM4J3MaWPmtLDoksprIliy05YC6KVgAAAACAsShaXciWeQO25JDIgsjinMBt\nbOmztuSQyGIqW7LYkgPmomgFAAAAABiLotWFbJk3YEsOiSyILM4J3MaWPmtLDoksprIliy05YC6K\nVgAAAACAsShaXciWeQO25JDIgsjinMBtbOmztuSQyGIqW7LYkgPmomgFAAAAABiLotWFbJk3YEsO\niSyILM4J3MaWPmtLDoksprIliy05YC6KVgAAAACAsShaXciWeQO25JDIgsjinMBtbOmztuSQyGIq\nW7LYkgPmomgFAAAAABiLotWFbJk3YEsOiSyILM4J3MaWPmtLDoksprIliy05YC6KVgAAAACAsSha\nXciWeQO25JDIgsjinMBtbOmztuSQyGIqW7LYkgPmomgFAAAAABiLotWFbJk3YEsOiSyILM4J3MaW\nPmtLDoksprIliy05YC6KVgAAAACAsShaXciWeQO25JDIgsjinMBtbOmztuSQyGIqW7LYkgPmomgF\nAAAAABiLotWFbJk3YEsOiSyILM4J3MaWPmtLDoksprIliy05YC6KVgAAAACAsShaXciWeQO25JDI\ngsjinMBtbOmztuSQyGIqW7LYkgPmomgFAAAAABiLotWFbJk3YEsOiSyILM4J3MaWPmtLDoksprIl\niy05YC6KVgAAAACAsShaXciWeQO25JDIgsjinMBtbOmztuSQyGIqW7LYkgPmomgFAAAAABiLotWF\nbJk3YEsOiSyILM4J3MaWPmtLDoksprIliy05YC6KVgAAAACAsShaXciWeQO25JDIgsjinMBtbOmz\ntuSQyGIqW7LYkgPmomgFAAAAABiLotWFbJk3YEsOiSyILM4J3MaWPmtLDoksprIliy05YC6KVgAA\nAACAsShaXciWeQO25JDIgsjinMBtbOmztuSQyGIqW7LYkgPmomgFAAAAABiLotWFbJk3YEsOiSyI\nLM4J3MaWPmtLDoksprIliy05YC6KVgAAAACAsShaXciWeQO25JDIgsjinMBtbOmztuSQyGIqW7LY\nkgPmomgFAAAAABiLotWFbJk3YEsOiSyILM4J3MaWPmtLDoksprIliy05YC6KVgAAAACAsShaXciW\neQO25JDIgsjinMBtbOmztuSQyGIqW7LYkgPmomgFAAAAABiLotWFbJk3YEsOiSyILM4J3MaWPmtL\nDoksprIliy05YC6KVgAAAACAsShaXciWeQO25JDIgsjinMBtbOmztuSQyGIqW7LYkgPmomgFAAAA\nABiLotWFbJk3YEsOiSyILM4J3MaWPmtLDoksprIliy05YC6KVgAAAACAsShaXciWeQO25JDIgsji\nnMBtbOmztuSQyGIqW7LYkgPmomgFAAAAABiLotWFbJk3YEsOiSyILM4J3MaWPmtLDoksprIliy05\nYC6KVgAAAACAsShaXciWeQO25JDIgsjinMBtbOmztuSQyGIqW7LYkgPmomgFAAAAABiLotWFbJk3\nYEsOiSyILM4J3MaWPmtLDoksprIliy05YC6KVgAAAACAsShaXciWeQO25JDIgsjinMBtbOmztuSQ\nyGIqW7LYkgPmomgFAAAAABiLotWFbJk3YEsOiSyILM4J3MaWPmtLDoksprIliy05YK4qZVl5/vz5\nWrVqlaKiopSSkqIhQ4boxIkTmjRpkg4ePKjk5GQNHz5ccXFxzvLLli1TdHS0Bg4cqDZt2kiSduzY\noenTpys3N1dt27bVwIEDJUl5eXmaOnWqduzYoRo1amj48OGqXbu2JGn58uWaP3++JOmmm25S165d\nyxIFAGAhxikAANyv1J+0Hjx4UEuWLNHEiRP1zDPP6PTp08rMzNSCBQvUunVrZWRkqGXLls6AvXfv\n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\nDunuu+/Wrl279PnPfz4xYff09Oivf/2rOjs7tWnTJj3//PMKgkCS9Pzzz+v73/++du3apX//+986\nefKkJOlPf/qTGhoatHv3bn3961/Xiy++KEnq7+/XH/7wB23btk1bt27V73//e129erWYKF6xsm7A\nSg6JLC6ykkOylWW8MU+VhpUxayWHRBaEiz5B2AouWq9evarTp0/rgQcekCRVVlaqrq5Ox48fT3ya\n3NLSou7ubknS8ePH9ZWvfEWVlZWaMmWKpk6dqjNnzujKlSu6du2aZs2aJUm6//77E6/p7u5OHOvL\nX/6y/vnPf0qS/v73v2v27Nmqq6tTfX29Zs+enfgFAgAAiXkKAAArCi5aL1y4oAkTJmj//v368Y9/\nrF/96le6fv26+vr61NTUJElqampSX1+fJKm3tzfxlSlJikaj6u3tVW9vryZPnpzYPnnyZPX29iZe\nE3+uoqJCdXV16u/vH/Ga+LHKhZV1A1ZySGRxkZUckq0s44l5qnSsjFkrOSSyIFz0CcJWcNEai8V0\n9uxZPfjgg9q+fbtqamp06NChEftFIpGiGpgs/jUtAABGwzwFAIANBRet0WhUkydP1syZMyXd/FrU\n2bNn1dTUpCtXrkiSrly5osbGxsT+ly5dSrz+8uXLikajikajunz58ojt8dfEn4vFYrp27ZoaGhoy\nHms0yZ8CdXV1jenjbOfK9DjbPumOHd8WXzdQTPvSHTvM65PL9Sr2+GHmGa29YeQp1eP58+cXlC/b\n86n75HK9872/xno85Hu+Ys6fLl8ubcjn+KO9H5Ty/g8L89T4z1NxzFPMU2E+tjJPjfV4yvd8+eyf\nLl8ubcjn+KO9HxRz/GLvJ5ReJCjiY+HNmzfre9/7nj75yU/qlVde0fXr1yVJDQ0NWr58uQ4dOqSP\nPvpIjz76qHp6erR7925t3bpVvb292rJli3bv3q1IJKKnn35aa9as0cyZM9XR0aElS5Zozpw5ev31\n13X+/HmtXbtWx44dU3d3t5544gn19/dr06ZN2r59u2KxmDZt2qSOjg7V19dnbOvhw4c1b968QqNm\nNSnpF5H3k77+lbo93X6ZtiXvH/859djvZ/iqWbrnUo+V2q5MxwpLuoyp7Sz0mPnsN9prJqX5JTPb\ndc/2fCmMVd/mkm20+yDXdqTbP9u9M1qb0t0L+Y6TXM9XyHmSj53L8dPdM6Ndk9T7LVnye8BoGcdi\n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\n", 4212 "text/plain": [ 4213 "<matplotlib.figure.Figure at 0x7f0c7d426990>" 4214 ] 4215 }, 4216 "metadata": {}, 4217 "output_type": "display_data" 4218 } 4219 ], 4220 "source": [ 4221 "# It is possible to mix in the same plot multiple events\n", 4222 "\n", 4223 "# The LinePlot module requires to specify a list of signals to plot.\n", 4224 "# Each signal is defined as:\n", 4225 "# <event>:<column>\n", 4226 "# where:\n", 4227 "# <event> is one of the events collected from the trace by the FTrace object\n", 4228 "# <column> is one of the column of the previously defined event\n", 4229 "my_signals = [\n", 4230 " 'cpu_frequency:frequency',\n", 4231 "]\n", 4232 "\n", 4233 "# These two paramatere are passed to the LinePlot call as long with the\n", 4234 "# TRAPpy FTrace object\n", 4235 "trappy.LinePlot(\n", 4236 " \n", 4237 " # FTrace object\n", 4238 " ftrace,\n", 4239 " \n", 4240 " # Signals to be plotted\n", 4241 " signals=my_signals,\n", 4242 " \n", 4243 " # Generate one plot for each value of the specified column\n", 4244 " pivot='cpu',\n", 4245 " \n", 4246 " # Generate only plots which satisfy these filters\n", 4247 " filters = {\n", 4248 " # Column\n", 4249 " # | Values\n", 4250 " # | |\n", 4251 " 'cpu' : [0, 1]\n", 4252 " },\n", 4253 " \n", 4254 " # Formatting style\n", 4255 " drawstyle='steps-post',\n", 4256 " marker = '+'\n", 4257 "\n", 4258 ").view()" 4259 ] 4260 }, 4261 { 4262 "cell_type": "markdown", 4263 "metadata": {}, 4264 "source": [ 4265 "## Using TRAPpy Interactive LinePlotter" 4266 ] 4267 }, 4268 { 4269 "cell_type": "code", 4270 "execution_count": 298, 4271 "metadata": { 4272 "collapsed": false 4273 }, 4274 "outputs": [ 4275 { 4276 "data": { 4277 "text/html": [ 4278 "<table style=\"border-style: hidden;\">\n", 4279 "<tr>\n", 4280 "<td style=\"border-style: hidden;\"><div class=\"ilineplot\" id=\"fig_6b43ce4d5c7a47799d847802f8915e43\">\n", 4281 " <script>\n", 4282 " var ilp_req = require.config( {\n", 4283 "\n", 4284 " paths: {\n", 4285 " \"dygraph-sync\": '/nbextensions/plotter_scripts/ILinePlot/synchronizer',\n", 4286 " \"dygraph\": '/nbextensions/plotter_scripts/ILinePlot/dygraph-combined',\n", 4287 " \"ILinePlot\": '/nbextensions/plotter_scripts/ILinePlot/ILinePlot',\n", 4288 " \"underscore\": '/nbextensions/plotter_scripts/ILinePlot/underscore-min',\n", 4289 " },\n", 4290 "\n", 4291 " shim: {\n", 4292 " \"dygraph-sync\": [\"dygraph\"],\n", 4293 " \"ILinePlot\": {\n", 4294 "\n", 4295 " \"deps\": [\"dygraph-sync\", \"dygraph\", \"underscore\"],\n", 4296 " \"exports\": \"ILinePlot\"\n", 4297 " }\n", 4298 " }\n", 4299 " });\n", 4300 " ilp_req([\"require\", \"ILinePlot\"], function() {\n", 4301 " ILinePlot.generate('fig_6b43ce4d5c7a47799d847802f8915e43', '/nbextensions/');\n", 4302 " });\n", 4303 " </script>\n", 4304 " </div></td>\n", 4305 "</tr>\n", 4306 "<tr>\n", 4307 "<td style=\"border-style: hidden;\"><div style=\"text-align:right\" id=\"fig_6b43ce4d5c7a47799d847802f8915e43_legend\"></div></td>\n", 4308 "</tr>\n", 4309 "</table>" 4310 ], 4311 "text/plain": [ 4312 "<IPython.core.display.HTML object>" 4313 ] 4314 }, 4315 "metadata": {}, 4316 "output_type": "display_data" 4317 }, 4318 { 4319 "data": { 4320 "text/html": [ 4321 "<table style=\"border-style: hidden;\">\n", 4322 "<tr>\n", 4323 "<td style=\"border-style: hidden;\"><div class=\"ilineplot\" id=\"fig_34331fb9b3114bc892e55571e87c4bff\">\n", 4324 " <script>\n", 4325 " var ilp_req = require.config( {\n", 4326 "\n", 4327 " paths: {\n", 4328 " \"dygraph-sync\": '/nbextensions/plotter_scripts/ILinePlot/synchronizer',\n", 4329 " \"dygraph\": '/nbextensions/plotter_scripts/ILinePlot/dygraph-combined',\n", 4330 " \"ILinePlot\": '/nbextensions/plotter_scripts/ILinePlot/ILinePlot',\n", 4331 " \"underscore\": '/nbextensions/plotter_scripts/ILinePlot/underscore-min',\n", 4332 " },\n", 4333 "\n", 4334 " shim: {\n", 4335 " \"dygraph-sync\": [\"dygraph\"],\n", 4336 " \"ILinePlot\": {\n", 4337 "\n", 4338 " \"deps\": [\"dygraph-sync\", \"dygraph\", \"underscore\"],\n", 4339 " \"exports\": \"ILinePlot\"\n", 4340 " }\n", 4341 " }\n", 4342 " });\n", 4343 " ilp_req([\"require\", \"ILinePlot\"], function() {\n", 4344 " ILinePlot.generate('fig_34331fb9b3114bc892e55571e87c4bff', '/nbextensions/');\n", 4345 " });\n", 4346 " </script>\n", 4347 " </div></td>\n", 4348 "</tr>\n", 4349 "<tr>\n", 4350 "<td style=\"border-style: hidden;\"><div style=\"text-align:right\" id=\"fig_34331fb9b3114bc892e55571e87c4bff_legend\"></div></td>\n", 4351 "</tr>\n", 4352 "</table>" 4353 ], 4354 "text/plain": [ 4355 "<IPython.core.display.HTML object>" 4356 ] 4357 }, 4358 "metadata": {}, 4359 "output_type": "display_data" 4360 } 4361 ], 4362 "source": [ 4363 "# We can also produce interacive plots\n", 4364 "trappy.ILinePlot(\n", 4365 " ftrace, # TRAPpy RUN object\n", 4366 " signals=[\n", 4367 " 'cpu_frequency:frequency'\n", 4368 " ],\n", 4369 " drawstyle='steps-post',\n", 4370 " per_line=1,\n", 4371 "# sync_zoom=True,\n", 4372 "# group='UtilVsFrequency',\n", 4373 " marker = '+').view()\n", 4374 "\n", 4375 "trappy.ILinePlot(\n", 4376 " ftrace, # TRAPpy RUN object\n", 4377 " signals=[\n", 4378 " 'sched_load_avg_task:util_avg'\n", 4379 " ],\n", 4380 " filters={\n", 4381 " 'pid': [most_switching_pid]\n", 4382 " },\n", 4383 " drawstyle='steps-post',\n", 4384 " per_line=1,\n", 4385 "# sync_zoom=True,\n", 4386 "# group='UtilVsFrequency',\n", 4387 " marker = '+').view()" 4388 ] 4389 }, 4390 { 4391 "cell_type": "markdown", 4392 "metadata": {}, 4393 "source": [ 4394 "You can find much more exaples of plotting in TRAPpy on the example\n", 4395 "notebook available on the GitHub:<br>\n", 4396 " https://github.com/ARM-software/trappy/blob/master/doc/Plotter.ipynb" 4397 ] 4398 }, 4399 { 4400 "cell_type": "markdown", 4401 "metadata": {}, 4402 "source": [ 4403 "## Data aggregation and analysis" 4404 ] 4405 }, 4406 { 4407 "cell_type": "code", 4408 "execution_count": 274, 4409 "metadata": { 4410 "collapsed": false 4411 }, 4412 "outputs": [ 4413 { 4414 "data": { 4415 "text/html": [ 4416 "<div>\n", 4417 "<table border=\"1\" class=\"dataframe\">\n", 4418 " <thead>\n", 4419 " <tr style=\"text-align: right;\">\n", 4420 " <th></th>\n", 4421 " <th>__comm</th>\n", 4422 " <th>__cpu</th>\n", 4423 " <th>__pid</th>\n", 4424 " <th>cpu</th>\n", 4425 " <th>frequency</th>\n", 4426 " <th>start</th>\n", 4427 " <th>delta</th>\n", 4428 " </tr>\n", 4429 " <tr>\n", 4430 " <th>Time</th>\n", 4431 " <th></th>\n", 4432 " <th></th>\n", 4433 " <th></th>\n", 4434 " <th></th>\n", 4435 " <th></th>\n", 4436 " <th></th>\n", 4437 " <th></th>\n", 4438 " </tr>\n", 4439 " </thead>\n", 4440 " <tbody>\n", 4441 " <tr>\n", 4442 " <th>0.661132</th>\n", 4443 " <td>kschedfreq:2</td>\n", 4444 " <td>2</td>\n", 4445 " <td>119</td>\n", 4446 " <td>2</td>\n", 4447 " <td>1807000</td>\n", 4448 " <td>0.661132</td>\n", 4449 " <td>0.000004</td>\n", 4450 " </tr>\n", 4451 " <tr>\n", 4452 " <th>0.661136</th>\n", 4453 " <td>kschedfreq:2</td>\n", 4454 " <td>2</td>\n", 4455 " <td>119</td>\n", 4456 " <td>3</td>\n", 4457 " <td>1807000</td>\n", 4458 " <td>0.661136</td>\n", 4459 " <td>0.051760</td>\n", 4460 " </tr>\n", 4461 " <tr>\n", 4462 " <th>0.712896</th>\n", 4463 " <td>kschedfreq:2</td>\n", 4464 " <td>2</td>\n", 4465 " <td>119</td>\n", 4466 " <td>2</td>\n", 4467 " <td>507000</td>\n", 4468 " <td>0.712896</td>\n", 4469 " <td>0.000009</td>\n", 4470 " </tr>\n", 4471 " <tr>\n", 4472 " <th>0.712905</th>\n", 4473 " <td>kschedfreq:2</td>\n", 4474 " <td>2</td>\n", 4475 " <td>119</td>\n", 4476 " <td>3</td>\n", 4477 " <td>507000</td>\n", 4478 " <td>0.712905</td>\n", 4479 " <td>0.473305</td>\n", 4480 " </tr>\n", 4481 " <tr>\n", 4482 " <th>1.186210</th>\n", 4483 " <td>sh</td>\n", 4484 " <td>0</td>\n", 4485 " <td>20289</td>\n", 4486 " <td>0</td>\n", 4487 " <td>507000</td>\n", 4488 " <td>1.186210</td>\n", 4489 " <td>0.000252</td>\n", 4490 " </tr>\n", 4491 " </tbody>\n", 4492 "</table>\n", 4493 "</div>" 4494 ], 4495 "text/plain": [ 4496 " __comm __cpu __pid cpu frequency start delta\n", 4497 "Time \n", 4498 "0.661132 kschedfreq:2 2 119 2 1807000 0.661132 0.000004\n", 4499 "0.661136 kschedfreq:2 2 119 3 1807000 0.661136 0.051760\n", 4500 "0.712896 kschedfreq:2 2 119 2 507000 0.712896 0.000009\n", 4501 "0.712905 kschedfreq:2 2 119 3 507000 0.712905 0.473305\n", 4502 "1.186210 sh 0 20289 0 507000 1.186210 0.000252" 4503 ] 4504 }, 4505 "execution_count": 274, 4506 "metadata": {}, 4507 "output_type": "execute_result" 4508 } 4509 ], 4510 "source": [ 4511 "df = ftrace.cpu_frequency.data_frame\n", 4512 "df.head()" 4513 ] 4514 }, 4515 { 4516 "cell_type": "code", 4517 "execution_count": 275, 4518 "metadata": { 4519 "collapsed": false 4520 }, 4521 "outputs": [ 4522 { 4523 "data": { 4524 "text/html": [ 4525 "<div>\n", 4526 "<table border=\"1\" class=\"dataframe\">\n", 4527 " <thead>\n", 4528 " <tr style=\"text-align: right;\">\n", 4529 " <th></th>\n", 4530 " <th>__comm</th>\n", 4531 " <th>__cpu</th>\n", 4532 " <th>__pid</th>\n", 4533 " <th>cpu</th>\n", 4534 " <th>frequency</th>\n", 4535 " <th>start</th>\n", 4536 " <th>delta</th>\n", 4537 " </tr>\n", 4538 " <tr>\n", 4539 " <th>Time</th>\n", 4540 " <th></th>\n", 4541 " <th></th>\n", 4542 " <th></th>\n", 4543 " <th></th>\n", 4544 " <th></th>\n", 4545 " <th></th>\n", 4546 " <th></th>\n", 4547 " </tr>\n", 4548 " </thead>\n", 4549 " <tbody>\n", 4550 " <tr>\n", 4551 " <th>0.661132</th>\n", 4552 " <td>kschedfreq:2</td>\n", 4553 " <td>2</td>\n", 4554 " <td>119</td>\n", 4555 " <td>2</td>\n", 4556 " <td>1807000</td>\n", 4557 " <td>0.661132</td>\n", 4558 " <td>0.000004</td>\n", 4559 " </tr>\n", 4560 " <tr>\n", 4561 " <th>0.661136</th>\n", 4562 " <td>kschedfreq:2</td>\n", 4563 " <td>2</td>\n", 4564 " <td>119</td>\n", 4565 " <td>3</td>\n", 4566 " <td>1807000</td>\n", 4567 " <td>0.661136</td>\n", 4568 " <td>0.051760</td>\n", 4569 " </tr>\n", 4570 " <tr>\n", 4571 " <th>0.712896</th>\n", 4572 " <td>kschedfreq:2</td>\n", 4573 " <td>2</td>\n", 4574 " <td>119</td>\n", 4575 " <td>2</td>\n", 4576 " <td>507000</td>\n", 4577 " <td>0.712896</td>\n", 4578 " <td>0.000009</td>\n", 4579 " </tr>\n", 4580 " <tr>\n", 4581 " <th>0.712905</th>\n", 4582 " <td>kschedfreq:2</td>\n", 4583 " <td>2</td>\n", 4584 " <td>119</td>\n", 4585 " <td>3</td>\n", 4586 " <td>507000</td>\n", 4587 " <td>0.712905</td>\n", 4588 " <td>0.473305</td>\n", 4589 " </tr>\n", 4590 " <tr>\n", 4591 " <th>1.186210</th>\n", 4592 " <td>sh</td>\n", 4593 " <td>0</td>\n", 4594 " <td>20289</td>\n", 4595 " <td>0</td>\n", 4596 " <td>507000</td>\n", 4597 " <td>1.186210</td>\n", 4598 " <td>0.000252</td>\n", 4599 " </tr>\n", 4600 " </tbody>\n", 4601 "</table>\n", 4602 "</div>" 4603 ], 4604 "text/plain": [ 4605 " __comm __cpu __pid cpu frequency start delta\n", 4606 "Time \n", 4607 "0.661132 kschedfreq:2 2 119 2 1807000 0.661132 0.000004\n", 4608 "0.661136 kschedfreq:2 2 119 3 1807000 0.661136 0.051760\n", 4609 "0.712896 kschedfreq:2 2 119 2 507000 0.712896 0.000009\n", 4610 "0.712905 kschedfreq:2 2 119 3 507000 0.712905 0.473305\n", 4611 "1.186210 sh 0 20289 0 507000 1.186210 0.000252" 4612 ] 4613 }, 4614 "execution_count": 275, 4615 "metadata": {}, 4616 "output_type": "execute_result" 4617 } 4618 ], 4619 "source": [ 4620 "# Lets compute the residency on each OPP\n", 4621 "df.loc[:,'start'] = df.index\n", 4622 "df.loc[:,'delta'] = (df['start'] - df['start'].shift()).fillna(0).shift(-1)\n", 4623 "df.head()" 4624 ] 4625 }, 4626 { 4627 "cell_type": "code", 4628 "execution_count": 276, 4629 "metadata": { 4630 "collapsed": false 4631 }, 4632 "outputs": [ 4633 { 4634 "name": "stderr", 4635 "output_type": "stream", 4636 "text": [ 4637 "07:37:46 INFO : Residency time per OPP:\n" 4638 ] 4639 }, 4640 { 4641 "data": { 4642 "text/html": [ 4643 "<div>\n", 4644 "<table border=\"1\" class=\"dataframe\">\n", 4645 " <thead>\n", 4646 " <tr style=\"text-align: right;\">\n", 4647 " <th></th>\n", 4648 " <th>delta</th>\n", 4649 " </tr>\n", 4650 " <tr>\n", 4651 " <th>frequency</th>\n", 4652 " <th></th>\n", 4653 " </tr>\n", 4654 " </thead>\n", 4655 " <tbody>\n", 4656 " <tr>\n", 4657 " <th>507000</th>\n", 4658 " <td>11.141186</td>\n", 4659 " </tr>\n", 4660 " <tr>\n", 4661 " <th>702000</th>\n", 4662 " <td>1.832051</td>\n", 4663 " </tr>\n", 4664 " <tr>\n", 4665 " <th>1001000</th>\n", 4666 " <td>2.810101</td>\n", 4667 " </tr>\n", 4668 " <tr>\n", 4669 " <th>1105000</th>\n", 4670 " <td>1.160819</td>\n", 4671 " </tr>\n", 4672 " <tr>\n", 4673 " <th>1183000</th>\n", 4674 " <td>1.321498</td>\n", 4675 " </tr>\n", 4676 " <tr>\n", 4677 " <th>1209000</th>\n", 4678 " <td>2.794528</td>\n", 4679 " </tr>\n", 4680 " <tr>\n", 4681 " <th>1404000</th>\n", 4682 " <td>9.991687</td>\n", 4683 " </tr>\n", 4684 " <tr>\n", 4685 " <th>1612000</th>\n", 4686 " <td>0.506026</td>\n", 4687 " </tr>\n", 4688 " <tr>\n", 4689 " <th>1807000</th>\n", 4690 " <td>2.727041</td>\n", 4691 " </tr>\n", 4692 " </tbody>\n", 4693 "</table>\n", 4694 "</div>" 4695 ], 4696 "text/plain": [ 4697 " delta\n", 4698 "frequency \n", 4699 "507000 11.141186\n", 4700 "702000 1.832051\n", 4701 "1001000 2.810101\n", 4702 "1105000 1.160819\n", 4703 "1183000 1.321498\n", 4704 "1209000 2.794528\n", 4705 "1404000 9.991687\n", 4706 "1612000 0.506026\n", 4707 "1807000 2.727041" 4708 ] 4709 }, 4710 "execution_count": 276, 4711 "metadata": {}, 4712 "output_type": "execute_result" 4713 } 4714 ], 4715 "source": [ 4716 "import pandas as pd\n", 4717 "\n", 4718 "# Now we can get group by frequency and sum the partional residency times\n", 4719 "freq_residencies = df.groupby('frequency')['delta'].sum()\n", 4720 "logging.info(\"Residency time per OPP:\")\n", 4721 "df = pd.DataFrame(freq_residencies)\n", 4722 "df" 4723 ] 4724 }, 4725 { 4726 "cell_type": "code", 4727 "execution_count": 283, 4728 "metadata": { 4729 "collapsed": false 4730 }, 4731 "outputs": [ 4732 { 4733 "name": "stderr", 4734 "output_type": "stream", 4735 "text": [ 4736 "07:43:01 INFO : Freq 507000Hz : 32.5%\n", 4737 "07:43:01 INFO : Freq 702000Hz : 5.3%\n", 4738 "07:43:01 INFO : Freq 1001000Hz : 8.2%\n", 4739 "07:43:01 INFO : Freq 1105000Hz : 3.4%\n", 4740 "07:43:01 INFO : Freq 1183000Hz : 3.9%\n", 4741 "07:43:01 INFO : Freq 1209000Hz : 8.2%\n", 4742 "07:43:01 INFO : Freq 1404000Hz : 29.1%\n", 4743 "07:43:01 INFO : Freq 1612000Hz : 1.5%\n", 4744 "07:43:01 INFO : Freq 1807000Hz : 8.0%\n" 4745 ] 4746 } 4747 ], 4748 "source": [ 4749 "# Compute the relative residency time\n", 4750 "tot = sum(freq_residencies)\n", 4751 "#df = df.apply(lambda delta : 100*delta/tot)\n", 4752 "for f in freq_residencies.index:\n", 4753 " logging.info(\"Freq %10dHz : %5.1f%%\", f, 100*freq_residencies[f]/tot)" 4754 ] 4755 }, 4756 { 4757 "cell_type": "code", 4758 "execution_count": 281, 4759 "metadata": { 4760 "collapsed": false 4761 }, 4762 "outputs": [ 4763 { 4764 "data": { 4765 "text/plain": [ 4766 "<matplotlib.axes._subplots.AxesSubplot at 0x7f0c79c6c9d0>" 4767 ] 4768 }, 4769 "execution_count": 281, 4770 "metadata": {}, 4771 "output_type": "execute_result" 4772 }, 4773 { 4774 "data": { 4775 "image/png": "iVBORw0KGgoAAAANSUhEUgAAA5sAAAFqCAYAAACUOk6FAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xu4JHd5H/jvKw2WuUnoYjQyFw0EyNoOMQJBYIH4YBsE\nsc0lWMgmMSzGMY6N8RKvjUz8wLDEBIjDGuMHslxWCLJcjbgGWeLig8FeAUaSERcDiZFAgARiJK4B\nSfDuH90aRmdmNGdm6pyq0/35PE8/dFdXnXrpV11T366qX1V3BwAAAIZ0xNgFAAAAsHiETQAAAAYn\nbAIAADA4YRMAAIDBCZsAAAAMTtgEAABgcAcMm1V1VFV9sKouqqqPV9Vz5tOfWVWXV9WF88dDN75c\nAAAAtoJaz302q+oW3f3tqjoyyV8n+d0kP5vkG939gg2uEQAAgC1mXafRdve350+Pmi9z9fx1bURR\nAAAAbG3rCptVdURVXZTkiiSr3f2J+VtPrqqLq+rlVXXMhlUJAADAlrKu02h3z1x1dJLzkzwtySeS\nXNXdXVX/IclJ3f3EjSkTAACArWTbwczc3V+vqv+W5NTuft8eb70sydv3tUxVrT/NAgAAsOV0916X\nWK5nNNoTbjhFtqpunuTBSS6uqu17zPYvk3zsJla85R/PfOYzR6/BQy+m9tCL6Tz0YjoPvZjWQz+m\n89CL6Tz0YjqPRenF/qznyOZJSc6uqpqH01d393uq6lVVdY8k309yaZInreNvAQAAsAQOGDa7+5Ik\n99zH9MdtSEUAAABseesajZZkZWVl7BKY04vp0Ivp0Ivp0Itp0Y/p0Ivp0IvpWPReHNRotIe0gqre\n6HUAAAAwjqpK72OAoIMajRYAAGDR7NixI5dddtnYZUzeySefnEsvvXTd8zuyCQAALLX5kbmxy5i8\n/X1O+zuy6ZpNAAAABidsAgAAMDhhEwAAgMEJmwAAAFvIE57whDzjGc844Hx3utOd8t73vncTKto3\nYRMAAGDBPetZz8rjHve4TV2nsAkAALDG9u07UlUb9ti+fcfY/xc3nLAJAACwxpVXXpakN+wx+/vr\nc9FFF+Ve97pXjjnmmPzSL/1SvvOd7+x+7x3veEdOOeWUHHvssXnAAx6QSy65ZK/lzzvvvDznOc/J\n61//+tz61rfOKaeckiR55StfmR//8R/P0Ucfnbvc5S556UtfehCf0IEJmwAAABN13XXX5VGPelQe\n//jHZ9euXTn99NPzpje9KUly8cUX54lPfGJe9rKXZdeuXXnSk56Uhz/84bnuuutu9DdOO+20PP3p\nT88ZZ5yRb3zjG7nooouSJCeeeGLe+c535utf/3rOOuusPPWpT83FF188WO3CJgAAwERdcMEFuf76\n6/OUpzwlRx55ZB796Efn3ve+d5LkpS99aX7jN34jp556aqoqv/Irv5KjjjoqF1xwwbr+9sMe9rDs\n2LEjSfLABz4wD3nIQ/L+979/sNqFTQAAgIn64he/mNvd7nY3mnbyyScnSS677LL88R//cY477rgc\nd9xxOfbYY3P55Zfni1/84rr+9rnnnpv73e9+Of7443Psscfm3HPPzVVXXTVY7cImAADARJ100kn5\nwhe+cKNpn/vc55Ikd7zjHfOHf/iH2bVrV3bt2pWrr7463/zmN3PGGWfs9Xeq6kavr7322vziL/5i\nfv/3fz9f+cpXcvXVV+dhD3tYunuw2oVNAACAibrf/e6Xbdu25UUvelGuv/76nHPOOfnQhz6UJPm1\nX/u1vOQlL9n9+lvf+lbe+c535lvf+tZef+fEE0/MpZdeujtMXnvttbn22mtzwgkn5Igjjsi5556b\n888/f9DaFyJsbvSwxJvxWIahjwEAgINzs5vdLOecc07OOuusHH/88XnjG9+YRz/60UmSe93rXnn5\ny1+eJz/5yTnuuONyt7vdLWefffbuZfc8mnn66aenu3P88cfn1FNPza1udau88IUvzOmnn57jjjsu\nr3vd6/KIRzxi0NpryMOk+1xBVW/COjIbQngrq0EPWQMAAOtTtfe++PbtOw7q9iQH68QTT84VV1y6\nYX9/I+zrc9pjeu01XdicCmETAADGsL8QxY0dbNhciNNoAQAAmBZhEwAAgMEJmwAAAAxO2AQAAGBw\nwiYAAACDEzYBAAAY3LaxCwAAABjTySefPL+dIjfl5JNPPqj53WdzMtzbBwAA2HrcZxMAAIBNI2wC\nAAAwOGETAACAwQmbAAAADO6AYbOqjqqqD1bVRVX18ap6znz6sVV1flV9qqrOq6pjNr5cAAAAtoJ1\njUZbVbfo7m9X1ZFJ/jrJ7yZ5eJKvdvfzq+ppSY7t7jP3sazRaNfFaLQAAMDWc1ij0Xb3t+dPj5ov\nc3WSRyQ5ez797CSPHKBOAAAAFsC6wmZVHVFVFyW5Islqd38iyYndfWWSdPcVSW67cWUCAACwlWxb\n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\nazYXWVUdk+Sh+cF9Q7+Q5Lzuvma8qpaXfgAAwNbjyOYaVfW4JBcmWUlyi/njQUk+Mn+PTaQfAACw\nNRkgaI2q+lSSf7b2qFlVHZvkg919t3EqW076MR1VtS3JE5M8KsmPzid/IclbMxuN+rqxals2ejEd\nejEt+jEdejEdejEdy9gLYXONqvp0knt399fWTD8myd92913HqWw56cd0VNVrk1yT5Owkl88n3z7J\n45Mc191njFXbstGL6dCLadGP6dCL6dCL6VjGXgiba1TV45M8I7P7h35+PvmOSR6c5Nnd/cqRSltK\n+jEdVfXp/R1Jvqn3GJ5eTIdeTIt+TIdeTIdeTMcy9sI1m2t099lJTk3yviTfnT9Wk5wq2Gw+/ZiU\nXVV1elXt3m5U1RFVdUaSq0esaxnpxXToxbTox3ToxXToxXQsXS8c2bwJVXVcknT3rrFrQT/GVlU7\nkjwvyU9ntkGsJMck+cskZ3b3Z0crbsnoxXToxbTox3ToxXToxXQsYy+EzTWq6o5Jnp/ZfwRfy+w/\ngqOTvDez/wguHa+65aMf01RVxydJd3917FqWnV5Mh15Mi35Mh15Mh15Mx7L0Qthco6r+vyR/kuTP\nu/t782lHJjk9yf/e3fcds75lox/T4p6n06EX06EX06If06EX06EX07FsvXDN5t5O6O7X3xBskqS7\nv9fdr0ty/Ih1LSv9mAj3PJ0OvZgOvZgW/ZgOvZgOvZiOZeyFI5trVNXrkuzKbEjiG0Y/vUNmQxKf\n0N2PGau2ZaQf0+Gep9OhF9OhF9OiH9OhF9OhF9OxjL3YNnYBE/S4zG62+qzc+PD225K8Yqyilph+\nTEcl2devU9+fv8fm0Yvp0Itp0Y/p0Ivp0IvpWLpeCJtrdPe1SV4yfzAy/ZiUP0pyYVXt856no1W1\nnPRiOvRiWvRjOvRiOvRiOpauF06j3YeqOi3JI3PjI2lv7e6/GK+q5aUf0zE/zeO07H1R+0LeG2rK\n9GI69GJa9GM69GI69GI6lq0XwuYaVfUnSe6W5FVJLp9Pvn1mp3N+prt/Z6zalpF+TJN7nk6HXkyH\nXkyLfkyHXkyHXkzHsvRC2Fyjqj69r4tzq6qSfLq77zpCWUtLP6bDPU+nQy+mQy+mRT+mQy+mQy+m\nYxl74dYne/tOVd17H9PvneQ7m10M+jEhr0/y5iQndfddu/suSU5K8pYkrxu1suWjF9OhF9OiH9Oh\nF9OhF9OxdL1wZHONqrpXkhcnuXV+cNrmHTL79eG3uvsjY9W2jKrqnpkNDqQfI6uqz+zvSPJNvcfw\n9GI69GJa9GM69GI69GI6lrEXwuZ+VNX27HHhbndfMWY9y04/xueep9OhF9OhF9OiH9OhF9OhF9Ox\njL0QNteoqn/a3R8duw5urKpu1t3XrZl2QndfNVZNy6aqfiize54+Ij8I/pcneXuSV3T3d8eqbdns\npxe77z+rF5tHL6ZFP6ZDL6bDv9/TsYy9EDbXqKrvJfmHzM6bfm13f2LkkpZaVT0oyauT/HCSC5P8\n+g0XT1fVhd19zxHLAwAA9sMAQXv7aJJHZfbZvK2q/q6qzqyqHaNWtbyen+S07j4hyUuTvKuq7jt/\nr8Yriz1V1TPGrmGZVNUJa17/66r606r69flIzWySqtpWVf+qqh46f/24qnpRVT1RL8ZRVQ+qqj+r\nqrdW1TlV9dyqusvYdZFU1XvHrmFZVdVp8+3SyWum/+pYNS2jqnpBVd1/7Do2kyOba6w9WlZV90ny\nS0kek+Rz3f2/jlbcEqqqv+vun9zj9U8kOSfJ05I8w5HNaaiqz3X3HceuY1nsuZ2qqj9M8sAkr0ny\n80ku7+6njlnfMqmqlye5TZIfSvI/kxyV5E1Jfi7J57v790Ysb+lU1X9Msj3Je5I8Mslnk3w6yW8m\neU53v3HE8pZKVa29JKkyu2/2p5Kku//pphe1pKrqOUkekNkZYr+Q5E+6+0Xz95wltomq6itJLkvy\nI5mNTPva7r5o3Ko2lrC5RlVd1N2n7GN6Jfnn3f2+EcpaWlX1t0l+fs8Bgarq9knekeQfdfetRytu\nyVTV1/f3VpKbd/e2zaxnme25naqqC5M8sLu/VVU3S3Jhd9993AqXR1V9rLv/yfyzvyKz4eyvrapt\nST6y549lbLyquuSG//7nPXhfd9+/qo5N8v7u/ifjVrg8quptSb6e5D9k9kNMJXl/ZqEn3X3ZeNUt\nl6q6JMkp3X19Vd0msx8nP9XdT93ffi8b44bPu6ruluSMzA5oHZnktZkFz0+PWuAGcBrt3v7Tvib2\njKC5+c5McuKeE7r78iQrSZ47RkFL7Jokd+3uo9c8bp3kS2MXt2RuXlWnzG/VdLPu/laSzAfR+t64\npS2d65Ldn/2Hu/va+evrk/g1d/N9v6qOmz//0cx24tLdV8elF5uqux+e2VH+lyb5yfl4C9d192WC\n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\nZvPoxXToxbTox3ToxXToxXQsXS+ETWC93pHkVt2918h1VbW6+eUsNb2YDr2YFv2YDr2YDr2YjqXr\nhWs2AQAAGNz+hmsHAACAQyZsAgAAMDhhEwAAgMEJmwAslap6SlV9oqpePXYtALDIDBAEwFKpqk8m\n+Znu/uIe047s7u+NWBYALBxHNgFYGlX1kiR3SvIXVXVNVb2qqj6Q5FVVdURVPb+qPlhVF1fVv9lj\nuT+rqk9W1flV9d+q6l/Op3+2qo6bP79XVf3l/PktquoVVXVBVX2kqn5hPv3xVfWmqjq3qj5VVc/b\nYx0Pnc97cVW9q2Y+XVXHz9+vqvrMDa8BYOrcZxOApdHd/7aqTkuykuS3k/x8kvt397XzcHlNd/+z\nqvqhJH9dVecnuWeSu3b3j1XVSUk+keQVN/zJtauY/++/T/Ke7n5iVR2T5ENV9e75ez+Z5B5Jrkvy\nqar60yTfTfLSJA/o7s9V1W26u+en+v7rJC9M8rNJLu7urw78sQDAhhA2AVhmb+vua+fPH5Lk7lV1\n+vz10UnumuSfJ3ltknT3l6rqvXssX/v5uw9J8gtV9Xvz1z+U5I7z5+/p7m8mSVV9PMnJSY5L8r7u\n/tx8PdfM5z0ryVsyC5u/On8NAFuCsAnAMvvWHs8ryW9397v2nKGqfu4mlr8+P7gk5YfX/K1Hd/dn\n1vyt+2Z2FPMG388P/i3eK7h29+VVdWVVPSjJvZM89iZqAYBJcc0mAMtmf0cjz0vym1W1LUmq6q5V\ndYskf5XkjPk1nScledAey3w2yb3mzx+95m89ZfcKq+5xgJouSPLAqjp5Pv+xe7z3iiT/Nckb2qh+\nAGwhwiYAy2Z/ge3lmV2PeWFVXZLkvyQ5srvfnOS/J/l4klcm+Zs9lvk/k/xpVX0os6OcN3h2kptV\n1Uer6mPz+fZbS3dfleTXk7y5qi5K8ro95nlbklvO1w0AW4ZbnwDAQaiqs5K8vbvP2aT1nZrkP3f3\nT23G+gBgKK7ZBICDs2m/0lbV05L8RlyrCcAW5MgmAAAAg3PNJgAAAIMTNgEAABicsAkAAMDghE0A\nAAAGJ2wCAAAwOGETAACAwf3/5O/Pbo8cf7AAAAAASUVORK5CYII=\n", 4776 "text/plain": [ 4777 "<matplotlib.figure.Figure at 0x7f0c77c5ccd0>" 4778 ] 4779 }, 4780 "metadata": {}, 4781 "output_type": "display_data" 4782 } 4783 ], 4784 "source": [ 4785 "# Plot residency time\n", 4786 "fig, axes = plt.subplots(1, 1, figsize=(16, 5));\n", 4787 "df.plot(kind='bar', ax=axes)" 4788 ] 4789 } 4790 ], 4791 "metadata": { 4792 "kernelspec": { 4793 "display_name": "Python 2", 4794 "language": "python", 4795 "name": "python2" 4796 }, 4797 "language_info": { 4798 "codemirror_mode": { 4799 "name": "ipython", 4800 "version": 2 4801 }, 4802 "file_extension": ".py", 4803 "mimetype": "text/x-python", 4804 "name": "python", 4805 "nbconvert_exporter": "python", 4806 "pygments_lexer": "ipython2", 4807 "version": "2.7.13" 4808 } 4809 }, 4810 "nbformat": 4, 4811 "nbformat_minor": 0 4812 } 4813