blob: 9fce18f159eabbe4e30c7a141489700b0df264cf [file] [log] [blame]
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Tutorial Goal"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This tutorial aims to show how RTApp performance metrics are computed\n",
"and reported by the **perf analysis** module provided by LISA."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import logging\n",
"from conf import LisaLogging\n",
"LisaLogging.setup()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Execute this cell to report devlib debugging information\n",
"logging.getLogger('ssh').setLevel(logging.DEBUG)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"# Generate plots inline\n",
"%pylab inline\n",
"\n",
"import json\n",
"import os"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Collected results"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[01;34m./example_rtapp\u001b[00m\r\n",
"├── energy.json\r\n",
"├── output.log\r\n",
"├── platform.json\r\n",
"├── rt-app-task_r20_5-60-0.log\r\n",
"├── rt-app-task_r20_5-60-1.log\r\n",
"├── rt-app-task_r20_5-60-3.log\r\n",
"├── rt-app-task_r20_5-60-6.log\r\n",
"├── simple_00.json\r\n",
"└── trace.dat\r\n",
"\r\n",
"0 directories, 9 files\r\n"
]
}
],
"source": [
"# Let's use an example trace\n",
"res_dir = './example_rtapp'\n",
"trace_file = os.path.join(res_dir, 'trace.dat')\n",
"platform_file = os.path.join(res_dir, 'platform.json')\n",
"!tree {res_dir}"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"11:58:12 INFO : Generated RTApp JSON file:\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{\n",
" \"global\": {\n",
" \"calibration\": \"CPU1\", \n",
" \"default_policy\": \"SCHED_OTHER\", \n",
" \"duration\": -1, \n",
" \"logdir\": \"/root/devlib-target\"\n",
" }, \n",
" \"tasks\": {\n",
" \"task_r20_5-60\": {\n",
" \"cpus\": [\n",
" 5\n",
" ], \n",
" \"loop\": 1, \n",
" \"phases\": {\n",
" \"p000001\": {\n",
" \"loop\": 10, \n",
" \"run\": 5000, \n",
" \"timer\": {\n",
" \"period\": 100000, \n",
" \"ref\": \"task_r20_5-60\"\n",
" }\n",
" }, \n",
" \"p000002\": {\n",
" \"loop\": 10, \n",
" \"run\": 25000, \n",
" \"timer\": {\n",
" \"period\": 100000, \n",
" \"ref\": \"task_r20_5-60\"\n",
" }\n",
" }, \n",
" \"p000003\": {\n",
" \"loop\": 10, \n",
" \"run\": 45000, \n",
" \"timer\": {\n",
" \"period\": 100000, \n",
" \"ref\": \"task_r20_5-60\"\n",
" }\n",
" }, \n",
" \"p000004\": {\n",
" \"loop\": 10, \n",
" \"run\": 65000, \n",
" \"timer\": {\n",
" \"period\": 100000, \n",
" \"ref\": \"task_r20_5-60\"\n",
" }\n",
" }\n",
" }, \n",
" \"policy\": \"SCHED_OTHER\"\n",
" }\n",
" }\n",
"}\n"
]
}
],
"source": [
"# Inspect the JSON file used to run the application\n",
"with open('{}/simple_00.json'.format(res_dir), 'r') as fh:\n",
" rtapp_json = json.load(fh, )\n",
"logging.info('Generated RTApp JSON file:')\n",
"print json.dumps(rtapp_json, indent=4, sort_keys=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Trace inspection"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<style>\n",
"/*\n",
"\n",
" * Copyright 2015-2016 ARM Limited\n",
"\n",
" *\n",
"\n",
" * Licensed under the Apache License, Version 2.0 (the \"License\");\n",
"\n",
" * you may not use this file except in compliance with the License.\n",
"\n",
" * You may obtain a copy of the License at\n",
"\n",
" *\n",
"\n",
" * http://www.apache.org/licenses/LICENSE-2.0\n",
"\n",
" *\n",
"\n",
" * Unless required by applicable law or agreed to in writing, software\n",
"\n",
" * distributed under the License is distributed on an \"AS IS\" BASIS,\n",
"\n",
" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
"\n",
" * See the License for the specific language governing permissions and\n",
"\n",
" * limitations under the License.\n",
"\n",
" */\n",
"\n",
"\n",
"\n",
".d3-tip {\n",
"\n",
" line-height: 1;\n",
"\n",
" padding: 12px;\n",
"\n",
" background: rgba(0, 0, 0, 0.6);\n",
"\n",
" color: #fff;\n",
"\n",
" border-radius: 2px;\n",
"\n",
" position: absolute !important;\n",
"\n",
" z-index: 99999;\n",
"\n",
"}\n",
"\n",
"\n",
"\n",
".d3-tip:after {\n",
"\n",
" box-sizing: border-box;\n",
"\n",
" pointer-events: none;\n",
"\n",
" display: inline;\n",
"\n",
" font-size: 10px;\n",
"\n",
" width: 100%;\n",
"\n",
" line-height: 1;\n",
"\n",
" color: rgba(0, 0, 0, 0.6);\n",
"\n",
" content: \"\\25BC\";\n",
"\n",
" position: absolute !important;\n",
"\n",
" z-index: 99999;\n",
"\n",
" text-align: center;\n",
"\n",
"}\n",
"\n",
"\n",
"\n",
".d3-tip.n:after {\n",
"\n",
" margin: -1px 0 0 0;\n",
"\n",
" top: 100%;\n",
"\n",
" left: 0;\n",
"\n",
"}\n",
"\n",
"\n",
"\n",
".contextRect {\n",
"\n",
" fill: lightgray;\n",
"\n",
" fill-opacity: 0.5;\n",
"\n",
" stroke: black;\n",
"\n",
" stroke-width: 1;\n",
"\n",
" stroke-opacity: 1;\n",
"\n",
" pointer-events: none;\n",
"\n",
" shape-rendering: crispEdges;\n",
"\n",
"}\n",
"\n",
"\n",
"\n",
".chart {\n",
"\n",
" shape-rendering: crispEdges;\n",
"\n",
"}\n",
"\n",
"\n",
"\n",
".mini text {\n",
"\n",
" font: 9px sans-serif;\n",
"\n",
"}\n",
"\n",
"\n",
"\n",
".main text {\n",
"\n",
" font: 12px sans-serif;\n",
"\n",
"}\n",
"\n",
"\n",
"\n",
".axis line, .axis path {\n",
"\n",
" stroke: black;\n",
"\n",
"}\n",
"\n",
"\n",
"\n",
".miniItem {\n",
"\n",
" stroke-width: 8;\n",
"\n",
"}\n",
"\n",
"\n",
"\n",
".brush .extent {\n",
"\n",
"\n",
"\n",
" stroke: #000;\n",
"\n",
" fill-opacity: .125;\n",
"\n",
" shape-rendering: crispEdges;\n",
"\n",
"}\n",
"\n",
"</style>\n",
"<div id=\"fig_c2a519fbb917485d978734f75d1aa426\" class=\"eventplot\">\n",
" <script>\n",
" var req = require.config( {\n",
"\n",
" paths: {\n",
"\n",
" \"EventPlot\": '/nbextensions/plotter_scripts/EventPlot/EventPlot',\n",
" \"d3-tip\": '/nbextensions/plotter_scripts/EventPlot/d3.tip.v0.6.3',\n",
" \"d3-plotter\": '/nbextensions/plotter_scripts/EventPlot/d3.min'\n",
" },\n",
" shim: {\n",
" \"d3-plotter\" : {\n",
" \"exports\" : \"d3\"\n",
" },\n",
" \"d3-tip\": [\"d3-plotter\"],\n",
" \"EventPlot\": {\n",
"\n",
" \"deps\": [\"d3-tip\", \"d3-plotter\" ],\n",
" \"exports\": \"EventPlot\"\n",
" }\n",
" }\n",
" });\n",
" req([\"require\", \"EventPlot\"], function() {\n",
" EventPlot.generate('fig_c2a519fbb917485d978734f75d1aa426', '/nbextensions/');\n",
" });\n",
" </script>\n",
" </div>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Suport for FTrace events parsing and visualization\n",
"import trappy\n",
"\n",
"# NOTE: The interactive trace visualization is available only if you run\n",
"# the workload to generate a new trace-file\n",
"trappy.plotter.plot_trace(res_dir)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# RTApp task performance plots"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"11:59:47 INFO : PerfIndex, Task [task_r20_5-60] avg: -0.25, std: 1.33\n"
]
},
{
"data": {
"image/png": "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\nuWWDJL0i6YLcssskzZe0UpVtPCFpctmy5ZUKxrO6eL1KeexRtnyypKcrvK6js58/mu2n75U97vhs\nvY9lP++QrfeJsvX+S2m6ak/fX5+ssN+6m0vptb27h+/lNbpYz9nr/GdJ1+eW/0HSdV089unsNR6u\nVIQ+IWm1buR2gqT3KiyvuL+r5HyhpPtyy38m6Z4uHnu7pKmSlsl+L16UtHEPX8dSnlX3T7buyGwb\nk8qWT5d0ZYX1D8pet5E9yOccpcJ8G6Xe5Nuy/PbqxmPPz9Z9JXtdtlf6wu8NZZ952Xq/UBrZLn/8\nmtnj9y5bXnq/HtjT3xNu3Lhx6483pk8DaDVWOmB9R2m09OdKo4IHZffvlK1zZTbFdKDTmanvlvSa\n0kFl3qRIvYZdWUfSipKuzC+MiP9TGoHZoWz9v0XEy6psUtnPj2X/LjzZT0TMVRphHlVaZntp28c5\nTcn+t9I+mJbLL+/f0XHq59tKJwvLn+H5U5L+GBEvVkrSqVd7TS2+L99SOolP+b6s5D1Jvy1bdrWk\n0e78hEXbK43cVZoKai2+r8vdLanNaVr4rpWmMPdAT3PpzuhfVbY3sf1H2y8ofcHzjtJrlX+N71aa\nkn+S7W1sL91JuJFKBfGykraKiBlLml8nOa9l+yrbz2b5viPp4Ao5b2j7XNuftL1cJ+GGKH0JsKGk\nrSPiHzWmdUMXOX9A6fV6W1KvnYU5Io6MiCsi4v8i4rdKn1H3SPpxLpcB+d+xbJRcSl/GhaTLI+IH\nETE1Is5Smv3xBdvlv/cA0JIoigG0mlDq6dtU6YD7AxHx1ayIlFLhaqWpp+/kbm8rjXB+sCze8+qe\n0hTPSuu/oMWngFaL217289tVluenfZ6qdHbZyyR9VtJmSmeRtRafHloeS0rTwPPrfVBppLwzK2b/\nXqTF9+Wu6t6Zk9sj4r2yZaUifGT5ypnO9vULZfdXlH0ZsIekVZUK8pedLqezfjfyXdJcuvt+qsj2\nqpJuURrdPUJphsOmSl+k5F+7k5VGDndTGll91fZE2+Xv7/UlrSvpmoh4ZUlyq5LzB7Kc11c6CdW2\nWc4TlUZ8JUmRpssfLmnz7PnMsf2bCv2uY5SmqN8Ui08H7olOX4tsOvkflWaW7BwRz5Wt0i6prfxx\nWvR6V/r96paIeF/StZJG2V4pW3yrOv5+lc6mX+qBLp86Plnp937DXD6V2gNK+fba5cUAoD+gpxhA\n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\nPz40e92fs/3l3PpX2T43ez3m277ZncwCcZpxcbbtZ7I459peusp77hTn2i5s/6fth7PXf7Lttbq7\nL1X9fbdKdvtlRLwXEe9ExB0R8fdOnsf3bP8ry/MB258tu//rud+r+21/tEKM9Z0+075QaRsAWpYl\nKTsOuEnSx2wPtX1R9rk5y/aPSp9ltve3fYfT3+RXJN0uabKkkdln0MTFNpBGoH9u+4/ZOnfaXj13\n/6eyz7B22z8r5ZS7/0Dbj2R/226yPTpbvlX2N3Nk9vPHs8/rsb2zq1ANRTHQM29L+kZEtEnaTtLn\nJB2c3fc5SRtKWj0ihkvaS1J7/sFOhdztkm6MiKO7uc3tlT5g185GT3+v9Lt7vtJI7OpKB/8/zbYx\nXNJPJO2YfXu6raSHyvIYaPsySaMlfSYi3ugih+0k/UPSB1V5uukOkh7OYq8sqU3SA7n775e02IFu\nJ/7uNCX7aturVllvQ0nzJB2YFUKP2D44d/9Hs+3mcxjt7k+tWl9S+ZToiyTtk+3XDSVNy6ZWf1HS\nv3Ij3O2q/l4p2VXp2+2NlF5nqePrrIj4l6RlJK2pnrtB6f2xsqRHJV2WxfyZpN9I+lG2rS87Fex/\nknRHtv4uko61vV0u3hck/VLSMEm3STpHkrJi6ial98Co7PabiHhT0rVKBWrJXpL+GBHzO8n5B5JW\nVNr/Y7X46P5/StpR0lqStsziKSuWvqa0rz+iVPRWs76k6aUfsoLxD0qzD0ZI2iR7PpL0C0ml0YRP\nSzrcHdsptlXab22Sfqe0bz8iaTWl2Qbn2x6UW38fScdI+pCkJyVd2kmOP1UqPj+qNBtjbUnHVHnP\nLWR7faUvo76mtD+nSvqdO04HrLgvpS7fdy8ozaS5yulLuhU6yb/kMUlbZr83p0m6OivsZXtfSf8t\n6cvZ/V/S4p+bWyq9Nw+OiBu62BaAFuQ0Bfqzku6TdImkBUqzxDaS9Cl1/Pu7hdJn74rZfZ+RNDv7\nLO2sF/jLkk6QNFzSU5JOzrb7QaXP/OOUPtOfUm6QwGnW2jFKfz9XkDRN0lWSFBF3SrpA0qVOLT2X\nSzo+Ih6vfU+gVhTFQA9ExD0RcW/2/6eViqQdsrvfkTRU0nq2HRGPRsQruYePUTow/WVEnFLD5hd+\n8xgRL0XEHyLi7Yh4TelAc4fcuiFpfdvLRMQLETE9d9+ySoXKQElfjIi3u7Htf0XExEgWdEjK/pzS\n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\nohgAAKBAY8eO1cCBA3XAAQdo0qRJmjt3bqfrbr755nrggQfU3t6uvfbaS3vssYfefvttSdKZZ56p\na665RpMmTdK8efM0ceJEDR48uMPjJ02apL333lvXX3+9tt9++159XijeuHHjGjJ2o8cn9+Li14qi\nGAAAoEBDhgzRHXfcoQEDBujQQw/VCiusoC984Qt66aWXFlt3r7320vDhwzVgwAB9+9vf1oIFCzR9\n+nRJ0kUXXaSTTz5Za621liRp/fXXV1tb28LH/vrXv9bhhx+uSZMmaZNNNumbJwegUHa6oTqKYgAA\ngNKR45LearTOOuto4sSJeuaZZ/Twww9r9uzZOuqooxZb74wzztB6662ntrY2tbW1af78+XrllVck\nSbNmzap6dulzzjlH48eP17rrrltznmgs9J4WE5/ci4tfK4piAACAiPrc6mDs2LE64IAD9PDDD3dY\nPm3aNJ1++um67rrr1N7ervb2dg0dOnThSbRGjRqlp556qmJM27r22mt1/fXX69xzz61LngDQLCiK\nAQAACjR9+nSdddZZC0+KNWvWLF111VXacsstO6z3+uuva+mll9YHP/hBvf322/rhD3+o1157beH9\nBx98sL73ve/pySeflCQ9+OCDam9vl5TOPr3KKqvo1ltv1bnnnqsLLrigj54dikTvaTHxyb24+LWi\nKAYAACjQkCFD9Pe//11bbLGFhgwZoq233lobbLCBzjzzzA7r7bzzztp55501duxYrb766ho8eLBG\njRq18P7vfOc7Gj9+vD796U9r2LBhOvjgg/Xmm29KWnSd4lGjRumWW27RaaedpokTJ/bdkwSAfsyt\nct0629EqzxUAAHRkm2v1NqHOXtdseb8/vVBvH59OmTKl10bmejN2o8fvT7mXTnXQ3bdZf8pdko4/\n/kKNGXNoxftmzrxQJ5/c8b5af/eX6ukDAAAAAAD9H98Fdg8jxQAAoOkxUtycGCkGmltfjRTTUwwA\nAAAAaFmtVRTX6xqEtjRiRNHPBgAAAOgU17MtJj65Fxe/Vq3VU1zP6Snu9zNyAAAAAABdoKe49oB0\nrgMA0CDoKW5O9BQDzY2eYgAAAABAzUqdn6iOorhWbW317VGmTxkAAAB1RO9pMfHJvbj4tWqtnuJ6\nmjOn/jH5GgcAAAAA+hQjxQAAAAU69dRT9dnPfrbDsrXXXlu77rprh2Vjx47VNddcowEDBuhf//rX\nwuVnnHGGRo4cqUcffVR/+ctfNHDgQA0dOlTDhg3Tuuuuq0suuUSSNHPmTA0YMEDvv/9+j3Ms3yYa\nw7hx4xoydqPHJ/fi4teKohgAAKBA22+/ve68886FJ4x64YUX9O677+q+++7rsOypp57SDjvs0OGx\nJ510ks4991xNnTpV6667riRp5MiRmj9/vubNm6dTTz1VhxxyiB577DFJ6SQ0taj1cQDQCCiKAQAA\nCrTZZpvp7bff1j//+U9J0rRp07TjjjtqnXXW6bBszTXX1Morr7zwcd/97nc1ceLEhfdVsvvuu6ut\nrU2PPPJI1Rzuvvtubb311mpra9PIkSP1zW9+U++++64kaYcddlBEaIMNNtDQoUN17bXXSpL++Mc/\naqONNlJbW5u23XZbPfjggwvjrb766jrzzDP18Y9/XG1tbfrKV76it99+e+H9v/vd77TRRhtp2LBh\nWnvttTV58mRdd9112nTTTTvkddZZZ+mLX/xid3clytB7Wkx8ci8ufq0oigEAAAq09NJLa4stttDU\nqVMlSVOnTtX222+vbbfddrFlJUcffbSuvfZaTZs2TWPGjKkYNyJ0/fXXa968edpggw2q5jBw4ECd\nffbZmjNnju68807ddtttOu+88yRJf/nLXyRJDz74oObPn6899thD9913nw466CBNmDBBc+bM0WGH\nHabPf/7zeueddxbGvPbaazV58mQ9/fTTuv/++xdO477rrru0//7768wzz9S8efM0depUrbbaavr8\n5z+vGTNmaPr06QtjXHHFFdp///17uEcBlERwFdnuoCjuTzijNQAALWmHHXZYWABPmzZN2223XYei\neNq0aR168W6++WbtsssuGjly5GKxZs+erREjRmiFFVbQj370I11xxRVaa621qm5/44031uabby7b\nGj16tA499NCFxXBJ/nq6EyZM0Ne+9jVtuummsq19991XyyyzjP72t78tXOfII4/USiutpOHDh2u3\n3XZbOOo9ceJEHXTQQfrEJz4hSfrwhz+ssWPHatCgQRo/fryuuOIKSdLDDz+smTNnLtZbje6j97SY\n+OReXPxacfbp/oQzWgMAUAj/oD5/L+OE2oZktt9+e5133nlqb2/XK6+8ojXXXFMrrriiDjjgALW3\nt+uhhx7qMFJ89dVX68ADD1RbW5tOPPHEDrFGjhypZ555pkfbf+KJJ/Sd73xH99xzj9588029++67\n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\n9QsXLtQuu+yinp4e/eM//uPgcw245JJLtOuuu2qLLbbQrFmz9NBDD0mSbr75Zm255ZZauXKlJOnX\nv/61Jk6cqKVLl7bkb9UN6D1NE5/c08UviqIYAACgZFasWKEFCxbo9a9/vWbPnq2NN95YDzzwgO68\n804tXLhQF1100eC2t956q3bccUf9/ve/18KFC3XddddpypQpevrpp2v2An/ve9/TvHnztGbNGu2w\nww6aM2eOJOnJJ5/UO97xDp199tl64okntMMOO+imm24a3O+aa67R5z//eV199dV6/PHHtc8+++i9\n732vJGmvvfbShz70IR111FH64x//qA984AM666yzNH369Bb+pQCAohgAAKBpBk5VHO1U1GGHHaaJ\nEyfqLW95i/bbbz8dc8wxWrBggb7yla9ok0020aRJk3TKKafoiiuuGNxnypQpOuGEEzRu3DhtvPHG\nDT3P4Ycfrje84Q0aN26c3v/+92vx4sWSpAULFujVr361Dj/8cG200UY65ZRTtPXWWw/ud8EFF+gT\nn/iEpk+frnHjxun000/X4sWLtWLFCknSmWeeqTVr1mj33XfX1KlT9eEPf7j4HwP0niaKT+7p4hc1\nPnUCAAAAZTHkTOExd80112i//fYbfHzbbbdp7dq12mabbSRlp1dHhLbbbrvBbaZOnTri56ksdDfd\ndFM9++yzkqRVq1ZtEK/ycV9fn04++WR97GMfG8zHtlauXKmpU6dq/Pjxmj17tk4++WR95StfGXFe\nAFAEI8UAAAAlMbR/d+rUqdpkk0305JNPqr+/X6tXr9aaNWt01113DW7TzItobbPNNoM9wgMGRoEH\n8rngggvU398/mM+zzz6rPffcU5K0cuVKzZs3T0cffbROPfVUrV27tmm5dSN6T9PEJ/d08YuiKAYA\nACiprbfeWgceeKA++tGP6plnnlFE6IEHHtDPf/7zEcUZWmzX8ra3vU333HOPrr76aq1bt05f/epX\n9eijjw6u/9CHPqSzzz5b99xzjyTpqaee0lVXXTW4/uijj9axxx6riy66SJMnT9YZZ5wxojwBrC8i\n/RksnYCiGAAAoARqjfhefvnl+vOf/6xdd91VEydO1Lve9a71CtXRxB5qiy220Pe//32ddtppmjRp\nkn73u99p7733Hlx/2GGH6fTTT9cRRxyhzTffXK997Wt1/fXXS5K+9rWv6fHHH9dnPvMZSdlVqi+9\n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\nPT6NfI8dCytWLG5Z7MWLWxd7LOI/9tiKlsVude4c1+Zr26JY0u6SlkVEX0SslXSlpEOHbHOopMsl\nKSJulTTB9lZjmyaaoVP/p9ctOD7tjePT7halTgB18Plpbx18fBr5Httyzz+/pmWx16xpXeyxiP/H\nPz7fstitzp3j2nztXBRPkVT5E87D+bJ626yssg0AAAAwlhr5HgugTYxPnQAAAACA9W200Tg988xv\ntHbtgxusGz9+ndzA1ZOeeGJ5CzLLLF++XFOmTG5p/FZ66qknWha71bm3+ri2UqvjF+WISJ1DVbb3\nlDQ3Ig7OH58uKSLiCxXbfEvSjRHxvfzxfZL2jYjHqsRrzxcKAACApouIZNfcbeR7bL6c76dAkxX5\n7LfzSPFtkna03SvpEUlHSHrvkG2ulXSipO/l//isqVYQS2n/YQQAAEBXaeR7LN9PgTbRtkVxRKyz\nfZKkG5T1Pl8cEffaPj5bHRdGxALbb7V9v6Q/SDo6Zc4AAABAre+xidMCUEPbnj4NAAAAAECrtfPV\np0eskZuk2/6a7WW2F9ueMdY5drPhjo/tfW2vsX1HPp2RIs9uZfti24/ZvqvONnx+Ehnu+PD5Scv2\ntrZ/avu3tn9j+yM1tuMzlEAjx4fPUDq2N7Z9q+0782N0do3tOv7zY/sztn+dv4b/sr1tje2W59vd\naft/WhB/2O/MVfY51/a9eewf2N6sybk3Gr9I7u+0fbftdbZ3q7Nd0dwbjT/i3PP9emzfYHuJ7R/b\nnjDa/FtdN7Xye39LvrNGRCkmZQX+/ZJ6Jb1E0mJJfzNkm1mSfpTP7yHpltR5d8vU4PHZV9K1qXPt\n1knS3pJmSLqrxno+P+19fPj8pD0+W0uakc+/XNIS/h/UPlODx4fPUNpjtGn+340k3SLpzUPWl+Lz\nI+nlFfP/KOmiGts9IKmnFfEb+U5WI/b/kjQun/+8pHOanPuw8UeR+86SdpL0U0m71dmuaO7Dxi+a\ne77vFyT9cz5/mqTPjyb/RnIZzWeuwfiF/81VC76zlmmkuJGbpB8q6XJJiohbJU2wvdXYptm1Gr2J\nPRecSCQifiFpdZ1N+Pwk1MDxkfj8JBMRj0bE4nz+WUn3asN7kvIZSqTB4yPxGUomIp7LZzdW9oV6\n6L93pfj85O+/AX8lqdZ9gawCZ3Q2GL/R72RDY/9XRLyQP7xFUtVRaBXPvZH4RXNfEhHLNPxnvGju\njcQvlHvuUEmX5fOXSTqsxnaN5t/quqml3/tb8Z21TEVxIzdJH7rNyirboDUavYn9XvlpDj+yvevY\npIYG8flpf3x+2oDtacp+wb51yCo+Q22gzvGR+AwlY3uc7TslPSppUUTcM2ST0nx+bH/O9kOSZks6\np8ZmIWmh7dtsH9vk+I1+J6vng5Kuq7GucO4NxG9G7vU0I/daRpP7KyO/w05EPCrplTW2azT/VtdN\nqb/3jzj3tr36NLrSryRtFxHP2Z4l6WpJ0xPnBHQKPj9twPbLJV0l6eQhIzZoA8McHz5DCeUjhK/P\n+0hvsL1vRPwsdV5F2F4oqXJUysqKlTkR8cOIOEPSGXmf5XxVv3vKmyPiEdtbKity7s1Hx5oVv1Du\n+TZzJK2NiO/WCFM49wbjF869AaPKfTTqxK/Wa1vrSsk1829DbfVvbpmK4pWStqt4vG2+bOg2U4fZ\nBq0x7PGp/IISEdfZPt/2xIjoH6McUR+fnzbG5yc92+OVFVz/EhHXVNmEz1BCwx0fPkPtISKetv0j\nSX8rqbIo7pjPT0Qc0OCm35W0oEaMR/L/Pm77P5SdjvqLJsWv+Z1suNi2Z0t6q6T9a20zmtwbiF84\n90Y06e9eS93vwvXi5xeV2ioiHrO9taTfjzT/keRSsU3Rz1zq7/0jzr1Mp08P3iTd9kuV3ST92iHb\nXCvpSEmyvaekNQOnIqDlhj0+lef6295d2S3D+DIytqza/R18ftKreXz4/LSFSyTdExFfrbGez1Ba\ndY8Pn6F0bE8auJqu7ZdJOkDZhXkqleLzY3vHioeHacPXKdub5mc1yPZfSTpQ0t3Niq/GvjNXi32w\npI9LOiQi/lRjm9HkPmz8orkPfapm595IfI0u92uVnQ4vSUdJ2uCHvRHm3+q6aSy+9zf1O2tpRoqj\nxk3SbR+frY4LI2KB7bfavl/SHzSC00kwOo0cH0nvtP1hSWslPS/pPeky7j62vytppqQt8l6kMyW9\nVHx+2sJwx0d8fpKy/WZJ75f0m7wvMiR9UtmVN/kMJdbI8RGfoZS2kXSZ7YGLBP1LRPykpN/hPm97\nuqR1yq4U/GFJsr2NpG9HxNuVnUL7H7ZD2Xf1f/v/7d07ixNhFAbg97RiJdtYCjZaaCMuiKCFjZ2F\nWGljoSDI/gNrK0Fs9Q+IhYWNimDppVG03MbW1guIsMcio67F4m13s5l5HgiZGSZfThJI5mW+zOnu\nR5s1/kbHZH8w9q3Mfncezz6qPOvuK5tY+2/H/9faq+rMMP5SkgdV9aq7T29W7X8y/n+GxGHdAAAB\nm0lEQVS878ns6tN3q+pikndJzg3P+0/1b3Vu2urj/q04Zq3ujaakAwAAwLiNafo0AAAA/BWhGAAA\ngMkSigEAAJgsoRgAAIDJEooBAACYLKEYAACAyRpNn2KAsauqPUmeZNZjdW9mfSjfZ9a8/lN3H59j\neQAAC0mfYoAFVFXXknzs7hvzrgUAYJGZPg2wmOqXlaoPw/2JqnpaVferarWqrlfV+ap6UVWvq2rf\nsN9SVd2rqufD7dg8XgQAwLwJxQDjsH7az6Ekl5IcTHIhyf7uPprkTpKrwz43k9zo7uUkZ5Pc3sZa\nAQB2DP8pBhifl939PkmqajXJw2H7myQnh+VTSQ5U1fczzrurald3f97WSgEA5kwoBhifL+uW19at\nr+Xn934lWe7ur9tZGADATmP6NMA41O93+cWjJCs/Hlx1eHPLAQBYDEIxwDhs1Epgo+0rSY4MF996\nm+Ty1pQFALCzackEAADAZDlTDAAAwGQJxQAAAEyWUAwAAMBkCcUAAABMllAMAADAZAnFAAAATJZQ\nDAAAwGQJxQAAAEzWNwclZcsKYgYiAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fdcca9d1810>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Support for performance analysis of RTApp workloads\n",
"from perf_analysis import PerfAnalysis\n",
"\n",
"# Parse the RT-App generate log files to compute performance metrics\n",
"pa = PerfAnalysis(res_dir)\n",
"\n",
"# For each task which has generated a logfile, plot its performance metrics\n",
"for task in pa.tasks():\n",
" pa.plotPerf(task, \"Performance plots for task [{}] \".format(task))"
]
}
],
"metadata": {
"celltoolbar": "Raw Cell Format",
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.9"
}
},
"nbformat": 4,
"nbformat_minor": 0
}