Home | History | Annotate | Download | only in tutorial
      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>&lt;...&gt;</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>&lt;idle&gt;</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>&lt;...&gt;</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>&lt;idle&gt;</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>&lt;...&gt;</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>&lt;idle&gt;</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>&lt;...&gt;</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>&lt;idle&gt;</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>&lt;...&gt;</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>&lt;...&gt;</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>&lt;idle&gt;</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>&lt;...&gt;</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>&lt;idle&gt;</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>&lt;idle&gt;</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>&lt;idle&gt;</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>&lt;...&gt;</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>&lt;idle&gt;</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>&lt;idle&gt;</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>&lt;idle&gt;</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>&lt;idle&gt;</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>&lt;idle&gt;</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>&lt;idle&gt;</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>&lt;idle&gt;</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>&lt;idle&gt;</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>&lt;...&gt;</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>&lt;idle&gt;</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\n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\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