724 lines
26 KiB
Text
724 lines
26 KiB
Text
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Run Tests on ChromeOS using `test_that`"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"This notebook shows how to run tests on a Chromebook using `test_that`. At the end of the test results are collected as a dictionary as well as trace events if you specify so in the target configuration.\n",
|
|
"\n",
|
|
"**NOTE**: if you want to receive a token from the benchmark before starting trace collection and power measurement, you need to modify the benchmark such that a specific UDP packet is sent to the host machine. As a reference, consider the following python script and convert it to the language in which the benchmark is written accordingly:\n",
|
|
"\n",
|
|
"```python\n",
|
|
"import socket\n",
|
|
"sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\n",
|
|
"sock.sendto(\"POWER\", (<TARGET_IP>, 1234))\n",
|
|
"sock.close()\n",
|
|
"```\n",
|
|
"\n",
|
|
"You should put this right before the instruction that starts the execution of the actual workload in the benchmark.\n",
|
|
"\n",
|
|
"\n",
|
|
"In case of Acquarium, you should put this in\n",
|
|
"\n",
|
|
"```shell\n",
|
|
"<CROS_PATH>/trunk/src/third_party/autotest/files/client/site_tests/graphics_WebGLAquarium/graphics_WebGLAcquarium.py:run_fish_test()\n",
|
|
"```\n",
|
|
"\n",
|
|
"Being `CROS_PATH` the ChromeOS chroot."
|
|
]
|
|
},
|
|
{
|
|
"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": [
|
|
"import getpass\n",
|
|
"from subprocess import Popen, PIPE\n",
|
|
"\n",
|
|
"import os\n",
|
|
"import pandas as pd\n",
|
|
"import scipy.integrate as integrate\n",
|
|
"import re\n",
|
|
"import json\n",
|
|
"\n",
|
|
"# Support to access the remote target\n",
|
|
"import devlib\n",
|
|
"from env import TestEnv\n",
|
|
"\n",
|
|
"import trappy\n",
|
|
"\n",
|
|
"import socket\n",
|
|
"\n",
|
|
"from time import sleep\n",
|
|
"\n",
|
|
"import netifaces as ni"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Target Configuration"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Define your path to the ChromeOS installation folder\n",
|
|
"CROS_BASE = \"/data/chromiumos\""
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Setup a target configuration\n",
|
|
"my_conf = {\n",
|
|
" \n",
|
|
" # Target platform and board\n",
|
|
" \"platform\" : 'linux',\n",
|
|
" \n",
|
|
" # Target board IP/MAC address\n",
|
|
" \"host\" : '192.168.0.1',\n",
|
|
" \n",
|
|
" # Login credentials\n",
|
|
" \"username\" : 'root',\n",
|
|
" \"password\" : 'test0000',\n",
|
|
" \n",
|
|
" # Tools required by the experiments\n",
|
|
" \"tools\" : [ 'trace-cmd' ], \n",
|
|
" \n",
|
|
" # FTrace events to collect for all the tests configuration which have\n",
|
|
" # the \"ftrace\" flag enabled\n",
|
|
" \"ftrace\" : {\n",
|
|
" \"events\" : [\n",
|
|
" \"cpu_frequency\",\n",
|
|
" \"cpu_idle\",\n",
|
|
" \"sched_switch\"\n",
|
|
" ],\n",
|
|
" \"buffsize\" : 10 * 1024,\n",
|
|
" },\n",
|
|
"}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {
|
|
"collapsed": false,
|
|
"scrolled": true
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"2016-04-27 11:06:35,781 INFO : Target - Using base path: /home/pippo/work/lisa\n",
|
|
"2016-04-27 11:06:35,782 INFO : Target - Loading custom (inline) target configuration\n",
|
|
"2016-04-27 11:06:35,782 DEBUG : Target - Target configuration {'username': 'root', 'ftrace': {'buffsize': 10240, 'events': ['cpu_frequency', 'cpu_idle', 'sched_switch']}, 'platform': 'linux', 'host': '192.168.0.1', 'board': 'oak', 'password': 'test0000', 'tools': ['trace-cmd']}\n",
|
|
"2016-04-27 11:06:35,783 INFO : Target - Devlib modules to load: ['bl', 'cpufreq']\n",
|
|
"2016-04-27 11:06:35,783 INFO : Target - Connecting linux target:\n",
|
|
"2016-04-27 11:06:35,784 INFO : Target - username : root\n",
|
|
"2016-04-27 11:06:35,785 INFO : Target - host : 192.168.0.1\n",
|
|
"2016-04-27 11:06:35,785 INFO : Target - password : test0000\n",
|
|
"2016-04-27 11:06:35,786 DEBUG : Target - Setup LINUX target...\n",
|
|
"2016-04-27 11:06:35,795 DEBUG : Logging in root@192.168.0.1\n",
|
|
"2016-04-27 11:06:37,318 DEBUG : id\n",
|
|
"2016-04-27 11:06:37,727 DEBUG : if [ -e '/root/devlib-target/bin' ]; then echo 1; else echo 0; fi\n",
|
|
"2016-04-27 11:06:38,133 DEBUG : ls -1 /root/devlib-target/bin\n",
|
|
"2016-04-27 11:06:38,541 DEBUG : cat /proc/cpuinfo\n",
|
|
"2016-04-27 11:06:38,851 DEBUG : Installing module bl\n",
|
|
"2016-04-27 11:06:38,952 DEBUG : /root/devlib-target/bin/busybox uname -m\n",
|
|
"2016-04-27 11:06:39,359 DEBUG : if [ -e '/sys/devices/system/cpu/cpufreq' ]; then echo 1; else echo 0; fi\n",
|
|
"2016-04-27 11:06:39,665 DEBUG : Installing module cpufreq\n",
|
|
"2016-04-27 11:06:39,666 DEBUG : Target - Checking target connection...\n",
|
|
"2016-04-27 11:06:39,666 DEBUG : Target - Target info:\n",
|
|
"2016-04-27 11:06:39,667 DEBUG : Target - ABI: arm64\n",
|
|
"2016-04-27 11:06:39,668 DEBUG : Target - CPUs: CpuInfo(['A53', 'A53', 'A72', 'A72'])\n",
|
|
"2016-04-27 11:06:39,668 DEBUG : Target - Clusters: [0, 0, 1, 1]\n",
|
|
"2016-04-27 11:06:39,770 DEBUG : sudo -- sh -c 'mount -o remount,rw /'\n",
|
|
"2016-04-27 11:06:40,574 INFO : Target - Initializing target workdir:\n",
|
|
"2016-04-27 11:06:40,575 INFO : Target - /root/devlib-target\n",
|
|
"2016-04-27 11:06:40,676 DEBUG : mkdir -p /root/devlib-target\n",
|
|
"2016-04-27 11:06:41,085 DEBUG : mkdir -p /root/devlib-target/bin\n",
|
|
"2016-04-27 11:06:41,393 DEBUG : /usr/bin/scp -r /home/pippo/work/lisa/libs/devlib/devlib/bin/arm64/busybox root@192.168.0.1:/root/devlib-target/bin/busybox\n",
|
|
"2016-04-27 11:06:41,804 DEBUG : chmod a+x /root/devlib-target/bin/busybox\n",
|
|
"2016-04-27 11:06:42,112 DEBUG : /usr/bin/scp -r /home/pippo/work/lisa/libs/devlib/devlib/bin/scripts/shutils root@192.168.0.1:/root/devlib-target/bin/shutils\n",
|
|
"2016-04-27 11:06:42,360 DEBUG : chmod a+x /root/devlib-target/bin/shutils\n",
|
|
"2016-04-27 11:06:42,668 DEBUG : /usr/bin/scp -r /home/pippo/work/lisa/tools/arm64/trace-cmd root@192.168.0.1:/root/devlib-target/bin/trace-cmd\n",
|
|
"2016-04-27 11:06:42,976 DEBUG : chmod a+x /root/devlib-target/bin/trace-cmd\n",
|
|
"2016-04-27 11:06:43,285 DEBUG : Target - Check for module [bl]...\n",
|
|
"2016-04-27 11:06:43,286 DEBUG : Target - Check for module [cpufreq]...\n",
|
|
"2016-04-27 11:06:43,287 INFO : Target - Topology:\n",
|
|
"2016-04-27 11:06:43,287 INFO : Target - [[0, 1], [2, 3]]\n",
|
|
"2016-04-27 11:06:43,389 DEBUG : sudo -- sh -c 'cat '\\''/sys/devices/system/cpu/online'\\'''\n",
|
|
"2016-04-27 11:06:44,293 DEBUG : cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies\n",
|
|
"2016-04-27 11:06:44,702 DEBUG : sudo -- sh -c 'cat '\\''/sys/devices/system/cpu/online'\\'''\n",
|
|
"2016-04-27 11:06:45,606 DEBUG : cat /sys/devices/system/cpu/cpu2/cpufreq/scaling_available_frequencies\n",
|
|
"2016-04-27 11:06:45,914 DEBUG : Platform - Trying to load default EM from /home/pippo/work/lisa/libs/utils/platforms/oak.json\n",
|
|
"2016-04-27 11:06:45,915 DEBUG : Platform - Platform descriptor initialized\n",
|
|
"{'nrg_model': None, 'clusters': {'big': [2, 3], 'little': [0, 1]}, 'cpus_count': 4, 'freqs': {'big': [507000, 702000, 1001000, 1209000, 1404000, 1612000, 1807000, 2106000], 'little': [507000, 702000, 1001000, 1105000, 1209000, 1300000, 1508000, 1703000]}, 'topology': [[0, 1], [2, 3]]}\n",
|
|
"2016-04-27 11:06:45,932 DEBUG : /usr/bin/scp -r /home/pippo/work/lisa/libs/devlib/devlib/bin/arm64/trace-cmd root@192.168.0.1:/root/devlib-target/bin/trace-cmd\n",
|
|
"2016-04-27 11:06:46,296 DEBUG : chmod a+x /root/devlib-target/bin/trace-cmd\n",
|
|
"2016-04-27 11:06:46,704 DEBUG : cat /sys/kernel/debug/tracing/available_events\n",
|
|
"2016-04-27 11:06:47,036 INFO : FTrace - Enabled tracepoints:\n",
|
|
"2016-04-27 11:06:47,037 INFO : FTrace - cpu_frequency\n",
|
|
"2016-04-27 11:06:47,038 INFO : FTrace - cpu_idle\n",
|
|
"2016-04-27 11:06:47,038 INFO : FTrace - sched_switch\n",
|
|
"2016-04-27 11:06:47,039 DEBUG : No RT-App workloads, skipping calibration\n",
|
|
"2016-04-27 11:06:47,040 INFO : TestEnv - Set results folder to:\n",
|
|
"2016-04-27 11:06:47,040 INFO : TestEnv - /home/pippo/work/lisa/results/20160427_110647\n",
|
|
"2016-04-27 11:06:47,040 INFO : TestEnv - Experiment results available also in:\n",
|
|
"2016-04-27 11:06:47,041 INFO : TestEnv - /home/pippo/work/lisa/results_latest\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Initialize a test environment using:\n",
|
|
"# the provided target configuration (my_conf)\n",
|
|
"te = TestEnv(my_conf)\n",
|
|
"target = te.target"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def get_host_ip():\n",
|
|
" \"\"\"Returns the IP of the local host\"\"\"\n",
|
|
" ifs = ni.interfaces()\n",
|
|
" for interface in ifs:\n",
|
|
" if interface == 'lo':\n",
|
|
" continue\n",
|
|
"\n",
|
|
" addresses = ni.ifaddresses(interface)\n",
|
|
" if addresses.has_key(socket.AF_INET):\n",
|
|
" return addresses[socket.AF_INET][0]['addr']\n",
|
|
"\n",
|
|
"HOST_IP = get_host_ip()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Set ChromeOS paths"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"CROS_SDK_BIN_PATH = CROS_BASE + \"/chromium/tools/depot_tools/cros_sdk\"\n",
|
|
"username = !id -un\n",
|
|
"CROS_PATH = CROS_BASE + \"/chroot/home/\" + username[0]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Test-specific Parser Functions"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def parse_graphics_WebGLAquarium(results_dir):\n",
|
|
" results_file = os.path.join(\n",
|
|
" CROS_PATH,\n",
|
|
" os.path.basename(results_dir),\n",
|
|
" 'results-1-graphics_WebGLAquarium/graphics_WebGLAquarium/results/keyval'\n",
|
|
" )\n",
|
|
" \n",
|
|
" data = {}\n",
|
|
" with open(results_file) as data_file:\n",
|
|
" for line in data_file:\n",
|
|
" if line.strip():\n",
|
|
" key, val = line.split('=')\n",
|
|
" data[key] = float(val)\n",
|
|
" \n",
|
|
" return data"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"parse_results = {\n",
|
|
" # Acquarium\n",
|
|
" 'graphics_WebGLAquarium' : parse_graphics_WebGLAquarium\n",
|
|
"}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Run a Test"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {
|
|
"collapsed": false,
|
|
"run_control": {
|
|
"marked": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def CrosSdkSession(password):\n",
|
|
" \"\"\"\n",
|
|
" Create cros_sdk session. The user will be asked to type his password.\n",
|
|
" \n",
|
|
" :param password: host machine password\n",
|
|
" :type password: str\n",
|
|
" \"\"\"\n",
|
|
" cros_sdk_session = Popen(['sudo -Sk {}'.format(CROS_SDK_BIN_PATH)],\n",
|
|
" bufsize=1,\n",
|
|
" stdin=PIPE,\n",
|
|
" stdout=PIPE,\n",
|
|
" stderr=PIPE,\n",
|
|
" cwd=CROS_PATH,\n",
|
|
" shell=True)\n",
|
|
" cros_sdk_session.stdin.write(password)\n",
|
|
" cros_sdk_session.stdin.write('\\n')\n",
|
|
" return cros_sdk_session\n",
|
|
"\n",
|
|
"def test_that(password, te, test, pwr_time_s, get_token=False):\n",
|
|
" \"\"\"\n",
|
|
" Run a specific test using the test_that command.\n",
|
|
" \n",
|
|
" :param password: host machine password\n",
|
|
" :type password: str\n",
|
|
" \n",
|
|
" :param te: Test Environment object\n",
|
|
" :type te: env.TestEnv\n",
|
|
" \n",
|
|
" :param test: name of the test to be run\n",
|
|
" :type test: str\n",
|
|
" \n",
|
|
" :param pwr_time_s: power measurement duration in seconds\n",
|
|
" :type pwr_time_s: int\n",
|
|
" \n",
|
|
" :param get_token: if True wait for token before collecting traces\n",
|
|
" :type get_token: bool\n",
|
|
" \"\"\"\n",
|
|
" \n",
|
|
" results_dir = \"~/results-dir\"\n",
|
|
" pwr_file = \"~/power.txt\"\n",
|
|
" \n",
|
|
" test_cmd = 'test_that -b oak {} --results_dir {} {}\\n'.format(te.ip,\n",
|
|
" results_dir,\n",
|
|
" test)\n",
|
|
" pwr_cmd = 'dut-control -t {} -y dvfs1_mw dvfs2_mw > {}\\n'.format(pwr_time_s,\n",
|
|
" pwr_file)\n",
|
|
" \n",
|
|
" # Create cros_sdk session\n",
|
|
" cros_sdk_session = CrosSdkSession(password)\n",
|
|
" \n",
|
|
" logging.info('#### Start %s execution', test)\n",
|
|
" cros_sdk_session.stdin.write(test_cmd)\n",
|
|
" \n",
|
|
" if get_token:\n",
|
|
" # Setup socket to get token from target\n",
|
|
" sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\n",
|
|
" sock.bind((HOST_IP, 1234))\n",
|
|
" logging.debug(' Waiting for token...')\n",
|
|
" while True:\n",
|
|
" data, addr = sock.recvfrom(32)\n",
|
|
" if addr[0] == te.ip and data == \"POWER\":\n",
|
|
" break\n",
|
|
" sock.close() \n",
|
|
" logging.debug(' Token received....')\n",
|
|
" \n",
|
|
" logging.debug(' Start trace collection')\n",
|
|
" # Check if trace events need to be collected\n",
|
|
" if te.ftrace:\n",
|
|
" te.ftrace.start()\n",
|
|
" \n",
|
|
" sleep(5)\n",
|
|
" # Start measuring power\n",
|
|
" cros_sdk_session.stdin.write(pwr_cmd)\n",
|
|
" \n",
|
|
" # communicate will close the session when the command terminates\n",
|
|
" cros_sdk_session.communicate()\n",
|
|
" logging.info('#### Completed %s execution', test)\n",
|
|
" \n",
|
|
" if te.ftrace:\n",
|
|
" te.ftrace.stop()\n",
|
|
" te.ftrace.get_trace(os.path.join(te.res_dir, 'trace.dat'))\n",
|
|
" \n",
|
|
" # Parse results using test-specific parser\n",
|
|
" results = parse_results[test](results_dir)\n",
|
|
" \n",
|
|
" # Copy results to our Test Environment results directory\n",
|
|
" with open(os.path.join(te.res_dir, 'results.json'), 'w') as outfile:\n",
|
|
" json.dumps(results, outfile)\n",
|
|
" \n",
|
|
" return {\n",
|
|
" \"results\" : results,\n",
|
|
" \"pwr_file\" : pwr_file\n",
|
|
" }"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {
|
|
"collapsed": false,
|
|
"run_control": {
|
|
"marked": false
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"········\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# ask user for host password\n",
|
|
"password = getpass.getpass()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {
|
|
"collapsed": false,
|
|
"run_control": {
|
|
"marked": false
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"2016-04-27 11:06:53,601 INFO : #### Start graphics_WebGLAquarium execution\n",
|
|
"2016-04-27 11:06:53,603 DEBUG : Waiting for token...\n",
|
|
"2016-04-27 11:07:23,040 DEBUG : Token received....\n",
|
|
"2016-04-27 11:07:23,041 DEBUG : Start trace collection\n",
|
|
"2016-04-27 11:07:23,142 DEBUG : sudo -- sh -c 'echo 10240 > '\\''/sys/kernel/debug/tracing/buffer_size_kb'\\'''\n",
|
|
"2016-04-27 11:07:23,845 DEBUG : sudo -- sh -c 'cat '\\''/sys/kernel/debug/tracing/buffer_size_kb'\\'''\n",
|
|
"2016-04-27 11:07:24,750 DEBUG : sudo -- sh -c '/root/devlib-target/bin/trace-cmd reset'\n",
|
|
"2016-04-27 11:07:26,170 DEBUG : sudo -- sh -c '/root/devlib-target/bin/trace-cmd start -e cpu_frequency -e cpu_idle -e sched_switch'\n",
|
|
"2016-04-27 11:07:27,539 DEBUG : sudo -- sh -c 'echo TRACE_MARKER_START > '\\''/sys/kernel/debug/tracing/trace_marker'\\'''\n",
|
|
"2016-04-27 11:07:28,141 DEBUG : Trace CPUFreq frequencies\n",
|
|
"2016-04-27 11:07:28,242 DEBUG : sudo -- sh -c '/root/devlib-target/bin/shutils cpufreq_trace_all_frequencies'\n",
|
|
"2016-04-27 11:08:45,869 INFO : #### Completed graphics_WebGLAquarium execution\n",
|
|
"2016-04-27 11:08:45,870 DEBUG : Trace CPUFreq frequencies\n",
|
|
"2016-04-27 11:08:45,971 DEBUG : sudo -- sh -c '/root/devlib-target/bin/shutils cpufreq_trace_all_frequencies'\n",
|
|
"2016-04-27 11:08:46,875 DEBUG : sudo -- sh -c 'echo TRACE_MARKER_STOP > '\\''/sys/kernel/debug/tracing/trace_marker'\\'''\n",
|
|
"2016-04-27 11:08:47,578 DEBUG : sudo -- sh -c '/root/devlib-target/bin/trace-cmd stop'\n",
|
|
"2016-04-27 11:08:48,482 DEBUG : sudo -- sh -c '/root/devlib-target/bin/trace-cmd extract -o /root/devlib-target/trace.dat'\n",
|
|
"2016-04-27 11:08:50,337 DEBUG : /usr/bin/scp -r root@192.168.0.1:/root/devlib-target/trace.dat /home/pippo/work/lisa/results/20160427_110647/trace.dat\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Run Acquarium and collect results\n",
|
|
"acquarium_res = test_that(password,\n",
|
|
" te,\n",
|
|
" 'graphics_WebGLAquarium',\n",
|
|
" 10,\n",
|
|
" get_token=True)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>Values</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>avg_render_time_0050_fishes{perf}</th>\n",
|
|
" <td>0.007754</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>std_render_time_0050_fishes{perf}</th>\n",
|
|
" <td>0.003022</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>avg_render_time_1000_fishes{perf}</th>\n",
|
|
" <td>0.015975</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>meminfo_MemUsed{perf}</th>\n",
|
|
" <td>1052424.000000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>std_interframe_time_1000_fishes{perf}</th>\n",
|
|
" <td>0.036034</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>avg_fps_1000_fishes{perf}</th>\n",
|
|
" <td>38.576854</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>std_interframe_time_0050_fishes{perf}</th>\n",
|
|
" <td>0.029933</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>std_render_time_1000_fishes{perf}</th>\n",
|
|
" <td>0.002286</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>meminfo_SwapUsed{perf}</th>\n",
|
|
" <td>0.000000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>avg_interframe_time_1000_fishes{perf}</th>\n",
|
|
" <td>0.025922</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>avg_interframe_time_0050_fishes{perf}</th>\n",
|
|
" <td>0.017457</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>avg_fps_0050_fishes{perf}</th>\n",
|
|
" <td>57.282652</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" Values\n",
|
|
"avg_render_time_0050_fishes{perf} 0.007754\n",
|
|
"std_render_time_0050_fishes{perf} 0.003022\n",
|
|
"avg_render_time_1000_fishes{perf} 0.015975\n",
|
|
"meminfo_MemUsed{perf} 1052424.000000\n",
|
|
"std_interframe_time_1000_fishes{perf} 0.036034\n",
|
|
"avg_fps_1000_fishes{perf} 38.576854\n",
|
|
"std_interframe_time_0050_fishes{perf} 0.029933\n",
|
|
"std_render_time_1000_fishes{perf} 0.002286\n",
|
|
"meminfo_SwapUsed{perf} 0.000000\n",
|
|
"avg_interframe_time_1000_fishes{perf} 0.025922\n",
|
|
"avg_interframe_time_0050_fishes{perf} 0.017457\n",
|
|
"avg_fps_0050_fishes{perf} 57.282652"
|
|
]
|
|
},
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Print Acquarium results\n",
|
|
"df = pd.DataFrame.from_dict(acquarium_res['results'], orient=\"index\")\n",
|
|
"df.columns = ['Values']\n",
|
|
"df"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Plot trace data using TRAPpy"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"if te.ftrace:\n",
|
|
" trappy.plotter.plot_trace(te.res_dir)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Compute Energy"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>Energy [mJ]</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>Total</th>\n",
|
|
" <td>4573.172353</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>LITTLE Cluster</th>\n",
|
|
" <td>1574.512282</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>big Cluster</th>\n",
|
|
" <td>2998.660071</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" Energy [mJ]\n",
|
|
"Total 4573.172353\n",
|
|
"LITTLE Cluster 1574.512282\n",
|
|
"big Cluster 2998.660071"
|
|
]
|
|
},
|
|
"execution_count": 15,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Collect SERVO trace\n",
|
|
"servo_trace_file = os.path.join(CROS_PATH,\n",
|
|
" os.path.basename(acquarium_res['pwr_file']))\n",
|
|
"time = []\n",
|
|
"dvfs1_wm = []\n",
|
|
"dvfs2_wm = []\n",
|
|
"with open(servo_trace_file, 'r') as f:\n",
|
|
" for l in f:\n",
|
|
" if l.startswith(\"@@\"):\n",
|
|
" continue\n",
|
|
"\n",
|
|
" info = re.split(r'[ :]+', l)\n",
|
|
" if info[1] == \"dvfs1_mw\":\n",
|
|
" time.append(float(info[0]))\n",
|
|
" dvfs1_wm.append(float(info[2]))\n",
|
|
" else:\n",
|
|
" dvfs2_wm.append(float(info[2]))\n",
|
|
"\n",
|
|
"# Create dataframes for power data from SERVO board\n",
|
|
"big_pwr = pd.DataFrame(dvfs1_wm, index=time, columns=['Power'])\n",
|
|
"little_pwr = pd.DataFrame(dvfs2_wm, index=time, columns=['Power'])\n",
|
|
"\n",
|
|
"x = big_pwr.index.get_values()\n",
|
|
"y = big_pwr.Power.get_values()\n",
|
|
"bnrg = integrate.simps(y, x=x)\n",
|
|
"\n",
|
|
"x = little_pwr.index.get_values()\n",
|
|
"y = little_pwr.Power.get_values()\n",
|
|
"lnrg = integrate.simps(y, x=x)\n",
|
|
"results = {\n",
|
|
" 'big Cluster' : bnrg,\n",
|
|
" 'LITTLE Cluster' : lnrg,\n",
|
|
" 'Total' : bnrg + lnrg,\n",
|
|
"}\n",
|
|
"\n",
|
|
"df = pd.DataFrame.from_dict(results, orient=\"index\")\n",
|
|
"df.columns = ['Energy [mJ]']\n",
|
|
"df"
|
|
]
|
|
}
|
|
],
|
|
"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"
|
|
},
|
|
"toc": {
|
|
"toc_cell": false,
|
|
"toc_number_sections": true,
|
|
"toc_threshold": 6,
|
|
"toc_window_display": false
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 0
|
|
}
|