blob: 26b6e2a9a09bbc48110a516c729e4c1bdc9558fd [file] [log] [blame]
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import logging\n",
"reload(logging)\n",
"logging.basicConfig(\n",
" format='%(asctime)-9s %(levelname)-8s: %(message)s',\n",
" datefmt='%I:%M:%S')\n",
"\n",
"# Enable logging at INFO level\n",
"logging.getLogger().setLevel(logging.INFO)\n",
"# Uncomment the following lines to enabled CGroups verbose logging\n",
"#logging.getLogger('cgroups').setLevel(logging.DEBUG)\n",
"#logging.getLogger('cgroups.cpuset').setLevel(logging.DEBUG)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import json\n",
"import operator\n",
"\n",
"import devlib\n",
"import trappy\n",
"import bart\n",
"\n",
"from bart.sched.SchedMultiAssert import SchedMultiAssert\n",
"from wlgen import RTA"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Global configuration"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Host side results folder\n",
"RESULTS_DIR = '/tmp/schedtest'\n",
"\n",
"# Taerget side temporary folder\n",
"TARGET_DIR = '/root/schedtest'\n",
"\n",
"# List of tools to install on the target system\n",
"TOOLS = [\"rt-app\", \"trace-cmd\", \"taskset\", \"cgroup_run_into.sh\"]\n",
"\n",
"# List of modules to enable\n",
"MODULES = ['cgroups', 'bl']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Target connection"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"06:18:54 INFO : Target - Using base path: /home/derkling/Code/schedtest\n",
"06:18:54 INFO : Target - Connecing linux target with: {'username': 'root', 'host': '192.168.0.10', 'password': ''}\n",
"06:19:00 INFO : Available controllers: ['cpuset', 'cpu', 'memory', 'hugetlb']\n",
"06:19:01 INFO : Controller cpuset mounted under: /sys/fs/cgroup/devlib_cpuset\n",
"06:19:04 INFO : Controller cpu mounted under: /sys/fs/cgroup/devlib_cpu\n",
"06:19:06 INFO : Controller memory mounted under: /sys/fs/cgroup/devlib_memory\n",
"06:19:08 INFO : Controller hugetlb mounted under: /sys/fs/cgroup/devlib_hugetlb\n",
"06:19:08 INFO : Target - Initializing target workdir [/root/devlib-target]\n",
"06:19:12 INFO : Target topology: [[0, 3, 4, 5], [1, 2]]\n",
"06:19:14 INFO : FTrace - Enabled events:\n",
"06:19:14 INFO : FTrace - ['sched_switch']\n",
"06:19:14 INFO : EnergyMeter - HWMON module not enabled\n",
"06:19:14 WARNING : EnergyMeter - Energy sampling disabled by configuration\n",
"06:19:14 INFO : Loading RTApp calibration from configuration file...\n",
"06:19:14 INFO : Using RT-App calibration values: {0: 363, 1: 138, 2: 139, 3: 352, 4: 353, 5: 361}\n",
"06:19:14 INFO : Connected to arm64 target\n"
]
}
],
"source": [
"from env import TestEnv\n",
"\n",
"my_target_conf = {\n",
" \"platform\" : \"linux\",\n",
" \"board\" : \"juno\",\n",
" \"host\" : \"192.168.0.10\",\n",
" \"username\" : \"root\",\n",
" \"password\" : \"\",\n",
" \"rtapp-calib\" : {\n",
" '0': 363, '1': 138, '2': 139, '3': 352, '4': 353, '5': 361\n",
" },\n",
"}\n",
"\n",
"# Setup the required Test Environment supports\n",
"my_tests_conf = {\n",
" # list of additional devlib modules to install \n",
" \"modules\" : ['cgroups', 'bl', 'cpufreq'],\n",
" # list of additional binary tools to install\n",
" \"tools\" : ['rt-app', 'trace-cmd', 'cgroup_run_into.sh'],\n",
" \"ftrace\" : {\n",
" \"events\" : [\n",
" \"sched_switch\"\n",
" ],\n",
" \"buffsize\" : 10240\n",
" }\n",
"}\n",
"\n",
"env = TestEnv(target_conf=my_target_conf, test_conf=my_tests_conf)\n",
"t = env.target\n",
"\n",
"# Report target connection\n",
"logging.info('Connected to %s target', t.abi)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## List available Controller"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"06:19:14 INFO : Controller: cpuset (hierarchy id: 1) has 1 cgroups\n",
"06:19:14 INFO : Controller: cpu (hierarchy id: 2) has 1 cgroups\n",
"06:19:14 INFO : Controller: memory (hierarchy id: 3) has 1 cgroups\n",
"06:19:14 INFO : Controller: hugetlb (hierarchy id: 4) has 1 cgroups\n"
]
}
],
"source": [
"ssys = t.cgroups.list_subsystems()\n",
"for (n,h,g,e) in ssys:\n",
" logging.info('Controller: %10s (hierarchy id: %d) has %d cgroups',\n",
" n, h, g)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Example of CPUSET controller usage"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Get a reference to the CPUSet controller\n",
"cpuset = t.cgroups.controller('cpuset')"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"06:19:15 INFO : Existing CGropups:\n",
"06:19:15 INFO : /\n"
]
}
],
"source": [
"# Get the list of current configured CGroups for that controller\n",
"cgroups = cpuset.list_all()\n",
"logging.info('Existing CGropups:')\n",
"for cg in cgroups:\n",
" logging.info(' %s', cg)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"06:19:15 INFO : cpuset:/ cpus: 0-5\r\n"
]
}
],
"source": [
"# Dump the configuraiton of each controller\n",
"for cgname in cgroups:\n",
" cgroup = cpuset.cgroup(cgname)\n",
" attrs = cgroup.get()\n",
" cpus = attrs['cpus']\n",
" logging.info('%s:%-15s cpus: %s', cpuset.kind, cgroup.name, cpus)\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Create a LITTLE partition\n",
"cpuset_littles = cpuset.cgroup('/LITTLE')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"LITTLE:\n",
"{\n",
" \"cpu_exclusive\": \"0\\r\", \n",
" \"memory_spread_page\": \"0\\r\", \n",
" \"sched_load_balance\": \"1\\r\", \n",
" \"cpus\": \"\\r\", \n",
" \"effective_mems\": \"\\r\", \n",
" \"mem_hardwall\": \"0\\r\", \n",
" \"mem_exclusive\": \"0\\r\", \n",
" \"memory_pressure\": \"0\\r\", \n",
" \"effective_cpus\": \"\\r\", \n",
" \"mems\": \"\\r\", \n",
" \"sched_relax_domain_level\": \"-1\\r\", \n",
" \"memory_migrate\": \"0\\r\", \n",
" \"memory_spread_slab\": \"0\\r\"\n",
"}\n"
]
}
],
"source": [
"# Check the attributes available for this control group\n",
"print \"LITTLE:\\n\", json.dumps(cpuset_littles.get(), indent=4)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"LITTLE:\n",
"{\n",
" \"cpu_exclusive\": \"0\\r\", \n",
" \"memory_spread_page\": \"0\\r\", \n",
" \"sched_load_balance\": \"1\\r\", \n",
" \"cpus\": \"0,3-5\\r\", \n",
" \"effective_mems\": \"0\\r\", \n",
" \"mem_hardwall\": \"0\\r\", \n",
" \"mem_exclusive\": \"0\\r\", \n",
" \"memory_pressure\": \"0\\r\", \n",
" \"effective_cpus\": \"0,3-5\\r\", \n",
" \"mems\": \"0\\r\", \n",
" \"sched_relax_domain_level\": \"-1\\r\", \n",
" \"memory_migrate\": \"0\\r\", \n",
" \"memory_spread_slab\": \"0\\r\"\n",
"}\n"
]
}
],
"source": [
"# Tune CPUs and MEMs attributes\n",
"# they must be initialize for the group to be usable\n",
"cpuset_littles.set(cpus=t.bl.littles, mems=0)\n",
"print \"LITTLE:\\n\", json.dumps(cpuset_littles.get(), indent=4)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"06:19:18 INFO : Setup new workload simple\n",
"06:19:18 INFO : Workload duration defined by longest task\n",
"06:19:18 INFO : Default policy: SCHED_OTHER\n",
"06:19:18 INFO : ------------------------\n",
"06:19:18 INFO : task [task0], sched: using default policy\n",
"06:19:18 INFO : | loops count: 1\n",
"06:19:18 INFO : + phase_000001: duration 5.000000 [s] (50 loops)\n",
"06:19:18 INFO : | period 100000 [us], duty_cycle 80 %\n",
"06:19:18 INFO : | run_time 80000 [us], sleep_time 20000 [us]\n",
"06:19:18 INFO : ------------------------\n",
"06:19:18 INFO : task [task1], sched: using default policy\n",
"06:19:18 INFO : | loops count: 1\n",
"06:19:18 INFO : + phase_000001: duration 5.000000 [s] (50 loops)\n",
"06:19:18 INFO : | period 100000 [us], duty_cycle 80 %\n",
"06:19:18 INFO : | run_time 80000 [us], sleep_time 20000 [us]\n",
"06:19:18 INFO : ------------------------\n",
"06:19:18 INFO : task [task2], sched: using default policy\n",
"06:19:18 INFO : | loops count: 1\n",
"06:19:18 INFO : + phase_000001: duration 5.000000 [s] (50 loops)\n",
"06:19:18 INFO : | period 100000 [us], duty_cycle 80 %\n",
"06:19:18 INFO : | run_time 80000 [us], sleep_time 20000 [us]\n",
"06:19:18 INFO : ------------------------\n",
"06:19:18 INFO : task [task3], sched: using default policy\n",
"06:19:18 INFO : | loops count: 1\n",
"06:19:18 INFO : + phase_000001: duration 5.000000 [s] (50 loops)\n",
"06:19:18 INFO : | period 100000 [us], duty_cycle 80 %\n",
"06:19:18 INFO : | run_time 80000 [us], sleep_time 20000 [us]\n",
"06:19:18 INFO : ------------------------\n",
"06:19:18 INFO : task [task4], sched: using default policy\n",
"06:19:18 INFO : | loops count: 1\n",
"06:19:18 INFO : + phase_000001: duration 5.000000 [s] (50 loops)\n",
"06:19:18 INFO : | period 100000 [us], duty_cycle 80 %\n",
"06:19:18 INFO : | run_time 80000 [us], sleep_time 20000 [us]\n",
"06:19:18 INFO : ------------------------\n",
"06:19:18 INFO : task [task5], sched: using default policy\n",
"06:19:18 INFO : | loops count: 1\n",
"06:19:18 INFO : + phase_000001: duration 5.000000 [s] (50 loops)\n",
"06:19:18 INFO : | period 100000 [us], duty_cycle 80 %\n",
"06:19:18 INFO : | run_time 80000 [us], sleep_time 20000 [us]\n"
]
}
],
"source": [
"# Define a periodic big (80%) task\n",
"task = RTA.periodic(\n",
" period_ms=100,\n",
" duty_cycle_pct=80,\n",
" duration_s=5)\n",
"\n",
"# Create one task per each CPU in the target\n",
"tasks={}\n",
"for tid in enumerate(t.core_names):\n",
" tasks['task{}'.format(tid[0])] = task\n",
"\n",
"# Configure RTA to run all these tasks\n",
"rtapp = RTA(t, 'simple', calibration=env.calibration())\n",
"rtapp.conf(kind='profile', params=tasks, run_dir=TARGET_DIR);"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"06:19:24 INFO : Executor [start]: /root/devlib-target/bin/cgroup_run_into.sh /LITTLE '/root/devlib-target/bin/rt-app /root/schedtest/simple_00.json'\n",
"06:19:42 INFO : Pulling trace file into [.//simple_00.dat]...\n",
"06:19:45 INFO : Executor [end]: /root/devlib-target/bin/cgroup_run_into.sh /LITTLE '/root/devlib-target/bin/rt-app /root/schedtest/simple_00.json'\n"
]
}
],
"source": [
"# Test execution of all these tasks into the LITTLE cluster\n",
"trace = rtapp.run(ftrace=env.ftrace, cgroup=cpuset_littles.name)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"<style>\n",
"/*\n",
"\n",
" * Copyright 2015-2015 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_aa3f549e4237424ca60041520d2d8cbe\" 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.v3.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_aa3f549e4237424ca60041520d2d8cbe', '/nbextensions/');\n",
" });\n",
" </script>\n",
" </div>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Check tasks residency on little clsuter\n",
"trappy.plotter.plot_trace(trace)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{\n",
" \"1256\": {\n",
" \"residency\": 100.0, \n",
" \"task_name\": \"rt-app\"\n",
" }, \n",
" \"1257\": {\n",
" \"residency\": 100.0, \n",
" \"task_name\": \"rt-app\"\n",
" }, \n",
" \"1258\": {\n",
" \"residency\": 100.00000000000001, \n",
" \"task_name\": \"rt-app\"\n",
" }, \n",
" \"1259\": {\n",
" \"residency\": 100.00000000000001, \n",
" \"task_name\": \"rt-app\"\n",
" }, \n",
" \"1260\": {\n",
" \"residency\": 100.0, \n",
" \"task_name\": \"rt-app\"\n",
" }, \n",
" \"1261\": {\n",
" \"residency\": 100.00000000000001, \n",
" \"task_name\": \"rt-app\"\n",
" }\n",
"}\n"
]
}
],
"source": [
"# Compute and visualize tasks residencies on LITTLE clusterh CPUs\n",
"s = SchedMultiAssert(trappy.Run(trace), env.topology, execnames=\"task\")\n",
"residencies = s.getResidency('cluster', env.target.bl.littles, percent=True)\n",
"print json.dumps(residencies, indent=4)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Assert that ALL tasks have always executed only on LITTLE cluster\n",
"s.assertResidency('cluster', env.target.bl.littles,\n",
" 99.9, operator.ge, percent=True, rank=len(residencies))"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## Example of CPU controller usage"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Get a reference to the CPU controller\n",
"cpu = t.cgroups.controller('cpu')"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Create a big partition on that CPUS\n",
"cpu_littles = cpu.cgroup('/LITTLE')"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"LITTLE:\n",
"{\n",
" \"stat\": \"throttled_time 0\\r\", \n",
" \"rt_runtime_us\": \"0\\r\", \n",
" \"shares\": \"1024\\r\", \n",
" \"cfs_quota_us\": \"-1\\r\", \n",
" \"rt_period_us\": \"1000000\\r\", \n",
" \"cfs_period_us\": \"100000\\r\"\n",
"}\n"
]
}
],
"source": [
"# Check the attributes available for this control group\n",
"print \"LITTLE:\\n\", json.dumps(cpu_littles.get(), indent=4)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"LITTLE:\n",
"{\n",
" \"stat\": \"throttled_time 0\\r\", \n",
" \"rt_runtime_us\": \"0\\r\", \n",
" \"shares\": \"1024\\r\", \n",
" \"cfs_quota_us\": \"50000\\r\", \n",
" \"rt_period_us\": \"1000000\\r\", \n",
" \"cfs_period_us\": \"100000\\r\"\n",
"}\n"
]
}
],
"source": [
"# Set a 1CPU equivalent bandwidth for that CGroup\n",
"cpu_littles.set(cfs_period_us=100000, cfs_quota_us=50000)\n",
"print \"LITTLE:\\n\", json.dumps(cpu_littles.get(), indent=4)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"06:19:56 INFO : Executor [start]: /root/devlib-target/bin/cgroup_run_into.sh /LITTLE '/root/devlib-target/bin/rt-app /root/schedtest/simple_00.json'\n",
"06:22:03 INFO : Pulling trace file into [.//simple_00.dat]...\n",
"06:22:07 INFO : Executor [end]: /root/devlib-target/bin/cgroup_run_into.sh /LITTLE '/root/devlib-target/bin/rt-app /root/schedtest/simple_00.json'\n"
]
}
],
"source": [
"# Test execution of all these tasks into the LITTLE cluster\n",
"trace = rtapp.run(ftrace=env.ftrace, cgroup=cpu_littles.name)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<style>\n",
"/*\n",
"\n",
" * Copyright 2015-2015 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_931accaef9e54b439227a93fbd22b1d1\" 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.v3.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_931accaef9e54b439227a93fbd22b1d1', '/nbextensions/');\n",
" });\n",
" </script>\n",
" </div>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Check tasks residency on little clsuter\n",
"trappy.plotter.plot_trace(trace)"
]
}
],
"metadata": {
"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
}