diff --git a/ipynb/examples/typical_experiment.ipynb b/ipynb/examples/typical_experiment.ipynb index f5c272ce3be7f5eb46c5ab42e612321f5986f6f7..85090abe81d0831ee2c414f5fbdd7c46c4840148 100644 --- a/ipynb/examples/typical_experiment.ipynb +++ b/ipynb/examples/typical_experiment.ipynb @@ -1,5 +1,5 @@ { - "cells": [ + "cells": [ { "cell_type": "markdown", "metadata": {}, @@ -31,8 +31,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "2019-02-25 18:37:07,927 INFO : root : Using LISA logging configuration:\n", - "2019-02-25 18:37:07,928 INFO : root : lisa/remove_testenv/logging.conf\n" + "2019-03-01 15:34:41,011 INFO : root : Using LISA logging configuration:\n", + "2019-03-01 15:34:41,012 INFO : root : /data/work/lisa/logging.conf\n" ] } ], @@ -64,7 +64,16 @@ "cell_type": "code", "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2019-03-01 15:34:41,028 INFO : root : Generating grammar tables from /usr/lib/python3.5/lib2to3/Grammar.txt\n", + "2019-03-01 15:34:41,051 INFO : root : Generating grammar tables from /usr/lib/python3.5/lib2to3/PatternGrammar.txt\n" + ] + } + ], "source": [ "from lisa.target import Target, TargetConf" ] @@ -78,37 +87,38 @@ "name": "stderr", "output_type": "stream", "text": [ - "2019-02-25 18:37:08,533 INFO : lisa.target.Target : linux myhikey960 target connection settings:\n", - "2019-02-25 18:37:08,534 INFO : lisa.target.Target : username : root\n", - "2019-02-25 18:37:08,534 INFO : lisa.target.Target : port : 22\n", - "2019-02-25 18:37:08,535 INFO : lisa.target.Target : host : pwrsft-hikey960-1\n", - "2019-02-25 18:37:08,535 INFO : lisa.target.Target : password : root\n", - "2019-02-25 18:37:08,543 INFO : lisa.target.Target : Devlib modules to load: bl, cgroups, cpufreq, cpuidle, devfreq, fastboot, gem5stats, gpufreq, hotplug, hwmon, mbed-fan, odroidxu3-fan, sched, thermal\n", - "2019-02-25 18:37:13,195 WARNING : LinuxTarget : Module devfreq is not supported by the target\n", - "2019-02-25 18:37:13,198 WARNING : LinuxTarget : Module fastboot is not supported by the target\n", - "2019-02-25 18:37:13,200 WARNING : LinuxTarget : Module gem5stats is not supported by the target\n", - "2019-02-25 18:37:13,364 WARNING : LinuxTarget : Module gpufreq is not supported by the target\n", - "2019-02-25 18:37:14,053 WARNING : LinuxTarget : Module odroidxu3-fan is not supported by the target\n", - "2019-02-25 18:37:15,971 INFO : CGroups : Available controllers:\n", - "2019-02-25 18:37:16,475 INFO : CGroups : cpuset : /root/devlib-target/cgroups/devlib_cgh1\n", - "2019-02-25 18:37:16,979 INFO : CGroups : cpu : /root/devlib-target/cgroups/devlib_cgh1\n", - "2019-02-25 18:37:17,480 INFO : CGroups : cpuacct : /root/devlib-target/cgroups/devlib_cgh1\n", - "2019-02-25 18:37:17,985 INFO : CGroups : blkio : /root/devlib-target/cgroups/devlib_cgh1\n", - "2019-02-25 18:37:18,490 INFO : CGroups : memory : /root/devlib-target/cgroups/devlib_cgh1\n", - "2019-02-25 18:37:18,992 INFO : CGroups : devices : /root/devlib-target/cgroups/devlib_cgh1\n", - "2019-02-25 18:37:19,495 INFO : CGroups : freezer : /root/devlib-target/cgroups/devlib_cgh1\n", - "2019-02-25 18:37:19,997 INFO : CGroups : perf_event : /root/devlib-target/cgroups/devlib_cgh1\n", - "2019-02-25 18:37:20,503 INFO : CGroups : hugetlb : /root/devlib-target/cgroups/devlib_cgh1\n", - "2019-02-25 18:37:21,006 INFO : CGroups : pids : /root/devlib-target/cgroups/devlib_cgh1\n", - "2019-02-25 18:37:21,172 WARNING : lisa.target.Target : Failed to initialized \"devfreq\" devlib Module\n", - "2019-02-25 18:37:21,174 WARNING : lisa.target.Target : Failed to initialized \"fastboot\" devlib Module\n", - "2019-02-25 18:37:21,175 WARNING : lisa.target.Target : Failed to initialized \"gem5stats\" devlib Module\n", - "2019-02-25 18:37:21,177 WARNING : lisa.target.Target : Failed to initialized \"gpufreq\" devlib Module\n", - "2019-02-25 18:37:21,178 WARNING : lisa.target.Target : Failed to initialized \"mbed-fan\" devlib Module\n", - "2019-02-25 18:37:21,179 WARNING : lisa.target.Target : Failed to initialized \"odroidxu3-fan\" devlib Module\n", - "2019-02-25 18:37:21,180 INFO : lisa.platforms.platinfo.PlatformInfo : Attempting to read energy model from target\n", - "2019-02-25 18:37:21,843 INFO : lisa.energy_model.EnergyModel.EMReader : Attempting to load EM using from_debugfsEM_target\n", - "2019-02-25 18:37:27,500 INFO : lisa.target.Target : Effective platform information:\n", + "2019-03-01 15:34:41,718 INFO : lisa.target.Target : Creating result directory: /data/work/lisa/results/Target-myhikey960-20190301_153441.718070\n", + "2019-03-01 15:34:41,720 INFO : lisa.target.Target : linux myhikey960 target connection settings:\n", + "2019-03-01 15:34:41,721 INFO : lisa.target.Target : username : root\n", + "2019-03-01 15:34:41,722 INFO : lisa.target.Target : host : 192.168.0.1\n", + "2019-03-01 15:34:41,723 INFO : lisa.target.Target : password : root\n", + "2019-03-01 15:34:41,723 INFO : lisa.target.Target : port : 22\n", + "2019-03-01 15:34:41,738 INFO : lisa.target.Target : Devlib modules to load: bl, cgroups, cpufreq, cpuidle, devfreq, fastboot, gem5stats, gpufreq, hotplug, hwmon, mbed-fan, odroidxu3-fan, sched, thermal\n", + "2019-03-01 15:34:46,707 WARNING : LinuxTarget : Module devfreq is not supported by the target\n", + "2019-03-01 15:34:46,710 WARNING : LinuxTarget : Module fastboot is not supported by the target\n", + "2019-03-01 15:34:46,711 WARNING : LinuxTarget : Module gem5stats is not supported by the target\n", + "2019-03-01 15:34:46,888 WARNING : LinuxTarget : Module gpufreq is not supported by the target\n", + "2019-03-01 15:34:47,623 WARNING : LinuxTarget : Module odroidxu3-fan is not supported by the target\n", + "2019-03-01 15:34:49,701 INFO : CGroups : Available controllers:\n", + "2019-03-01 15:34:50,246 INFO : CGroups : cpuset : /root/devlib-target/cgroups/devlib_cgh2\n", + "2019-03-01 15:34:50,788 INFO : CGroups : cpu : /root/devlib-target/cgroups/devlib_cgh3\n", + "2019-03-01 15:34:51,329 INFO : CGroups : cpuacct : /root/devlib-target/cgroups/devlib_cgh3\n", + "2019-03-01 15:34:51,866 INFO : CGroups : blkio : /root/devlib-target/cgroups/devlib_cgh7\n", + "2019-03-01 15:34:52,408 INFO : CGroups : memory : /root/devlib-target/cgroups/devlib_cgh10\n", + "2019-03-01 15:34:52,940 INFO : CGroups : devices : /root/devlib-target/cgroups/devlib_cgh9\n", + "2019-03-01 15:34:53,483 INFO : CGroups : freezer : /root/devlib-target/cgroups/devlib_cgh4\n", + "2019-03-01 15:34:54,024 INFO : CGroups : perf_event : /root/devlib-target/cgroups/devlib_cgh5\n", + "2019-03-01 15:34:54,564 INFO : CGroups : hugetlb : /root/devlib-target/cgroups/devlib_cgh6\n", + "2019-03-01 15:34:55,106 INFO : CGroups : pids : /root/devlib-target/cgroups/devlib_cgh8\n", + "2019-03-01 15:34:55,284 WARNING : lisa.target.Target : Failed to initialized \"devfreq\" devlib Module\n", + "2019-03-01 15:34:55,286 WARNING : lisa.target.Target : Failed to initialized \"fastboot\" devlib Module\n", + "2019-03-01 15:34:55,287 WARNING : lisa.target.Target : Failed to initialized \"gem5stats\" devlib Module\n", + "2019-03-01 15:34:55,288 WARNING : lisa.target.Target : Failed to initialized \"gpufreq\" devlib Module\n", + "2019-03-01 15:34:55,290 WARNING : lisa.target.Target : Failed to initialized \"mbed-fan\" devlib Module\n", + "2019-03-01 15:34:55,291 WARNING : lisa.target.Target : Failed to initialized \"odroidxu3-fan\" devlib Module\n", + "2019-03-01 15:34:55,293 INFO : lisa.platforms.platinfo.PlatformInfo : Attempting to read energy model from target\n", + "2019-03-01 15:34:56,000 INFO : lisa.energy_model.EnergyModel.EMReader : Attempting to load EM using from_debugfsEM_target\n", + "2019-03-01 15:35:01,951 INFO : lisa.target.Target : Effective platform information:\n", "|- abi from target (str): arm64\n", "|- cpu-capacities from target (dict): {0: 462, 1: 462, 2: 462, 3: 462, 4: 1024, 5: 1024, 6: 1024, 7: 1024}\n", "|- cpus-count from target (int): 8\n", @@ -116,9 +126,9 @@ "|- freqs from target (dict): {0: [533000, 999000, 1402000, 1709000, 1844000], 1: [533000, 999000, 1402000, 1709000, 1844000], 2: [533000, 999000, 1402000, 1709000, 1844000], 3: [533000, 999000, 1402000, 1709000, 1844000], 4: [903000, 1421000, 1805000, 2112000, 2362000], 5: [903000, 1421000, 1805000, 2112000, 2362000], 6: [903000, 1421000, 1805000, 2112000, 2362000], 7: [903000, 1421000, 1805000, 2112000, 2362000]}\n", "+- kernel:\n", " |- config from target (TypedKernelConfig): \n", - " |- version from target (KernelVersion): 5.0.0-rc6 27 SMP PREEMPT Tue Feb 19 17:28:19 GMT 2019\n", + " |- version from target (KernelVersion): 5.0.0-rc6-00099-g5441513e6c1c 29 SMP PREEMPT Tue Feb 26 16:27:53 GMT 2019\n", "|- name from target-conf (str): myhikey960\n", - "|- nrg-model from target (EnergyModel): \n", + "|- nrg-model from target (EnergyModel): \n", "|- os from target (str): linux\n", "+- rtapp:\n", " |- calib from target (DeferredValue): \n", @@ -220,290 +230,308 @@ "name": "stderr", "output_type": "stream", "text": [ - "2019-02-25 18:37:28,195 INFO : lisa.target.Target : Creating result directory: lisa/remove_testenv/results/Target-myhikey960/RTA-experiment_wload-20190225_183728.195401\n", - "2019-02-25 18:37:35,137 INFO : lisa.wlgen.rta.RTA : CPU0 calibration...\n", - "2019-02-25 18:37:35,466 INFO : lisa.wlgen.rta.RTA : Calibration value: CPU0\n", - "2019-02-25 18:37:35,467 INFO : lisa.wlgen.rta.RTA : Default policy: SCHED_OTHER\n", - "2019-02-25 18:37:35,470 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:37:35,472 INFO : lisa.wlgen.rta.RTA : task [task1], sched: using default policy\n", - "2019-02-25 18:37:35,474 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:37:35,476 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:37:35,478 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:37:35,479 INFO : lisa.wlgen.rta.Phase : | batch 0.001000 [s]\n", - "2019-02-25 18:37:35,690 INFO : lisa.wlgen.rta.RTA : Execution start: /root/devlib-target/bin/rt-app /root/devlib-target/rta_calib_cpu0.json 2>&1\n", - "2019-02-25 18:37:42,215 INFO : lisa.wlgen.rta.RTA : Execution complete\n", - "2019-02-25 18:37:42,419 INFO : lisa.wlgen.rta.RTA : CPU1 calibration...\n", - "2019-02-25 18:37:42,747 INFO : lisa.wlgen.rta.RTA : Calibration value: CPU1\n", - "2019-02-25 18:37:42,748 INFO : lisa.wlgen.rta.RTA : Default policy: SCHED_OTHER\n", - "2019-02-25 18:37:42,748 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:37:42,749 INFO : lisa.wlgen.rta.RTA : task [task1], sched: using default policy\n", - "2019-02-25 18:37:42,749 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:37:42,749 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:37:42,750 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:37:42,750 INFO : lisa.wlgen.rta.Phase : | batch 0.001000 [s]\n", - "2019-02-25 18:37:42,957 INFO : lisa.wlgen.rta.RTA : Execution start: /root/devlib-target/bin/rt-app /root/devlib-target/rta_calib_cpu1.json 2>&1\n", - "2019-02-25 18:37:49,481 INFO : lisa.wlgen.rta.RTA : Execution complete\n", - "2019-02-25 18:37:49,692 INFO : lisa.wlgen.rta.RTA : CPU2 calibration...\n", - "2019-02-25 18:37:50,018 INFO : lisa.wlgen.rta.RTA : Calibration value: CPU2\n", - "2019-02-25 18:37:50,018 INFO : lisa.wlgen.rta.RTA : Default policy: SCHED_OTHER\n", - "2019-02-25 18:37:50,019 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:37:50,020 INFO : lisa.wlgen.rta.RTA : task [task1], sched: using default policy\n", - "2019-02-25 18:37:50,021 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:37:50,022 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:37:50,022 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:37:50,023 INFO : lisa.wlgen.rta.Phase : | batch 0.001000 [s]\n", - "2019-02-25 18:37:50,236 INFO : lisa.wlgen.rta.RTA : Execution start: /root/devlib-target/bin/rt-app /root/devlib-target/rta_calib_cpu2.json 2>&1\n", - "2019-02-25 18:37:56,758 INFO : lisa.wlgen.rta.RTA : Execution complete\n", - "2019-02-25 18:37:56,975 INFO : lisa.wlgen.rta.RTA : CPU3 calibration...\n", - "2019-02-25 18:37:57,300 INFO : lisa.wlgen.rta.RTA : Calibration value: CPU3\n", - "2019-02-25 18:37:57,301 INFO : lisa.wlgen.rta.RTA : Default policy: SCHED_OTHER\n", - "2019-02-25 18:37:57,302 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:37:57,303 INFO : lisa.wlgen.rta.RTA : task [task1], sched: using default policy\n", - "2019-02-25 18:37:57,304 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:37:57,304 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:37:57,305 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:37:57,306 INFO : lisa.wlgen.rta.Phase : | batch 0.001000 [s]\n", - "2019-02-25 18:37:57,513 INFO : lisa.wlgen.rta.RTA : Execution start: /root/devlib-target/bin/rt-app /root/devlib-target/rta_calib_cpu3.json 2>&1\n", - "2019-02-25 18:38:04,099 INFO : lisa.wlgen.rta.RTA : Execution complete\n", - "2019-02-25 18:38:04,318 INFO : lisa.wlgen.rta.RTA : CPU4 calibration...\n", - "2019-02-25 18:38:04,644 INFO : lisa.wlgen.rta.RTA : Calibration value: CPU4\n", - "2019-02-25 18:38:04,645 INFO : lisa.wlgen.rta.RTA : Default policy: SCHED_OTHER\n", - "2019-02-25 18:38:04,646 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:04,646 INFO : lisa.wlgen.rta.RTA : task [task1], sched: using default policy\n", - "2019-02-25 18:38:04,647 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:04,648 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:04,649 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:04,649 INFO : lisa.wlgen.rta.Phase : | batch 0.001000 [s]\n", - "2019-02-25 18:38:04,860 INFO : lisa.wlgen.rta.RTA : Execution start: /root/devlib-target/bin/rt-app /root/devlib-target/rta_calib_cpu4.json 2>&1\n", - "2019-02-25 18:38:10,205 INFO : lisa.wlgen.rta.RTA : Execution complete\n", - "2019-02-25 18:38:10,404 INFO : lisa.wlgen.rta.RTA : CPU5 calibration...\n", - "2019-02-25 18:38:10,729 INFO : lisa.wlgen.rta.RTA : Calibration value: CPU5\n", - "2019-02-25 18:38:10,731 INFO : lisa.wlgen.rta.RTA : Default policy: SCHED_OTHER\n", - "2019-02-25 18:38:10,732 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:10,732 INFO : lisa.wlgen.rta.RTA : task [task1], sched: using default policy\n", - "2019-02-25 18:38:10,733 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:10,734 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:10,735 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:10,736 INFO : lisa.wlgen.rta.Phase : | batch 0.001000 [s]\n", - "2019-02-25 18:38:10,932 INFO : lisa.wlgen.rta.RTA : Execution start: /root/devlib-target/bin/rt-app /root/devlib-target/rta_calib_cpu5.json 2>&1\n", - "2019-02-25 18:38:14,236 INFO : lisa.wlgen.rta.RTA : Execution complete\n", - "2019-02-25 18:38:14,448 INFO : lisa.wlgen.rta.RTA : CPU6 calibration...\n", - "2019-02-25 18:38:14,770 INFO : lisa.wlgen.rta.RTA : Calibration value: CPU6\n", - "2019-02-25 18:38:14,771 INFO : lisa.wlgen.rta.RTA : Default policy: SCHED_OTHER\n", - "2019-02-25 18:38:14,773 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:14,774 INFO : lisa.wlgen.rta.RTA : task [task1], sched: using default policy\n", - "2019-02-25 18:38:14,776 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:14,778 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:14,781 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:14,783 INFO : lisa.wlgen.rta.Phase : | batch 0.001000 [s]\n", - "2019-02-25 18:38:14,990 INFO : lisa.wlgen.rta.RTA : Execution start: /root/devlib-target/bin/rt-app /root/devlib-target/rta_calib_cpu6.json 2>&1\n", - "2019-02-25 18:38:19,310 INFO : lisa.wlgen.rta.RTA : Execution complete\n", - "2019-02-25 18:38:19,524 INFO : lisa.wlgen.rta.RTA : CPU7 calibration...\n", - "2019-02-25 18:38:19,848 INFO : lisa.wlgen.rta.RTA : Calibration value: CPU7\n", - "2019-02-25 18:38:19,850 INFO : lisa.wlgen.rta.RTA : Default policy: SCHED_OTHER\n", - "2019-02-25 18:38:19,852 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:19,854 INFO : lisa.wlgen.rta.RTA : task [task1], sched: using default policy\n", - "2019-02-25 18:38:19,855 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:19,857 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:19,858 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:19,859 INFO : lisa.wlgen.rta.Phase : | batch 0.001000 [s]\n", - "2019-02-25 18:38:20,065 INFO : lisa.wlgen.rta.RTA : Execution start: /root/devlib-target/bin/rt-app /root/devlib-target/rta_calib_cpu7.json 2>&1\n", - "2019-02-25 18:38:26,441 INFO : lisa.wlgen.rta.RTA : Execution complete\n", - "2019-02-25 18:38:26,649 INFO : lisa.wlgen.rta.RTA : Target RT-App calibration: {0: 306, 1: 303, 2: 302, 3: 304, 4: 137, 5: 137, 6: 137, 7: 137}\n", - "2019-02-25 18:38:29,832 INFO : lisa.wlgen.rta.RTA : Calibration value: 137\n", - "2019-02-25 18:38:29,833 INFO : lisa.wlgen.rta.RTA : Default policy: SCHED_OTHER\n", - "2019-02-25 18:38:29,833 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,834 INFO : lisa.wlgen.rta.RTA : task [task_0_0], sched: using default policy\n", - "2019-02-25 18:38:29,834 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,835 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,835 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,835 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,836 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,836 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,837 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,837 INFO : lisa.wlgen.rta.RTA : task [task_0_1], sched: using default policy\n", - "2019-02-25 18:38:29,838 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,838 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,839 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,840 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,840 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,841 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,841 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,842 INFO : lisa.wlgen.rta.RTA : task [task_0_2], sched: using default policy\n", - "2019-02-25 18:38:29,843 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,843 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,844 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,844 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,845 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,845 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,846 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,846 INFO : lisa.wlgen.rta.RTA : task [task_1_0], sched: using default policy\n", - "2019-02-25 18:38:29,847 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,848 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,848 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,849 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,849 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,850 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,850 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,851 INFO : lisa.wlgen.rta.RTA : task [task_1_1], sched: using default policy\n", - "2019-02-25 18:38:29,852 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,852 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,853 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,854 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,854 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,855 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,856 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,856 INFO : lisa.wlgen.rta.RTA : task [task_1_2], sched: using default policy\n", - "2019-02-25 18:38:29,857 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,858 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,858 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,859 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,859 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,860 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,861 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,861 INFO : lisa.wlgen.rta.RTA : task [task_2_0], sched: using default policy\n", - "2019-02-25 18:38:29,862 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,862 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,863 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,864 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,864 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,865 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,865 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,866 INFO : lisa.wlgen.rta.RTA : task [task_2_1], sched: using default policy\n", - "2019-02-25 18:38:29,867 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,867 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,868 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,869 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,869 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,870 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,870 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,871 INFO : lisa.wlgen.rta.RTA : task [task_2_2], sched: using default policy\n", - "2019-02-25 18:38:29,871 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,872 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,872 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,873 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,873 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,874 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,875 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,875 INFO : lisa.wlgen.rta.RTA : task [task_3_0], sched: using default policy\n", - "2019-02-25 18:38:29,875 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,876 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,876 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,877 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,877 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,877 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,878 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,878 INFO : lisa.wlgen.rta.RTA : task [task_3_1], sched: using default policy\n", - "2019-02-25 18:38:29,878 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,879 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,879 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,880 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,880 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,880 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,881 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,881 INFO : lisa.wlgen.rta.RTA : task [task_3_2], sched: using default policy\n", - "2019-02-25 18:38:29,882 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,882 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,882 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,883 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,883 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,883 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,884 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,884 INFO : lisa.wlgen.rta.RTA : task [task_4_0], sched: using default policy\n", - "2019-02-25 18:38:29,885 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,885 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,885 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,886 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,886 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,887 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,887 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,888 INFO : lisa.wlgen.rta.RTA : task [task_4_1], sched: using default policy\n", - "2019-02-25 18:38:29,888 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,889 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,889 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,890 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,890 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,891 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,891 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,892 INFO : lisa.wlgen.rta.RTA : task [task_4_2], sched: using default policy\n", - "2019-02-25 18:38:29,892 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,893 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,893 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,894 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,894 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,895 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,895 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,895 INFO : lisa.wlgen.rta.RTA : task [task_5_0], sched: using default policy\n", - "2019-02-25 18:38:29,896 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,896 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,897 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,897 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,898 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,898 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,898 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,899 INFO : lisa.wlgen.rta.RTA : task [task_5_1], sched: using default policy\n", - "2019-02-25 18:38:29,899 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,899 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,900 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,900 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,900 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,901 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,901 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,902 INFO : lisa.wlgen.rta.RTA : task [task_5_2], sched: using default policy\n", - "2019-02-25 18:38:29,902 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,902 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,903 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,903 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,903 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,904 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,904 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,905 INFO : lisa.wlgen.rta.RTA : task [task_6_0], sched: using default policy\n", - "2019-02-25 18:38:29,905 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,905 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,906 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,906 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,906 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,907 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,907 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,908 INFO : lisa.wlgen.rta.RTA : task [task_6_1], sched: using default policy\n", - "2019-02-25 18:38:29,908 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,908 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,909 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,909 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,909 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,910 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,910 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,911 INFO : lisa.wlgen.rta.RTA : task [task_6_2], sched: using default policy\n", - "2019-02-25 18:38:29,911 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,912 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,912 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,913 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,913 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,913 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,914 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,914 INFO : lisa.wlgen.rta.RTA : task [task_7_0], sched: using default policy\n", - "2019-02-25 18:38:29,915 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,915 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,915 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,916 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,916 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,917 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,917 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,918 INFO : lisa.wlgen.rta.RTA : task [task_7_1], sched: using default policy\n", - "2019-02-25 18:38:29,918 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,919 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,919 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,920 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,920 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,921 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", - "2019-02-25 18:38:29,921 INFO : lisa.wlgen.rta.RTA : ------------------------\n", - "2019-02-25 18:38:29,921 INFO : lisa.wlgen.rta.RTA : task [task_7_2], sched: using default policy\n", - "2019-02-25 18:38:29,922 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", - "2019-02-25 18:38:29,922 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", - "2019-02-25 18:38:29,923 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", - "2019-02-25 18:38:29,923 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", - "2019-02-25 18:38:29,923 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", - "2019-02-25 18:38:29,924 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n" + "2019-03-01 15:35:02,208 INFO : lisa.target.Target : Creating result directory: /data/work/lisa/results/Target-myhikey960-20190301_153441.718070/RTA-experiment_wload-20190301_153502.207999\n", + "2019-03-01 15:35:13,050 INFO : lisa.wlgen.rta.RTA : CPU0 calibration...\n", + "2019-03-01 15:35:13,385 INFO : lisa.wlgen.rta.RTA : Calibration value: CPU0\n", + "2019-03-01 15:35:13,386 INFO : lisa.wlgen.rta.RTA : Default policy: SCHED_OTHER\n", + "2019-03-01 15:35:13,387 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:35:13,389 INFO : lisa.wlgen.rta.RTA : task [task1], sched: using default policy\n", + "2019-03-01 15:35:13,390 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:35:13,392 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:35:13,393 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:35:13,395 INFO : lisa.wlgen.rta.Phase : | batch 0.001000 [s]\n", + "2019-03-01 15:35:13,643 INFO : lisa.wlgen.rta.RTA : Execution start: /root/devlib-target/bin/rt-app /root/devlib-target/rta_calib_cpu0.json 2>&1\n", + "2019-03-01 15:35:20,167 INFO : lisa.wlgen.rta.RTA : Execution complete\n", + "2019-03-01 15:35:20,404 INFO : lisa.wlgen.rta.RTA : CPU1 calibration...\n", + "2019-03-01 15:35:20,736 INFO : lisa.wlgen.rta.RTA : Calibration value: CPU1\n", + "2019-03-01 15:35:20,737 INFO : lisa.wlgen.rta.RTA : Default policy: SCHED_OTHER\n", + "2019-03-01 15:35:20,739 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:35:20,740 INFO : lisa.wlgen.rta.RTA : task [task1], sched: using default policy\n", + "2019-03-01 15:35:20,742 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:35:20,743 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:35:20,744 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:35:20,746 INFO : lisa.wlgen.rta.Phase : | batch 0.001000 [s]\n", + "2019-03-01 15:35:20,992 INFO : lisa.wlgen.rta.RTA : Execution start: /root/devlib-target/bin/rt-app /root/devlib-target/rta_calib_cpu1.json 2>&1\n", + "2019-03-01 15:35:27,519 INFO : lisa.wlgen.rta.RTA : Execution complete\n", + "2019-03-01 15:35:27,781 INFO : lisa.wlgen.rta.RTA : CPU2 calibration...\n", + "2019-03-01 15:35:28,111 INFO : lisa.wlgen.rta.RTA : Calibration value: CPU2\n", + "2019-03-01 15:35:28,112 INFO : lisa.wlgen.rta.RTA : Default policy: SCHED_OTHER\n", + "2019-03-01 15:35:28,114 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:35:28,116 INFO : lisa.wlgen.rta.RTA : task [task1], sched: using default policy\n", + "2019-03-01 15:35:28,117 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:35:28,118 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:35:28,119 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:35:28,120 INFO : lisa.wlgen.rta.Phase : | batch 0.001000 [s]\n", + "2019-03-01 15:35:28,364 INFO : lisa.wlgen.rta.RTA : Execution start: /root/devlib-target/bin/rt-app /root/devlib-target/rta_calib_cpu2.json 2>&1\n", + "2019-03-01 15:35:34,890 INFO : lisa.wlgen.rta.RTA : Execution complete\n", + "2019-03-01 15:35:35,135 INFO : lisa.wlgen.rta.RTA : CPU3 calibration...\n", + "2019-03-01 15:35:35,465 INFO : lisa.wlgen.rta.RTA : Calibration value: CPU3\n", + "2019-03-01 15:35:35,466 INFO : lisa.wlgen.rta.RTA : Default policy: SCHED_OTHER\n", + "2019-03-01 15:35:35,467 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:35:35,469 INFO : lisa.wlgen.rta.RTA : task [task1], sched: using default policy\n", + "2019-03-01 15:35:35,470 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:35:35,472 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:35:35,473 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:35:35,475 INFO : lisa.wlgen.rta.Phase : | batch 0.001000 [s]\n", + "2019-03-01 15:35:35,715 INFO : lisa.wlgen.rta.RTA : Execution start: /root/devlib-target/bin/rt-app /root/devlib-target/rta_calib_cpu3.json 2>&1\n", + "2019-03-01 15:35:42,240 INFO : lisa.wlgen.rta.RTA : Execution complete\n", + "2019-03-01 15:35:42,481 INFO : lisa.wlgen.rta.RTA : CPU4 calibration...\n", + "2019-03-01 15:35:42,814 INFO : lisa.wlgen.rta.RTA : Calibration value: CPU4\n", + "2019-03-01 15:35:42,815 INFO : lisa.wlgen.rta.RTA : Default policy: SCHED_OTHER\n", + "2019-03-01 15:35:42,816 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:35:42,817 INFO : lisa.wlgen.rta.RTA : task [task1], sched: using default policy\n", + "2019-03-01 15:35:42,818 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:35:42,819 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:35:42,820 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:35:42,821 INFO : lisa.wlgen.rta.Phase : | batch 0.001000 [s]\n", + "2019-03-01 15:35:43,061 INFO : lisa.wlgen.rta.RTA : Execution start: /root/devlib-target/bin/rt-app /root/devlib-target/rta_calib_cpu4.json 2>&1\n", + "2019-03-01 15:35:46,354 INFO : lisa.wlgen.rta.RTA : Execution complete\n", + "2019-03-01 15:35:46,645 INFO : lisa.wlgen.rta.RTA : CPU5 calibration...\n", + "2019-03-01 15:35:46,981 INFO : lisa.wlgen.rta.RTA : Calibration value: CPU5\n", + "2019-03-01 15:35:46,983 INFO : lisa.wlgen.rta.RTA : Default policy: SCHED_OTHER\n", + "2019-03-01 15:35:46,984 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:35:46,985 INFO : lisa.wlgen.rta.RTA : task [task1], sched: using default policy\n", + "2019-03-01 15:35:46,986 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:35:46,988 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:35:46,989 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:35:46,991 INFO : lisa.wlgen.rta.Phase : | batch 0.001000 [s]\n", + "2019-03-01 15:35:47,277 INFO : lisa.wlgen.rta.RTA : Execution start: /root/devlib-target/bin/rt-app /root/devlib-target/rta_calib_cpu5.json 2>&1\n", + "2019-03-01 15:35:53,644 INFO : lisa.wlgen.rta.RTA : Execution complete\n", + "2019-03-01 15:35:53,898 INFO : lisa.wlgen.rta.RTA : CPU6 calibration...\n", + "2019-03-01 15:35:54,232 INFO : lisa.wlgen.rta.RTA : Calibration value: CPU6\n", + "2019-03-01 15:35:54,233 INFO : lisa.wlgen.rta.RTA : Default policy: SCHED_OTHER\n", + "2019-03-01 15:35:54,234 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:35:54,236 INFO : lisa.wlgen.rta.RTA : task [task1], sched: using default policy\n", + "2019-03-01 15:35:54,237 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:35:54,238 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:35:54,239 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:35:54,240 INFO : lisa.wlgen.rta.Phase : | batch 0.001000 [s]\n", + "2019-03-01 15:35:54,489 INFO : lisa.wlgen.rta.RTA : Execution start: /root/devlib-target/bin/rt-app /root/devlib-target/rta_calib_cpu6.json 2>&1\n", + "2019-03-01 15:35:58,798 INFO : lisa.wlgen.rta.RTA : Execution complete\n", + "2019-03-01 15:35:59,042 INFO : lisa.wlgen.rta.RTA : CPU7 calibration...\n", + "2019-03-01 15:35:59,371 INFO : lisa.wlgen.rta.RTA : Calibration value: CPU7\n", + "2019-03-01 15:35:59,373 INFO : lisa.wlgen.rta.RTA : Default policy: SCHED_OTHER\n", + "2019-03-01 15:35:59,374 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:35:59,375 INFO : lisa.wlgen.rta.RTA : task [task1], sched: using default policy\n", + "2019-03-01 15:35:59,376 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:35:59,378 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:35:59,380 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:35:59,381 INFO : lisa.wlgen.rta.Phase : | batch 0.001000 [s]\n", + "2019-03-01 15:35:59,622 INFO : lisa.wlgen.rta.RTA : Execution start: /root/devlib-target/bin/rt-app /root/devlib-target/rta_calib_cpu7.json 2>&1\n", + "2019-03-01 15:36:05,986 INFO : lisa.wlgen.rta.RTA : Execution complete\n", + "2019-03-01 15:36:06,230 INFO : lisa.wlgen.rta.RTA : Target RT-App calibration: {0: 302, 1: 302, 2: 302, 3: 302, 4: 155, 5: 155, 6: 155, 7: 155}\n", + "2019-03-01 15:36:18,259 INFO : lisa.wlgen.rta.RTA : Calibration value: 155\n", + "2019-03-01 15:36:18,260 INFO : lisa.wlgen.rta.RTA : Default policy: SCHED_OTHER\n", + "2019-03-01 15:36:18,261 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,263 INFO : lisa.wlgen.rta.RTA : task [task_6_1], sched: using default policy\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2019-03-01 15:36:18,264 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,265 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,266 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,267 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,269 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,270 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,271 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,272 INFO : lisa.wlgen.rta.RTA : task [task_2_1], sched: using default policy\n", + "2019-03-01 15:36:18,273 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,274 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,275 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,276 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,278 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,278 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,279 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,280 INFO : lisa.wlgen.rta.RTA : task [task_0_1], sched: using default policy\n", + "2019-03-01 15:36:18,280 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,282 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,283 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,284 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,286 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,287 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,288 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,289 INFO : lisa.wlgen.rta.RTA : task [task_5_2], sched: using default policy\n", + "2019-03-01 15:36:18,290 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,291 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,292 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,293 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,294 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,295 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,296 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,297 INFO : lisa.wlgen.rta.RTA : task [task_7_0], sched: using default policy\n", + "2019-03-01 15:36:18,299 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,308 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,310 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,312 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,312 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,313 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,314 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,315 INFO : lisa.wlgen.rta.RTA : task [task_1_1], sched: using default policy\n", + "2019-03-01 15:36:18,316 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,317 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,318 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,319 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,319 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,320 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,321 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,322 INFO : lisa.wlgen.rta.RTA : task [task_0_0], sched: using default policy\n", + "2019-03-01 15:36:18,322 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,323 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,324 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,325 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,325 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,326 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,327 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,327 INFO : lisa.wlgen.rta.RTA : task [task_1_0], sched: using default policy\n", + "2019-03-01 15:36:18,328 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,329 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,330 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,331 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,332 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,333 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,334 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,335 INFO : lisa.wlgen.rta.RTA : task [task_3_2], sched: using default policy\n", + "2019-03-01 15:36:18,335 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,336 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,337 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,338 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,339 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,339 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,341 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,343 INFO : lisa.wlgen.rta.RTA : task [task_3_1], sched: using default policy\n", + "2019-03-01 15:36:18,344 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,345 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,345 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,347 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,348 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,349 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,349 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,350 INFO : lisa.wlgen.rta.RTA : task [task_6_0], sched: using default policy\n", + "2019-03-01 15:36:18,351 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,353 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,355 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,358 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,359 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,359 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,360 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,361 INFO : lisa.wlgen.rta.RTA : task [task_7_2], sched: using default policy\n", + "2019-03-01 15:36:18,361 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,362 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,362 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,363 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,364 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2019-03-01 15:36:18,364 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,365 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,366 INFO : lisa.wlgen.rta.RTA : task [task_4_1], sched: using default policy\n", + "2019-03-01 15:36:18,366 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,367 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,367 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,368 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,368 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,369 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,370 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,370 INFO : lisa.wlgen.rta.RTA : task [task_4_2], sched: using default policy\n", + "2019-03-01 15:36:18,371 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,371 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,372 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,373 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,373 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,374 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,375 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,376 INFO : lisa.wlgen.rta.RTA : task [task_0_2], sched: using default policy\n", + "2019-03-01 15:36:18,377 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,379 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,380 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,381 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,382 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,383 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,383 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,384 INFO : lisa.wlgen.rta.RTA : task [task_5_0], sched: using default policy\n", + "2019-03-01 15:36:18,384 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,385 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,386 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,386 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,387 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,387 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,388 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,389 INFO : lisa.wlgen.rta.RTA : task [task_7_1], sched: using default policy\n", + "2019-03-01 15:36:18,390 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,390 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,391 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,393 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,394 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,395 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,396 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,396 INFO : lisa.wlgen.rta.RTA : task [task_4_0], sched: using default policy\n", + "2019-03-01 15:36:18,397 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,398 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,399 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,400 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,400 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,401 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,401 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,402 INFO : lisa.wlgen.rta.RTA : task [task_1_2], sched: using default policy\n", + "2019-03-01 15:36:18,402 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,403 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,403 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,404 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,405 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,405 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,406 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,406 INFO : lisa.wlgen.rta.RTA : task [task_2_0], sched: using default policy\n", + "2019-03-01 15:36:18,407 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,407 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,408 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,408 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,409 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,409 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,410 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,410 INFO : lisa.wlgen.rta.RTA : task [task_3_0], sched: using default policy\n", + "2019-03-01 15:36:18,411 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,411 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,412 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,412 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,413 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,413 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,414 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,414 INFO : lisa.wlgen.rta.RTA : task [task_2_2], sched: using default policy\n", + "2019-03-01 15:36:18,415 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,416 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,416 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,417 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,417 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,418 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,419 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,419 INFO : lisa.wlgen.rta.RTA : task [task_6_2], sched: using default policy\n", + "2019-03-01 15:36:18,420 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,422 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n", + "2019-03-01 15:36:18,423 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,424 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,425 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,426 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n", + "2019-03-01 15:36:18,428 INFO : lisa.wlgen.rta.RTA : ------------------------\n", + "2019-03-01 15:36:18,429 INFO : lisa.wlgen.rta.RTA : task [task_5_1], sched: using default policy\n", + "2019-03-01 15:36:18,429 INFO : lisa.wlgen.rta.RTA : | start delay: 0.000000 [s]\n", + "2019-03-01 15:36:18,430 INFO : lisa.wlgen.rta.RTA : | loops count: 1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2019-03-01 15:36:18,430 INFO : lisa.wlgen.rta.RTA : + phase_000001\n", + "2019-03-01 15:36:18,431 INFO : lisa.wlgen.rta.Phase : | duration 1.000000 [s] (10 loops)\n", + "2019-03-01 15:36:18,432 INFO : lisa.wlgen.rta.Phase : | period 100000 [us], duty_cycle 20 %\n", + "2019-03-01 15:36:18,432 INFO : lisa.wlgen.rta.Phase : | run_time 20000 [us], sleep_time 80000 [us]\n" ] } ], @@ -592,8 +620,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "2019-02-25 18:38:36,375 INFO : lisa.wlgen.rta.RTA : Execution start: /root/devlib-target/bin/rt-app /root/devlib-target/experiment_wload.json 2>&1\n", - "2019-02-25 18:38:37,587 INFO : lisa.wlgen.rta.RTA : Execution complete\n" + "2019-03-01 15:36:25,413 INFO : lisa.wlgen.rta.RTA : Execution start: /root/devlib-target/bin/rt-app /root/devlib-target/experiment_wload.json 2>&1\n", + "2019-03-01 15:36:26,682 INFO : lisa.wlgen.rta.RTA : Execution complete\n" ] } ], @@ -644,7 +672,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -658,12 +686,12 @@ "|- freqs from target (dict): {0: [533000, 999000, 1402000, 1709000, 1844000], 1: [533000, 999000, 1402000, 1709000, 1844000], 2: [533000, 999000, 1402000, 1709000, 1844000], 3: [533000, 999000, 1402000, 1709000, 1844000], 4: [903000, 1421000, 1805000, 2112000, 2362000], 5: [903000, 1421000, 1805000, 2112000, 2362000], 6: [903000, 1421000, 1805000, 2112000, 2362000], 7: [903000, 1421000, 1805000, 2112000, 2362000]}\n", "+- kernel:\n", " |- config from target (TypedKernelConfig): \n", - " |- version from target (KernelVersion): 5.0.0-rc6 27 SMP PREEMPT Tue Feb 19 17:28:19 GMT 2019\n", + " |- version from target (KernelVersion): 5.0.0-rc6-00099-g5441513e6c1c 29 SMP PREEMPT Tue Feb 26 16:27:53 GMT 2019\n", "|- name from target-conf (str): myhikey960\n", - "|- nrg-model from target (EnergyModel): \n", + "|- nrg-model from target (EnergyModel): \n", "|- os from target (str): linux\n", "+- rtapp:\n", - " |- calib from target (dict): {0: 306, 1: 303, 2: 302, 3: 304, 4: 137, 5: 137, 6: 137, 7: 137}\n", + " |- calib from target (dict): {0: 302, 1: 302, 2: 302, 3: 302, 4: 155, 5: 155, 6: 155, 7: 155}\n", "|- capacity-classes from target(platform-info/cpu-capacities) (list): [[0, 1, 2, 3], [4, 5, 6, 7]]\n" ] } @@ -681,7 +709,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -702,7 +730,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -712,7 +740,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -721,7 +749,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -740,174 +768,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "One of the first things you can do with that trace is display it in the Notebook. The inline plotter is not as feature-complete as Kernelshark, but it's useful as a quick way to plot the trace." - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [], - "source": [ - "from trappy.plotter import plot_trace" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
\n", - "\n", - "\n", - "\n", - " \n", - "
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_trace(trace.ftrace)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Kernelshark is still an option:" + "Kernelshark can be opened from the notebook:" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ + "version = 6\n", "trace-cmd: No such file or directory\n", " [xhci-hcd:xhci_urb_giveback] bad op token {\n", " [xhci-hcd:xhci_urb_enqueue] bad op token {\n", @@ -941,10 +814,28 @@ " [xhci-hcd:xhci_configure_endpoint] function xhci_decode_slot_context not defined\n", " [xhci-hcd:xhci_alloc_dev] function xhci_decode_slot_context not defined\n", " [vmscan:mm_vmscan_writepage] function __builtin_constant_p not defined\n", + " unknown op '~'\n", + " Error: expected type 5 but read 0\n", + " Error: expected type 4 but read 0\n", + " unknown op '~'\n", + " Error: expected type 5 but read 0\n", + " Error: expected type 4 but read 0\n", + " unknown op '~'\n", + " Error: expected type 5 but read 0\n", + " Error: expected type 4 but read 0\n", + " unknown op '~'\n", + " Error: expected type 5 but read 0\n", + " Error: expected type 4 but read 0\n", + " unknown op '~'\n", + " Error: expected type 5 but read 0\n", + " Error: expected type 4 but read 0\n", " [ufs:ufshcd_upiu] function sizeof not defined\n", " Error: expected type 5 but read 0\n", - "trace-cmd: Invalid argument\n", + " [thermal_power_allocator:thermal_power_allocator] function __print_array not defined\n", + " [thermal:thermal_power_cpu_get_power] function __print_array not defined\n", " [ras:mc_event] function mc_event_error_type not defined\n", + " [ras:aer_event] function __print_array not defined\n", + " Error: expected type 4 but read 0\n", " [libata:ata_qc_issue] function libata_trace_parse_subcmd not defined\n", " [libata:ata_qc_complete_internal] function libata_trace_parse_qc_flags not defined\n", " [libata:ata_qc_complete_failed] function libata_trace_parse_qc_flags not defined\n", @@ -952,12 +843,16 @@ " [libata:ata_eh_link_autopsy_qc] function libata_trace_parse_qc_flags not defined\n", " [libata:ata_eh_link_autopsy] function libata_trace_parse_eh_action not defined\n", " [kvm:kvm_sys_access] bad op token :\n", + " Error: expected type 4 but read 0\n", + " [kvm:kvm_arm_set_regset] function __print_array not defined\n", " [kmem:mm_page_pcpu_drain] function __builtin_constant_p not defined\n", " [kmem:mm_page_free_batched] function __builtin_constant_p not defined\n", " [kmem:mm_page_free] function __builtin_constant_p not defined\n", " [kmem:mm_page_alloc_zone_locked] function __builtin_constant_p not defined\n", + " Error: expected type 4 but read 0\n", " [kmem:mm_page_alloc_extfrag] function __builtin_constant_p not defined\n", " [kmem:mm_page_alloc] function __builtin_constant_p not defined\n", + " Error: expected type 4 but read 0\n", " [filemap:mm_filemap_delete_from_page_cache] function __builtin_constant_p not defined\n", " [filemap:mm_filemap_add_to_page_cache] function __builtin_constant_p not defined\n", " [dwc3:dwc3_prepare_trb] bad op token {\n", @@ -967,83 +862,83 @@ " [dwc3:dwc3_ctrl_req] function dwc3_decode_ctrl not defined\n", " [dwc3:dwc3_complete_trb] bad op token {\n", "\n", - "(kernelshark:23573): GLib-GObject-\u001b[1;33mWARNING\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: invalid unclassed pointer in cast to 'GtkStatusbar'\n", + "(kernelshark:11011): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", "\n", - "(kernelshark:23573): GLib-GObject-\u001b[1;33mWARNING\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: invalid unclassed pointer in cast to 'GtkStatusbar'\n", + "(kernelshark:11011): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", "\n", - "(kernelshark:23573): GLib-GObject-\u001b[1;33mWARNING\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: invalid unclassed pointer in cast to 'GtkStatusbar'\n", + "(kernelshark:11011): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", "\n", - "(kernelshark:23573): GLib-GObject-\u001b[1;33mWARNING\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: invalid unclassed pointer in cast to 'GtkStatusbar'\n", + "(kernelshark:11011): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", "\n", - "(kernelshark:23573): GLib-GObject-\u001b[1;33mWARNING\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: invalid unclassed pointer in cast to 'GtkStatusbar'\n", + "(kernelshark:11011): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", "\n", - "(kernelshark:23573): GLib-GObject-\u001b[1;33mWARNING\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: invalid unclassed pointer in cast to 'GtkStatusbar'\n", + "(kernelshark:11011): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", "\n", - "(kernelshark:23573): GLib-GObject-\u001b[1;33mWARNING\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: invalid unclassed pointer in cast to 'GtkStatusbar'\n", + "(kernelshark:11011): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", "\n", - "(kernelshark:23573): GLib-GObject-\u001b[1;33mWARNING\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: invalid unclassed pointer in cast to 'GtkStatusbar'\n", + "(kernelshark:11011): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", "\n", - "(kernelshark:23573): GLib-GObject-\u001b[1;33mWARNING\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: invalid unclassed pointer in cast to 'GtkStatusbar'\n", + "(kernelshark:11011): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", "\n", - "(kernelshark:23573): GLib-GObject-\u001b[1;33mWARNING\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: invalid unclassed pointer in cast to 'GtkStatusbar'\n", + "(kernelshark:11011): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", "\n", - "(kernelshark:23573): GLib-GObject-\u001b[1;33mWARNING\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: invalid unclassed pointer in cast to 'GtkStatusbar'\n", + "(kernelshark:11011): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", "\n", - "(kernelshark:23573): GLib-GObject-\u001b[1;33mWARNING\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: invalid unclassed pointer in cast to 'GtkStatusbar'\n", + "(kernelshark:11011): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n", "\n", - "(kernelshark:23573): GLib-GObject-\u001b[1;33mWARNING\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: invalid unclassed pointer in cast to 'GtkStatusbar'\n", + "(kernelshark:11011): GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkStatusbar'\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_statusbar_push: assertion 'GTK_IS_STATUSBAR (statusbar)' failed\n", "\n", - "(kernelshark:23573): Gtk-\u001b[1;35mCRITICAL\u001b[0m **: \u001b[34m18:39:26.173\u001b[0m: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n" + "(kernelshark:11011): Gtk-CRITICAL **: IA__gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed\n" ] } ], @@ -1074,7 +969,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -1127,180 +1022,180 @@ " \n", " \n", " \n", - " 0.000081\n", + " 0.000032\n", " <...>\n", - " 0\n", + " 6\n", " 1\n", - " 7064\n", - " swapper/0\n", + " 6483\n", + " swapper/6\n", " 0\n", " 120\n", " trace-cmd\n", - " 7064\n", + " 6483\n", " 120\n", " 32\n", " \n", " \n", - " 0.000345\n", + " 0.000074\n", " <idle>\n", + " 6\n", " 3\n", - " 2\n", " 0\n", - " sh\n", - " 6695\n", + " kworker/6:3\n", + " 5273\n", " 120\n", - " swapper/3\n", + " swapper/6\n", " 0\n", " 120\n", " 0\n", " \n", " \n", - " 0.001656\n", - " <idle>\n", - " 0\n", + " 0.000119\n", + " kworker/6:3\n", + " 6\n", " 4\n", + " 5273\n", + " swapper/6\n", " 0\n", - " kworker/u16:1\n", - " 6721\n", " 120\n", - " swapper/0\n", - " 0\n", + " kworker/6:3\n", + " 5273\n", " 120\n", - " 0\n", + " 128\n", " \n", " \n", - " 0.001758\n", - " sh\n", - " 3\n", + " 0.000256\n", + " <idle>\n", + " 4\n", " 5\n", - " 6695\n", - " swapper/3\n", " 0\n", + " bash\n", + " 5870\n", " 120\n", - " sh\n", - " 6695\n", + " swapper/4\n", + " 0\n", " 120\n", - " 1\n", + " 0\n", " \n", " \n", - " 0.001856\n", - " kworker/u16:1\n", - " 0\n", + " 0.001179\n", + " <idle>\n", + " 7\n", " 7\n", - " 6721\n", - " swapper/0\n", " 0\n", + " kworker/u16:0\n", + " 4002\n", " 120\n", - " kworker/u16:1\n", - " 6721\n", + " swapper/7\n", + " 0\n", " 120\n", - " 128\n", + " 0\n", " \n", " \n", - " 0.002165\n", - " <idle>\n", - " 2\n", + " 0.001237\n", + " kworker/u16:0\n", + " 7\n", " 8\n", + " 4002\n", + " swapper/7\n", " 0\n", - " sshd\n", - " 6692\n", " 120\n", - " swapper/2\n", - " 0\n", + " kworker/u16:0\n", + " 4002\n", " 120\n", - " 0\n", + " 128\n", " \n", " \n", - " 0.003026\n", - " sshd\n", - " 2\n", - " 9\n", - " 6692\n", - " swapper/2\n", + " 0.001379\n", + " bash\n", + " 4\n", + " 10\n", + " 5870\n", + " swapper/4\n", " 0\n", " 120\n", - " sshd\n", - " 6692\n", + " bash\n", + " 5870\n", " 120\n", " 1\n", " \n", " \n", - " 0.004100\n", + " 0.001569\n", " <idle>\n", - " 3\n", + " 7\n", " 11\n", " 0\n", - " rcu_preempt\n", - " 10\n", + " kworker/u16:0\n", + " 4002\n", " 120\n", - " swapper/3\n", + " swapper/7\n", " 0\n", " 120\n", " 0\n", " \n", " \n", - " 0.004267\n", - " rcu_preempt\n", - " 3\n", + " 0.001599\n", + " kworker/u16:0\n", + " 7\n", " 12\n", - " 10\n", - " swapper/3\n", + " 4002\n", + " swapper/7\n", " 0\n", " 120\n", - " rcu_preempt\n", - " 10\n", + " kworker/u16:0\n", + " 4002\n", " 120\n", " 128\n", " \n", " \n", - " 0.012286\n", + " 0.002317\n", " <idle>\n", - " 3\n", - " 14\n", " 0\n", - " rcu_preempt\n", - " 10\n", + " 15\n", + " 0\n", + " kworker/0:1\n", + " 4743\n", " 120\n", - " swapper/3\n", + " swapper/0\n", " 0\n", " 120\n", " 0\n", " \n", " \n", - " 0.012397\n", - " rcu_preempt\n", - " 3\n", - " 15\n", - " 10\n", - " swapper/3\n", + " 0.002439\n", + " kworker/0:1\n", " 0\n", + " 16\n", + " 4743\n", + " sshd\n", + " 5862\n", " 120\n", - " rcu_preempt\n", - " 10\n", + " kworker/0:1\n", + " 4743\n", " 120\n", " 128\n", " \n", " \n", - " 0.020253\n", + " 0.002529\n", " <idle>\n", - " 3\n", - " 17\n", + " 6\n", + " 18\n", " 0\n", " rcu_preempt\n", " 10\n", " 120\n", - " swapper/3\n", + " swapper/6\n", " 0\n", " 120\n", " 0\n", " \n", " \n", - " 0.020362\n", + " 0.002574\n", " rcu_preempt\n", - " 3\n", - " 18\n", + " 6\n", + " 19\n", " 10\n", - " swapper/3\n", + " swapper/6\n", " 0\n", " 120\n", " rcu_preempt\n", @@ -1309,82 +1204,68 @@ " 128\n", " \n", " \n", - " 0.024036\n", - " <idle>\n", + " 0.003486\n", + " sshd\n", " 0\n", " 20\n", - " 0\n", - " kworker/0:1\n", - " 125\n", - " 120\n", - " swapper/0\n", - " 0\n", - " 120\n", - " 0\n", - " \n", - " \n", - " 0.024228\n", - " kworker/0:1\n", - " 0\n", - " 21\n", - " 125\n", + " 5862\n", " swapper/0\n", " 0\n", " 120\n", - " kworker/0:1\n", - " 125\n", + " sshd\n", + " 5862\n", " 120\n", - " 128\n", + " 1\n", " \n", " \n", - " 0.028059\n", + " 0.010559\n", " <idle>\n", - " 3\n", - " 23\n", + " 4\n", + " 22\n", " 0\n", - " rcu_preempt\n", - " 10\n", + " kworker/4:2\n", + " 4035\n", " 120\n", - " swapper/3\n", + " swapper/4\n", " 0\n", " 120\n", " 0\n", " \n", " \n", - " 0.028204\n", - " rcu_preempt\n", - " 3\n", - " 24\n", - " 10\n", - " swapper/3\n", + " 0.010599\n", + " kworker/4:2\n", + " 4\n", + " 23\n", + " 4035\n", + " swapper/4\n", " 0\n", " 120\n", - " rcu_preempt\n", - " 10\n", + " kworker/4:2\n", + " 4035\n", " 120\n", " 128\n", " \n", " \n", - " 0.028661\n", + " 0.010779\n", " <idle>\n", - " 3\n", - " 26\n", + " 6\n", + " 25\n", " 0\n", " rcu_preempt\n", " 10\n", " 120\n", - " swapper/3\n", + " swapper/6\n", " 0\n", " 120\n", " 0\n", " \n", " \n", - " 0.028736\n", + " 0.010819\n", " rcu_preempt\n", - " 3\n", - " 27\n", + " 6\n", + " 26\n", " 10\n", - " swapper/3\n", + " swapper/6\n", " 0\n", " 120\n", " rcu_preempt\n", @@ -1393,55 +1274,55 @@ " 128\n", " \n", " \n", - " 0.031987\n", + " 0.018754\n", " <idle>\n", + " 6\n", + " 28\n", " 0\n", - " 29\n", - " 0\n", - " kworker/0:1\n", - " 125\n", + " rcu_preempt\n", + " 10\n", " 120\n", - " swapper/0\n", + " swapper/6\n", " 0\n", " 120\n", " 0\n", " \n", " \n", - " 0.032074\n", - " kworker/0:1\n", - " 0\n", - " 30\n", - " 125\n", - " swapper/0\n", + " 0.018794\n", + " rcu_preempt\n", + " 6\n", + " 29\n", + " 10\n", + " swapper/6\n", " 0\n", " 120\n", - " kworker/0:1\n", - " 125\n", + " rcu_preempt\n", + " 10\n", " 120\n", " 128\n", " \n", " \n", - " 0.036056\n", + " 0.026534\n", " <idle>\n", - " 3\n", + " 6\n", " 32\n", " 0\n", " rcu_preempt\n", " 10\n", " 120\n", - " swapper/3\n", + " swapper/6\n", " 0\n", " 120\n", " 0\n", " \n", " \n", - " 0.036167\n", + " 0.026574\n", " rcu_preempt\n", - " 3\n", + " 6\n", " 33\n", " 10\n", - " swapper/3\n", - " 0\n", + " kworker/6:3\n", + " 5273\n", " 120\n", " rcu_preempt\n", " 10\n", @@ -1449,99 +1330,113 @@ " 128\n", " \n", " \n", - " 0.044051\n", + " 0.026634\n", + " kworker/6:3\n", + " 6\n", + " 34\n", + " 5273\n", + " swapper/6\n", + " 0\n", + " 120\n", + " kworker/6:3\n", + " 5273\n", + " 120\n", + " 128\n", + " \n", + " \n", + " 0.026654\n", " <idle>\n", - " 3\n", - " 35\n", + " 6\n", + " 36\n", " 0\n", - " rcu_preempt\n", - " 10\n", + " kworker/6:3\n", + " 5273\n", " 120\n", - " swapper/3\n", + " swapper/6\n", " 0\n", " 120\n", " 0\n", " \n", " \n", - " 0.044136\n", - " rcu_preempt\n", - " 3\n", - " 36\n", - " 10\n", - " swapper/3\n", + " 0.026686\n", + " kworker/6:3\n", + " 6\n", + " 37\n", + " 5273\n", + " swapper/6\n", " 0\n", " 120\n", - " rcu_preempt\n", - " 10\n", + " kworker/6:3\n", + " 5273\n", " 120\n", " 128\n", " \n", " \n", - " 0.156590\n", + " 0.030513\n", " <idle>\n", - " 2\n", - " 38\n", + " 6\n", + " 39\n", " 0\n", - " sshd\n", - " 6692\n", + " kworker/6:3\n", + " 5273\n", " 120\n", - " swapper/2\n", + " swapper/6\n", " 0\n", " 120\n", " 0\n", " \n", " \n", - " 0.157772\n", - " <idle>\n", - " 0\n", + " 0.030581\n", + " kworker/6:3\n", + " 6\n", " 40\n", + " 5273\n", + " swapper/6\n", " 0\n", - " kworker/u16:1\n", - " 6721\n", " 120\n", - " swapper/0\n", - " 0\n", + " kworker/6:3\n", + " 5273\n", " 120\n", - " 0\n", + " 128\n", " \n", " \n", - " 0.158056\n", - " kworker/u16:1\n", - " 0\n", + " 0.034546\n", + " <idle>\n", + " 6\n", " 42\n", - " 6721\n", - " swapper/0\n", " 0\n", + " rcu_preempt\n", + " 10\n", " 120\n", - " kworker/u16:1\n", - " 6721\n", + " swapper/6\n", + " 0\n", " 120\n", - " 128\n", + " 0\n", " \n", " \n", - " 0.158229\n", - " sshd\n", - " 2\n", + " 0.034586\n", + " rcu_preempt\n", + " 6\n", " 43\n", - " 6692\n", - " swapper/2\n", + " 10\n", + " swapper/6\n", " 0\n", " 120\n", - " sshd\n", - " 6692\n", + " rcu_preempt\n", + " 10\n", " 120\n", - " 1\n", + " 128\n", " \n", " \n", - " 0.158289\n", + " 0.038554\n", " <idle>\n", - " 3\n", - " 44\n", + " 6\n", + " 45\n", " 0\n", - " sh\n", - " 6695\n", + " kworker/6:3\n", + " 5273\n", " 120\n", - " swapper/3\n", + " swapper/6\n", " 0\n", " 120\n", " 0\n", @@ -1561,279 +1456,251 @@ " ...\n", " \n", " \n", - " 8.111883\n", + " 9.847429\n", " <idle>\n", - " 2\n", - " 9891\n", " 0\n", - " kworker/u16:1\n", - " 6721\n", + " 28936\n", + " 0\n", + " kworker/0:1\n", + " 4743\n", " 120\n", - " swapper/2\n", + " swapper/0\n", " 0\n", " 120\n", " 0\n", " \n", " \n", - " 8.112218\n", - " kworker/u16:1\n", - " 2\n", - " 9894\n", - " 6721\n", - " swapper/2\n", - " 0\n", + " 9.847512\n", + " kworker/6:1\n", + " 6\n", + " 28937\n", + " 5861\n", + " rcu_preempt\n", + " 10\n", " 120\n", - " kworker/u16:1\n", - " 6721\n", + " kworker/6:1\n", + " 5861\n", " 120\n", " 128\n", " \n", " \n", - " 8.112299\n", - " <idle>\n", - " 2\n", - " 9896\n", - " 0\n", - " kworker/u16:1\n", - " 6721\n", - " 120\n", - " swapper/2\n", - " 0\n", - " 120\n", - " 0\n", - " \n", - " \n", - " 8.112365\n", - " kworker/u16:1\n", - " 2\n", - " 9897\n", - " 6721\n", - " swapper/2\n", + " 9.847570\n", + " rcu_preempt\n", + " 6\n", + " 28938\n", + " 10\n", + " swapper/6\n", " 0\n", " 120\n", - " kworker/u16:1\n", - " 6721\n", + " rcu_preempt\n", + " 10\n", " 120\n", " 128\n", " \n", " \n", - " 8.112379\n", - " sh\n", - " 3\n", - " 9898\n", - " 6695\n", - " swapper/3\n", + " 9.847576\n", + " kworker/0:1\n", + " 0\n", + " 28939\n", + " 4743\n", + " swapper/0\n", " 0\n", " 120\n", - " sh\n", - " 6695\n", + " kworker/0:1\n", + " 4743\n", " 120\n", - " 1\n", + " 128\n", " \n", " \n", - " 8.112382\n", + " 9.850515\n", " <idle>\n", - " 1\n", - " 9899\n", + " 6\n", + " 28941\n", " 0\n", - " kworker/u16:2\n", - " 28905\n", + " rcu_preempt\n", + " 10\n", " 120\n", - " swapper/1\n", + " swapper/6\n", " 0\n", " 120\n", " 0\n", " \n", " \n", - " 8.112434\n", - " <...>\n", - " 1\n", - " 9900\n", - " 28905\n", - " swapper/1\n", + " 9.850558\n", + " rcu_preempt\n", + " 6\n", + " 28942\n", + " 10\n", + " swapper/6\n", " 0\n", " 120\n", - " kworker/u16:2\n", - " 28905\n", + " rcu_preempt\n", + " 10\n", " 120\n", " 128\n", " \n", " \n", - " 8.112435\n", + " 9.858507\n", " <idle>\n", + " 6\n", + " 28945\n", " 0\n", - " 9901\n", - " 0\n", - " sshd\n", - " 6692\n", + " kworker/6:1\n", + " 5861\n", " 120\n", - " swapper/0\n", + " swapper/6\n", " 0\n", " 120\n", " 0\n", " \n", " \n", - " 8.113456\n", - " sshd\n", - " 0\n", - " 9902\n", - " 6692\n", - " swapper/0\n", - " 0\n", + " 9.858539\n", + " kworker/6:1\n", + " 6\n", + " 28946\n", + " 5861\n", + " rcu_preempt\n", + " 10\n", " 120\n", - " sshd\n", - " 6692\n", + " kworker/6:1\n", + " 5861\n", " 120\n", - " 1\n", + " 128\n", " \n", " \n", - " 8.120035\n", - " <idle>\n", - " 4\n", - " 9904\n", - " 0\n", - " sugov:4\n", - " 7037\n", - " -1\n", - " swapper/4\n", + " 9.858612\n", + " rcu_preempt\n", + " 6\n", + " 28947\n", + " 10\n", + " swapper/6\n", " 0\n", " 120\n", - " 0\n", - " \n", - " \n", - " 8.120064\n", - " sugov:4\n", - " 4\n", - " 9905\n", - " 7037\n", - " swapper/4\n", - " 0\n", + " rcu_preempt\n", + " 10\n", " 120\n", - " sugov:4\n", - " 7037\n", - " -1\n", - " 1\n", + " 128\n", " \n", " \n", - " 8.120153\n", + " 9.858633\n", " <idle>\n", - " 3\n", - " 9907\n", + " 6\n", + " 28949\n", " 0\n", - " rcu_preempt\n", - " 10\n", + " kworker/6:1\n", + " 5861\n", " 120\n", - " swapper/3\n", + " swapper/6\n", " 0\n", " 120\n", " 0\n", " \n", " \n", - " 8.120281\n", - " rcu_preempt\n", - " 3\n", - " 9908\n", - " 10\n", - " swapper/3\n", + " 9.858664\n", + " kworker/6:1\n", + " 6\n", + " 28950\n", + " 5861\n", + " swapper/6\n", " 0\n", " 120\n", - " rcu_preempt\n", - " 10\n", + " kworker/6:1\n", + " 5861\n", " 120\n", " 128\n", " \n", " \n", - " 8.127991\n", + " 9.956654\n", " <idle>\n", - " 3\n", - " 9910\n", " 0\n", - " rcu_preempt\n", - " 10\n", - " 120\n", - " swapper/3\n", + " 28953\n", " 0\n", + " kworker/0:1\n", + " 4743\n", " 120\n", + " swapper/0\n", " 0\n", - " \n", - " \n", - " 8.128103\n", - " rcu_preempt\n", - " 3\n", - " 9911\n", - " 10\n", - " swapper/3\n", - " 0\n", - " 120\n", - " rcu_preempt\n", - " 10\n", " 120\n", - " 128\n", + " 0\n", " \n", " \n", - " 8.135938\n", + " 9.956745\n", " <idle>\n", - " 3\n", - " 9913\n", + " 2\n", + " 28954\n", " 0\n", - " rcu_preempt\n", - " 10\n", + " sshd\n", + " 5862\n", " 120\n", - " swapper/3\n", + " swapper/2\n", " 0\n", " 120\n", " 0\n", " \n", " \n", - " 8.136048\n", - " rcu_preempt\n", - " 3\n", - " 9914\n", - " 10\n", - " swapper/3\n", + " 9.957013\n", + " kworker/0:1\n", + " 0\n", + " 28955\n", + " 4743\n", + " swapper/0\n", " 0\n", " 120\n", - " rcu_preempt\n", - " 10\n", + " kworker/0:1\n", + " 4743\n", " 120\n", " 128\n", " \n", " \n", - " 8.144221\n", + " 9.957064\n", " <idle>\n", - " 3\n", - " 9916\n", " 0\n", - " rcu_preempt\n", - " 10\n", + " 28957\n", + " 0\n", + " kworker/0:1\n", + " 4743\n", " 120\n", - " swapper/3\n", + " swapper/0\n", " 0\n", " 120\n", " 0\n", " \n", " \n", - " 8.144420\n", - " rcu_preempt\n", - " 3\n", - " 9917\n", - " 10\n", - " swapper/3\n", + " 9.957156\n", + " kworker/0:1\n", + " 0\n", + " 28958\n", + " 4743\n", + " swapper/0\n", " 0\n", " 120\n", - " rcu_preempt\n", - " 10\n", + " kworker/0:1\n", + " 4743\n", " 120\n", " 128\n", " \n", " \n", - " 8.189385\n", + " 9.957491\n", + " sshd\n", + " 2\n", + " 28960\n", + " 5862\n", + " swapper/2\n", + " 0\n", + " 120\n", + " sshd\n", + " 5862\n", + " 120\n", + " 1\n", + " \n", + " \n", + " 9.957653\n", " <idle>\n", " 1\n", - " 9919\n", + " 28961\n", " 0\n", - " kworker/u16:2\n", - " 28905\n", + " kworker/u16:1\n", + " 4961\n", " 120\n", " swapper/1\n", " 0\n", @@ -1841,283 +1708,311 @@ " 0\n", " \n", " \n", - " 8.189760\n", - " <...>\n", + " 9.957783\n", + " kworker/u16:1\n", " 1\n", - " 9920\n", - " 28905\n", + " 28962\n", + " 4961\n", " swapper/1\n", " 0\n", " 120\n", - " kworker/u16:2\n", - " 28905\n", + " kworker/u16:1\n", + " 4961\n", " 120\n", " 128\n", " \n", " \n", - " 8.267389\n", + " 9.959781\n", " <idle>\n", + " 6\n", + " 28964\n", " 0\n", - " 9922\n", - " 0\n", - " sshd\n", - " 6692\n", + " bash\n", + " 5870\n", " 120\n", - " swapper/0\n", + " swapper/6\n", " 0\n", " 120\n", " 0\n", " \n", " \n", - " 8.268310\n", - " <idle>\n", - " 1\n", - " 9924\n", + " 9.964075\n", + " bash\n", + " 6\n", + " 28966\n", + " 5870\n", + " swapper/6\n", " 0\n", - " kworker/u16:2\n", - " 28905\n", " 120\n", - " swapper/1\n", - " 0\n", + " bash\n", + " 5870\n", " 120\n", - " 0\n", + " 1\n", " \n", " \n", - " 8.268529\n", - " <...>\n", - " 1\n", - " 9926\n", - " 28905\n", - " swapper/1\n", + " 9.964712\n", + " <idle>\n", + " 2\n", + " 28967\n", " 0\n", + " bash\n", + " 6799\n", " 120\n", - " kworker/u16:2\n", - " 28905\n", + " swapper/2\n", + " 0\n", " 120\n", - " 128\n", + " 0\n", " \n", " \n", - " 8.268806\n", + " 9.968393\n", " <idle>\n", - " 3\n", - " 9927\n", + " 6\n", + " 28970\n", " 0\n", - " sh\n", - " 6695\n", + " rcu_preempt\n", + " 10\n", " 120\n", - " swapper/3\n", + " swapper/6\n", " 0\n", " 120\n", " 0\n", " \n", " \n", - " 8.269021\n", - " sshd\n", - " 0\n", - " 9928\n", - " 6692\n", - " swapper/0\n", - " 0\n", + " 9.968459\n", + " rcu_preempt\n", + " 6\n", + " 28971\n", + " 10\n", + " kworker/6:1\n", + " 5861\n", " 120\n", - " sshd\n", - " 6692\n", + " rcu_preempt\n", + " 10\n", " 120\n", - " 1\n", + " 128\n", " \n", " \n", - " 8.270803\n", - " sh\n", - " 3\n", - " 9930\n", - " 6695\n", - " swapper/3\n", + " 9.968687\n", + " kworker/6:1\n", + " 6\n", + " 28972\n", + " 5861\n", + " swapper/6\n", " 0\n", " 120\n", - " sh\n", - " 6695\n", + " kworker/6:1\n", + " 5861\n", " 120\n", - " 1\n", + " 128\n", " \n", " \n", - " 8.272511\n", + " 9.968710\n", " <idle>\n", - " 5\n", - " 9931\n", + " 6\n", + " 28974\n", " 0\n", - " sh\n", - " 7209\n", + " kworker/6:1\n", + " 5861\n", " 120\n", - " swapper/5\n", + " swapper/6\n", " 0\n", " 120\n", " 0\n", " \n", " \n", - " 8.272923\n", - " <idle>\n", - " 4\n", - " 9933\n", - " 0\n", - " sugov:4\n", - " 7037\n", - " -1\n", - " swapper/4\n", + " 9.968783\n", + " kworker/6:1\n", + " 6\n", + " 28975\n", + " 5861\n", + " swapper/6\n", " 0\n", " 120\n", + " kworker/6:1\n", + " 5861\n", + " 120\n", + " 128\n", + " \n", + " \n", + " 9.970022\n", + " bash\n", + " 2\n", + " 28977\n", + " 6799\n", + " migration/2\n", + " 19\n", " 0\n", + " bash\n", + " 6799\n", + " 120\n", + " 256\n", " \n", " \n", - " 8.273060\n", - " sugov:4\n", - " 4\n", - " 9934\n", - " 7037\n", - " swapper/4\n", + " 9.970352\n", + " migration/2\n", + " 2\n", + " 28978\n", + " 19\n", + " swapper/2\n", " 0\n", " 120\n", - " sugov:4\n", - " 7037\n", - " -1\n", + " migration/2\n", + " 19\n", + " 0\n", " 1\n", " \n", + " \n", + " 9.971991\n", + " <idle>\n", + " 6\n", + " 28979\n", + " 0\n", + " bash\n", + " 6799\n", + " 120\n", + " swapper/6\n", + " 0\n", + " 120\n", + " 0\n", + " \n", " \n", "\n", - "

6604 rows × 11 columns

\n", + "

18637 rows × 11 columns

\n", "" ], "text/plain": [ " __comm __cpu __line __pid next_comm next_pid \\\n", "Time \n", - "0.000081 <...> 0 1 7064 swapper/0 0 \n", - "0.000345 3 2 0 sh 6695 \n", - "0.001656 0 4 0 kworker/u16:1 6721 \n", - "0.001758 sh 3 5 6695 swapper/3 0 \n", - "0.001856 kworker/u16:1 0 7 6721 swapper/0 0 \n", - "0.002165 2 8 0 sshd 6692 \n", - "0.003026 sshd 2 9 6692 swapper/2 0 \n", - "0.004100 3 11 0 rcu_preempt 10 \n", - "0.004267 rcu_preempt 3 12 10 swapper/3 0 \n", - "0.012286 3 14 0 rcu_preempt 10 \n", - "0.012397 rcu_preempt 3 15 10 swapper/3 0 \n", - "0.020253 3 17 0 rcu_preempt 10 \n", - "0.020362 rcu_preempt 3 18 10 swapper/3 0 \n", - "0.024036 0 20 0 kworker/0:1 125 \n", - "0.024228 kworker/0:1 0 21 125 swapper/0 0 \n", - "0.028059 3 23 0 rcu_preempt 10 \n", - "0.028204 rcu_preempt 3 24 10 swapper/3 0 \n", - "0.028661 3 26 0 rcu_preempt 10 \n", - "0.028736 rcu_preempt 3 27 10 swapper/3 0 \n", - "0.031987 0 29 0 kworker/0:1 125 \n", - "0.032074 kworker/0:1 0 30 125 swapper/0 0 \n", - "0.036056 3 32 0 rcu_preempt 10 \n", - "0.036167 rcu_preempt 3 33 10 swapper/3 0 \n", - "0.044051 3 35 0 rcu_preempt 10 \n", - "0.044136 rcu_preempt 3 36 10 swapper/3 0 \n", - "0.156590 2 38 0 sshd 6692 \n", - "0.157772 0 40 0 kworker/u16:1 6721 \n", - "0.158056 kworker/u16:1 0 42 6721 swapper/0 0 \n", - "0.158229 sshd 2 43 6692 swapper/2 0 \n", - "0.158289 3 44 0 sh 6695 \n", + "0.000032 <...> 6 1 6483 swapper/6 0 \n", + "0.000074 6 3 0 kworker/6:3 5273 \n", + "0.000119 kworker/6:3 6 4 5273 swapper/6 0 \n", + "0.000256 4 5 0 bash 5870 \n", + "0.001179 7 7 0 kworker/u16:0 4002 \n", + "0.001237 kworker/u16:0 7 8 4002 swapper/7 0 \n", + "0.001379 bash 4 10 5870 swapper/4 0 \n", + "0.001569 7 11 0 kworker/u16:0 4002 \n", + "0.001599 kworker/u16:0 7 12 4002 swapper/7 0 \n", + "0.002317 0 15 0 kworker/0:1 4743 \n", + "0.002439 kworker/0:1 0 16 4743 sshd 5862 \n", + "0.002529 6 18 0 rcu_preempt 10 \n", + "0.002574 rcu_preempt 6 19 10 swapper/6 0 \n", + "0.003486 sshd 0 20 5862 swapper/0 0 \n", + "0.010559 4 22 0 kworker/4:2 4035 \n", + "0.010599 kworker/4:2 4 23 4035 swapper/4 0 \n", + "0.010779 6 25 0 rcu_preempt 10 \n", + "0.010819 rcu_preempt 6 26 10 swapper/6 0 \n", + "0.018754 6 28 0 rcu_preempt 10 \n", + "0.018794 rcu_preempt 6 29 10 swapper/6 0 \n", + "0.026534 6 32 0 rcu_preempt 10 \n", + "0.026574 rcu_preempt 6 33 10 kworker/6:3 5273 \n", + "0.026634 kworker/6:3 6 34 5273 swapper/6 0 \n", + "0.026654 6 36 0 kworker/6:3 5273 \n", + "0.026686 kworker/6:3 6 37 5273 swapper/6 0 \n", + "0.030513 6 39 0 kworker/6:3 5273 \n", + "0.030581 kworker/6:3 6 40 5273 swapper/6 0 \n", + "0.034546 6 42 0 rcu_preempt 10 \n", + "0.034586 rcu_preempt 6 43 10 swapper/6 0 \n", + "0.038554 6 45 0 kworker/6:3 5273 \n", "... ... ... ... ... ... ... \n", - "8.111883 2 9891 0 kworker/u16:1 6721 \n", - "8.112218 kworker/u16:1 2 9894 6721 swapper/2 0 \n", - "8.112299 2 9896 0 kworker/u16:1 6721 \n", - "8.112365 kworker/u16:1 2 9897 6721 swapper/2 0 \n", - "8.112379 sh 3 9898 6695 swapper/3 0 \n", - "8.112382 1 9899 0 kworker/u16:2 28905 \n", - "8.112434 <...> 1 9900 28905 swapper/1 0 \n", - "8.112435 0 9901 0 sshd 6692 \n", - "8.113456 sshd 0 9902 6692 swapper/0 0 \n", - "8.120035 4 9904 0 sugov:4 7037 \n", - "8.120064 sugov:4 4 9905 7037 swapper/4 0 \n", - "8.120153 3 9907 0 rcu_preempt 10 \n", - "8.120281 rcu_preempt 3 9908 10 swapper/3 0 \n", - "8.127991 3 9910 0 rcu_preempt 10 \n", - "8.128103 rcu_preempt 3 9911 10 swapper/3 0 \n", - "8.135938 3 9913 0 rcu_preempt 10 \n", - "8.136048 rcu_preempt 3 9914 10 swapper/3 0 \n", - "8.144221 3 9916 0 rcu_preempt 10 \n", - "8.144420 rcu_preempt 3 9917 10 swapper/3 0 \n", - "8.189385 1 9919 0 kworker/u16:2 28905 \n", - "8.189760 <...> 1 9920 28905 swapper/1 0 \n", - "8.267389 0 9922 0 sshd 6692 \n", - "8.268310 1 9924 0 kworker/u16:2 28905 \n", - "8.268529 <...> 1 9926 28905 swapper/1 0 \n", - "8.268806 3 9927 0 sh 6695 \n", - "8.269021 sshd 0 9928 6692 swapper/0 0 \n", - "8.270803 sh 3 9930 6695 swapper/3 0 \n", - "8.272511 5 9931 0 sh 7209 \n", - "8.272923 4 9933 0 sugov:4 7037 \n", - "8.273060 sugov:4 4 9934 7037 swapper/4 0 \n", + "9.847429 0 28936 0 kworker/0:1 4743 \n", + "9.847512 kworker/6:1 6 28937 5861 rcu_preempt 10 \n", + "9.847570 rcu_preempt 6 28938 10 swapper/6 0 \n", + "9.847576 kworker/0:1 0 28939 4743 swapper/0 0 \n", + "9.850515 6 28941 0 rcu_preempt 10 \n", + "9.850558 rcu_preempt 6 28942 10 swapper/6 0 \n", + "9.858507 6 28945 0 kworker/6:1 5861 \n", + "9.858539 kworker/6:1 6 28946 5861 rcu_preempt 10 \n", + "9.858612 rcu_preempt 6 28947 10 swapper/6 0 \n", + "9.858633 6 28949 0 kworker/6:1 5861 \n", + "9.858664 kworker/6:1 6 28950 5861 swapper/6 0 \n", + "9.956654 0 28953 0 kworker/0:1 4743 \n", + "9.956745 2 28954 0 sshd 5862 \n", + "9.957013 kworker/0:1 0 28955 4743 swapper/0 0 \n", + "9.957064 0 28957 0 kworker/0:1 4743 \n", + "9.957156 kworker/0:1 0 28958 4743 swapper/0 0 \n", + "9.957491 sshd 2 28960 5862 swapper/2 0 \n", + "9.957653 1 28961 0 kworker/u16:1 4961 \n", + "9.957783 kworker/u16:1 1 28962 4961 swapper/1 0 \n", + "9.959781 6 28964 0 bash 5870 \n", + "9.964075 bash 6 28966 5870 swapper/6 0 \n", + "9.964712 2 28967 0 bash 6799 \n", + "9.968393 6 28970 0 rcu_preempt 10 \n", + "9.968459 rcu_preempt 6 28971 10 kworker/6:1 5861 \n", + "9.968687 kworker/6:1 6 28972 5861 swapper/6 0 \n", + "9.968710 6 28974 0 kworker/6:1 5861 \n", + "9.968783 kworker/6:1 6 28975 5861 swapper/6 0 \n", + "9.970022 bash 2 28977 6799 migration/2 19 \n", + "9.970352 migration/2 2 28978 19 swapper/2 0 \n", + "9.971991 6 28979 0 bash 6799 \n", "\n", " next_prio prev_comm prev_pid prev_prio prev_state \n", "Time \n", - "0.000081 120 trace-cmd 7064 120 32 \n", - "0.000345 120 swapper/3 0 120 0 \n", - "0.001656 120 swapper/0 0 120 0 \n", - "0.001758 120 sh 6695 120 1 \n", - "0.001856 120 kworker/u16:1 6721 120 128 \n", - "0.002165 120 swapper/2 0 120 0 \n", - "0.003026 120 sshd 6692 120 1 \n", - "0.004100 120 swapper/3 0 120 0 \n", - "0.004267 120 rcu_preempt 10 120 128 \n", - "0.012286 120 swapper/3 0 120 0 \n", - "0.012397 120 rcu_preempt 10 120 128 \n", - "0.020253 120 swapper/3 0 120 0 \n", - "0.020362 120 rcu_preempt 10 120 128 \n", - "0.024036 120 swapper/0 0 120 0 \n", - "0.024228 120 kworker/0:1 125 120 128 \n", - "0.028059 120 swapper/3 0 120 0 \n", - "0.028204 120 rcu_preempt 10 120 128 \n", - "0.028661 120 swapper/3 0 120 0 \n", - "0.028736 120 rcu_preempt 10 120 128 \n", - "0.031987 120 swapper/0 0 120 0 \n", - "0.032074 120 kworker/0:1 125 120 128 \n", - "0.036056 120 swapper/3 0 120 0 \n", - "0.036167 120 rcu_preempt 10 120 128 \n", - "0.044051 120 swapper/3 0 120 0 \n", - "0.044136 120 rcu_preempt 10 120 128 \n", - "0.156590 120 swapper/2 0 120 0 \n", - "0.157772 120 swapper/0 0 120 0 \n", - "0.158056 120 kworker/u16:1 6721 120 128 \n", - "0.158229 120 sshd 6692 120 1 \n", - "0.158289 120 swapper/3 0 120 0 \n", + "0.000032 120 trace-cmd 6483 120 32 \n", + "0.000074 120 swapper/6 0 120 0 \n", + "0.000119 120 kworker/6:3 5273 120 128 \n", + "0.000256 120 swapper/4 0 120 0 \n", + "0.001179 120 swapper/7 0 120 0 \n", + "0.001237 120 kworker/u16:0 4002 120 128 \n", + "0.001379 120 bash 5870 120 1 \n", + "0.001569 120 swapper/7 0 120 0 \n", + "0.001599 120 kworker/u16:0 4002 120 128 \n", + "0.002317 120 swapper/0 0 120 0 \n", + "0.002439 120 kworker/0:1 4743 120 128 \n", + "0.002529 120 swapper/6 0 120 0 \n", + "0.002574 120 rcu_preempt 10 120 128 \n", + "0.003486 120 sshd 5862 120 1 \n", + "0.010559 120 swapper/4 0 120 0 \n", + "0.010599 120 kworker/4:2 4035 120 128 \n", + "0.010779 120 swapper/6 0 120 0 \n", + "0.010819 120 rcu_preempt 10 120 128 \n", + "0.018754 120 swapper/6 0 120 0 \n", + "0.018794 120 rcu_preempt 10 120 128 \n", + "0.026534 120 swapper/6 0 120 0 \n", + "0.026574 120 rcu_preempt 10 120 128 \n", + "0.026634 120 kworker/6:3 5273 120 128 \n", + "0.026654 120 swapper/6 0 120 0 \n", + "0.026686 120 kworker/6:3 5273 120 128 \n", + "0.030513 120 swapper/6 0 120 0 \n", + "0.030581 120 kworker/6:3 5273 120 128 \n", + "0.034546 120 swapper/6 0 120 0 \n", + "0.034586 120 rcu_preempt 10 120 128 \n", + "0.038554 120 swapper/6 0 120 0 \n", "... ... ... ... ... ... \n", - "8.111883 120 swapper/2 0 120 0 \n", - "8.112218 120 kworker/u16:1 6721 120 128 \n", - "8.112299 120 swapper/2 0 120 0 \n", - "8.112365 120 kworker/u16:1 6721 120 128 \n", - "8.112379 120 sh 6695 120 1 \n", - "8.112382 120 swapper/1 0 120 0 \n", - "8.112434 120 kworker/u16:2 28905 120 128 \n", - "8.112435 120 swapper/0 0 120 0 \n", - "8.113456 120 sshd 6692 120 1 \n", - "8.120035 -1 swapper/4 0 120 0 \n", - "8.120064 120 sugov:4 7037 -1 1 \n", - "8.120153 120 swapper/3 0 120 0 \n", - "8.120281 120 rcu_preempt 10 120 128 \n", - "8.127991 120 swapper/3 0 120 0 \n", - "8.128103 120 rcu_preempt 10 120 128 \n", - "8.135938 120 swapper/3 0 120 0 \n", - "8.136048 120 rcu_preempt 10 120 128 \n", - "8.144221 120 swapper/3 0 120 0 \n", - "8.144420 120 rcu_preempt 10 120 128 \n", - "8.189385 120 swapper/1 0 120 0 \n", - "8.189760 120 kworker/u16:2 28905 120 128 \n", - "8.267389 120 swapper/0 0 120 0 \n", - "8.268310 120 swapper/1 0 120 0 \n", - "8.268529 120 kworker/u16:2 28905 120 128 \n", - "8.268806 120 swapper/3 0 120 0 \n", - "8.269021 120 sshd 6692 120 1 \n", - "8.270803 120 sh 6695 120 1 \n", - "8.272511 120 swapper/5 0 120 0 \n", - "8.272923 -1 swapper/4 0 120 0 \n", - "8.273060 120 sugov:4 7037 -1 1 \n", + "9.847429 120 swapper/0 0 120 0 \n", + "9.847512 120 kworker/6:1 5861 120 128 \n", + "9.847570 120 rcu_preempt 10 120 128 \n", + "9.847576 120 kworker/0:1 4743 120 128 \n", + "9.850515 120 swapper/6 0 120 0 \n", + "9.850558 120 rcu_preempt 10 120 128 \n", + "9.858507 120 swapper/6 0 120 0 \n", + "9.858539 120 kworker/6:1 5861 120 128 \n", + "9.858612 120 rcu_preempt 10 120 128 \n", + "9.858633 120 swapper/6 0 120 0 \n", + "9.858664 120 kworker/6:1 5861 120 128 \n", + "9.956654 120 swapper/0 0 120 0 \n", + "9.956745 120 swapper/2 0 120 0 \n", + "9.957013 120 kworker/0:1 4743 120 128 \n", + "9.957064 120 swapper/0 0 120 0 \n", + "9.957156 120 kworker/0:1 4743 120 128 \n", + "9.957491 120 sshd 5862 120 1 \n", + "9.957653 120 swapper/1 0 120 0 \n", + "9.957783 120 kworker/u16:1 4961 120 128 \n", + "9.959781 120 swapper/6 0 120 0 \n", + "9.964075 120 bash 5870 120 1 \n", + "9.964712 120 swapper/2 0 120 0 \n", + "9.968393 120 swapper/6 0 120 0 \n", + "9.968459 120 rcu_preempt 10 120 128 \n", + "9.968687 120 kworker/6:1 5861 120 128 \n", + "9.968710 120 swapper/6 0 120 0 \n", + "9.968783 120 kworker/6:1 5861 120 128 \n", + "9.970022 0 bash 6799 120 256 \n", + "9.970352 120 migration/2 19 0 1 \n", + "9.971991 120 swapper/6 0 120 0 \n", "\n", - "[6604 rows x 11 columns]" + "[18637 rows x 11 columns]" ] }, - "execution_count": 24, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -2136,7 +2031,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -2189,130 +2084,98 @@ " \n", " \n", " \n", - " 1.528502\n", + " 1.548015\n", " <...>\n", - " 5\n", - " 2026\n", - " 7089\n", + " 4\n", + " 2729\n", + " 6505\n", " task_4_1\n", - " 7099\n", + " 6518\n", " 120\n", - " task_1_0\n", - " 7089\n", + " task_6_1\n", + " 6505\n", " 120\n", " 0\n", " \n", " \n", - " 1.551527\n", + " 1.578698\n", " <...>\n", " 5\n", - " 2046\n", - " 7107\n", + " 2759\n", + " 6519\n", " task_4_1\n", - " 7099\n", + " 6518\n", " 120\n", - " task_7_0\n", - " 7107\n", + " task_4_2\n", + " 6519\n", " 120\n", - " 0\n", + " 1\n", " \n", " \n", - " 1.628501\n", + " 1.647798\n", " <...>\n", " 7\n", - " 2125\n", - " 7095\n", + " 2876\n", + " 6524\n", " task_4_1\n", - " 7099\n", + " 6518\n", " 120\n", - " task_3_0\n", - " 7095\n", + " task_2_0\n", + " 6524\n", " 120\n", " 0\n", " \n", " \n", - " 1.663758\n", + " 1.662851\n", " <...>\n", - " 7\n", - " 2151\n", - " 7104\n", + " 4\n", + " 2893\n", + " 6516\n", " task_4_1\n", - " 7099\n", + " 6518\n", " 120\n", " task_6_0\n", - " 7104\n", + " 6516\n", " 120\n", " 1\n", " \n", " \n", - " 1.728769\n", + " 1.747797\n", " <idle>\n", - " 5\n", - " 2456\n", + " 4\n", + " 3300\n", " 0\n", " task_4_1\n", - " 7099\n", + " 6518\n", " 120\n", - " swapper/5\n", + " swapper/4\n", " 0\n", " 120\n", " 0\n", " \n", - " \n", - " 1.728892\n", - " kworker/u16:1\n", - " 5\n", - " 2461\n", - " 6721\n", - " task_4_1\n", - " 7099\n", - " 120\n", - " kworker/u16:1\n", - " 6721\n", - " 120\n", - " 128\n", - " \n", - " \n", - " 1.728944\n", - " kworker/u16:1\n", - " 5\n", - " 2464\n", - " 6721\n", - " task_4_1\n", - " 7099\n", - " 120\n", - " kworker/u16:1\n", - " 6721\n", - " 120\n", - " 128\n", - " \n", " \n", "\n", "" ], "text/plain": [ - " __comm __cpu __line __pid next_comm next_pid next_prio \\\n", - "Time \n", - "1.528502 <...> 5 2026 7089 task_4_1 7099 120 \n", - "1.551527 <...> 5 2046 7107 task_4_1 7099 120 \n", - "1.628501 <...> 7 2125 7095 task_4_1 7099 120 \n", - "1.663758 <...> 7 2151 7104 task_4_1 7099 120 \n", - "1.728769 5 2456 0 task_4_1 7099 120 \n", - "1.728892 kworker/u16:1 5 2461 6721 task_4_1 7099 120 \n", - "1.728944 kworker/u16:1 5 2464 6721 task_4_1 7099 120 \n", + " __comm __cpu __line __pid next_comm next_pid next_prio \\\n", + "Time \n", + "1.548015 <...> 4 2729 6505 task_4_1 6518 120 \n", + "1.578698 <...> 5 2759 6519 task_4_1 6518 120 \n", + "1.647798 <...> 7 2876 6524 task_4_1 6518 120 \n", + "1.662851 <...> 4 2893 6516 task_4_1 6518 120 \n", + "1.747797 4 3300 0 task_4_1 6518 120 \n", "\n", - " prev_comm prev_pid prev_prio prev_state \n", - "Time \n", - "1.528502 task_1_0 7089 120 0 \n", - "1.551527 task_7_0 7107 120 0 \n", - "1.628501 task_3_0 7095 120 0 \n", - "1.663758 task_6_0 7104 120 1 \n", - "1.728769 swapper/5 0 120 0 \n", - "1.728892 kworker/u16:1 6721 120 128 \n", - "1.728944 kworker/u16:1 6721 120 128 " + " prev_comm prev_pid prev_prio prev_state \n", + "Time \n", + "1.548015 task_6_1 6505 120 0 \n", + "1.578698 task_4_2 6519 120 1 \n", + "1.647798 task_2_0 6524 120 0 \n", + "1.662851 task_6_0 6516 120 1 \n", + "1.747797 swapper/4 0 120 0 " ] }, - "execution_count": 25, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -2337,8 +2200,10 @@ }, { "cell_type": "code", - "execution_count": 26, - "metadata": {}, + "execution_count": 22, + "metadata": { + "scrolled": true + }, "outputs": [ { "data": { @@ -2361,8 +2226,8 @@ " \n", " \n", " \n", - " prio\n", " comm\n", + " runtime\n", " \n", " \n", " pid\n", @@ -2372,86 +2237,395 @@ " \n", " \n", " \n", - " 7027\n", - " -1\n", - " sugov:0\n", + " 0\n", + " swapper/6\n", + " 7.431009\n", " \n", " \n", - " 7037\n", - " -1\n", - " sugov:4\n", + " 1\n", + " systemd\n", + " 0.557442\n", " \n", " \n", - " 11\n", - " 0\n", - " migration/0\n", + " 6512\n", + " task_1_0\n", + " 0.361172\n", " \n", " \n", - " 14\n", - " 0\n", - " migration/1\n", + " 6506\n", + " task_2_1\n", + " 0.340199\n", " \n", " \n", - " 19\n", - " 0\n", - " migration/2\n", + " 6520\n", + " task_0_2\n", + " 0.334197\n", " \n", " \n", - " 24\n", - " 0\n", - " migration/3\n", + " 6523\n", + " task_1_2\n", + " 0.328273\n", + " \n", + " \n", + " 6507\n", + " task_0_1\n", + " 0.323451\n", + " \n", + " \n", + " 6515\n", + " task_3_1\n", + " 0.320666\n", + " \n", + " \n", + " 6509\n", + " task_7_0\n", + " 0.301623\n", + " \n", + " \n", + " 6517\n", + " task_7_2\n", + " 0.289213\n", + " \n", + " \n", + " 6522\n", + " task_4_0\n", + " 0.288187\n", + " \n", + " \n", + " 6521\n", + " task_7_1\n", + " 0.278267\n", + " \n", + " \n", + " 6518\n", + " task_4_1\n", + " 0.277630\n", + " \n", + " \n", + " 6519\n", + " task_4_2\n", + " 0.277143\n", + " \n", + " \n", + " 3328\n", + " dbus-daemon\n", + " 0.276851\n", + " \n", + " \n", + " 6508\n", + " task_5_2\n", + " 0.273717\n", + " \n", + " \n", + " 6528\n", + " task_5_1\n", + " 0.264136\n", + " \n", + " \n", + " 6511\n", + " task_0_0\n", + " 0.259624\n", + " \n", + " \n", + " 6505\n", + " task_6_1\n", + " 0.254859\n", + " \n", + " \n", + " 6510\n", + " task_1_1\n", + " 0.254366\n", + " \n", + " \n", + " 6513\n", + " task_6_2\n", + " 0.253368\n", + " \n", + " \n", + " 6516\n", + " task_6_0\n", + " 0.251823\n", + " \n", + " \n", + " 1885\n", + " systemd-journal\n", + " 0.250227\n", + " \n", + " \n", + " 6524\n", + " task_2_0\n", + " 0.246366\n", + " \n", + " \n", + " 6514\n", + " task_3_2\n", + " 0.239275\n", + " \n", + " \n", + " 6526\n", + " task_2_2\n", + " 0.236707\n", + " \n", + " \n", + " 6525\n", + " task_3_0\n", + " 0.219301\n", + " \n", + " \n", + " 6527\n", + " task_5_0\n", + " 0.205909\n", + " \n", + " \n", + " 3324\n", + " systemd-logind\n", + " 0.139381\n", + " \n", + " \n", + " 6697\n", + " sshd\n", + " 0.095332\n", + " \n", + " \n", + " ...\n", + " ...\n", + " ...\n", + " \n", + " \n", + " 5511\n", + " kworker/1:1\n", + " 0.000715\n", + " \n", + " \n", + " 6784\n", + " systemd\n", + " 0.000711\n", + " \n", + " \n", + " 6561\n", + " systemd\n", + " 0.000703\n", + " \n", + " \n", + " 2\n", + " kthreadd\n", + " 0.000685\n", + " \n", + " \n", + " 3304\n", + " in:imklog\n", + " 0.000670\n", + " \n", + " \n", + " 6707\n", + " systemd\n", + " 0.000643\n", + " \n", + " \n", + " 6696\n", + " systemd\n", + " 0.000619\n", + " \n", + " \n", + " 6729\n", + " systemd\n", + " 0.000616\n", + " \n", + " \n", + " 6652\n", + " systemd\n", + " 0.000607\n", + " \n", + " \n", + " 6663\n", + " systemd\n", + " 0.000595\n", + " \n", + " \n", + " 6630\n", + " systemd\n", + " 0.000575\n", + " \n", + " \n", + " 6641\n", + " systemd\n", + " 0.000528\n", + " \n", + " \n", + " 6674\n", + " systemd\n", + " 0.000512\n", + " \n", + " \n", + " 25\n", + " ksoftirqd/3\n", + " 0.000502\n", + " \n", + " \n", + " 6574\n", + " systemd\n", + " 0.000489\n", + " \n", + " \n", + " 3351\n", + " gmain\n", + " 0.000339\n", " \n", " \n", " 29\n", - " 0\n", " migration/4\n", + " 0.000312\n", " \n", " \n", - " 34\n", - " 0\n", - " migration/5\n", + " 5149\n", + " kworker/0:0\n", + " 0.000309\n", + " \n", + " \n", + " 3339\n", + " rtkit-daemon\n", + " 0.000252\n", + " \n", + " \n", + " 6795\n", + " systemd\n", + " 0.000248\n", + " \n", + " \n", + " 5302\n", + " kworker/3:0\n", + " 0.000236\n", + " \n", + " \n", + " 3338\n", + " rtkit-daemon\n", + " 0.000206\n", " \n", " \n", " 39\n", - " 0\n", " migration/6\n", + " 0.000192\n", + " \n", + " \n", + " 1674\n", + " kworker/7:1H\n", + " 0.000187\n", + " \n", + " \n", + " 34\n", + " migration/5\n", + " 0.000184\n", + " \n", + " \n", + " 575\n", + " khugepaged\n", + " 0.000170\n", + " \n", + " \n", + " 44\n", + " migration/7\n", + " 0.000164\n", + " \n", + " \n", + " 20\n", + " ksoftirqd/2\n", + " 0.000127\n", + " \n", + " \n", + " 1851\n", + " kworker/4:1H\n", + " 0.000062\n", " \n", " \n", - " 1599\n", - " 49\n", - " irq/63-tsensor_\n", + " 6483\n", + " trace-cmd\n", + " 0.000000\n", " \n", " \n", "\n", + "

382 rows × 2 columns

\n", "" ], "text/plain": [ - " prio comm\n", - "pid \n", - "7027 -1 sugov:0\n", - "7037 -1 sugov:4\n", - "11 0 migration/0\n", - "14 0 migration/1\n", - "19 0 migration/2\n", - "24 0 migration/3\n", - "29 0 migration/4\n", - "34 0 migration/5\n", - "39 0 migration/6\n", - "1599 49 irq/63-tsensor_" + " comm runtime\n", + "pid \n", + "0 swapper/6 7.431009\n", + "1 systemd 0.557442\n", + "6512 task_1_0 0.361172\n", + "6506 task_2_1 0.340199\n", + "6520 task_0_2 0.334197\n", + "6523 task_1_2 0.328273\n", + "6507 task_0_1 0.323451\n", + "6515 task_3_1 0.320666\n", + "6509 task_7_0 0.301623\n", + "6517 task_7_2 0.289213\n", + "6522 task_4_0 0.288187\n", + "6521 task_7_1 0.278267\n", + "6518 task_4_1 0.277630\n", + "6519 task_4_2 0.277143\n", + "3328 dbus-daemon 0.276851\n", + "6508 task_5_2 0.273717\n", + "6528 task_5_1 0.264136\n", + "6511 task_0_0 0.259624\n", + "6505 task_6_1 0.254859\n", + "6510 task_1_1 0.254366\n", + "6513 task_6_2 0.253368\n", + "6516 task_6_0 0.251823\n", + "1885 systemd-journal 0.250227\n", + "6524 task_2_0 0.246366\n", + "6514 task_3_2 0.239275\n", + "6526 task_2_2 0.236707\n", + "6525 task_3_0 0.219301\n", + "6527 task_5_0 0.205909\n", + "3324 systemd-logind 0.139381\n", + "6697 sshd 0.095332\n", + "... ... ...\n", + "5511 kworker/1:1 0.000715\n", + "6784 systemd 0.000711\n", + "6561 systemd 0.000703\n", + "2 kthreadd 0.000685\n", + "3304 in:imklog 0.000670\n", + "6707 systemd 0.000643\n", + "6696 systemd 0.000619\n", + "6729 systemd 0.000616\n", + "6652 systemd 0.000607\n", + "6663 systemd 0.000595\n", + "6630 systemd 0.000575\n", + "6641 systemd 0.000528\n", + "6674 systemd 0.000512\n", + "25 ksoftirqd/3 0.000502\n", + "6574 systemd 0.000489\n", + "3351 gmain 0.000339\n", + "29 migration/4 0.000312\n", + "5149 kworker/0:0 0.000309\n", + "3339 rtkit-daemon 0.000252\n", + "6795 systemd 0.000248\n", + "5302 kworker/3:0 0.000236\n", + "3338 rtkit-daemon 0.000206\n", + "39 migration/6 0.000192\n", + "1674 kworker/7:1H 0.000187\n", + "34 migration/5 0.000184\n", + "575 khugepaged 0.000170\n", + "44 migration/7 0.000164\n", + "20 ksoftirqd/2 0.000127\n", + "1851 kworker/4:1H 0.000062\n", + "6483 trace-cmd 0.000000\n", + "\n", + "[382 rows x 2 columns]" ] }, - "execution_count": 26, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "trace.analysis.tasks.df_rt_tasks()" + "trace.analysis.tasks.df_tasks_runtime()" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 23, "metadata": { "scrolled": true }, @@ -2477,11 +2651,13 @@ " \n", " \n", " \n", - " target_cpu\n", " cpu\n", + " target_cpu\n", " curr_state\n", - " next_state\n", " delta\n", + " next_state\n", + " curr_state_str\n", + " next_state_str\n", " \n", " \n", " Time\n", @@ -2490,248 +2666,310 @@ " \n", " \n", " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " 0.701949\n", - " 5\n", - " 5\n", + " 0.746533\n", + " 6\n", + " 4\n", + " 512\n", + " 0.000204\n", + " 8192\n", " W\n", " A\n", - " 0.000022\n", " \n", " \n", - " 0.701971\n", + " 0.746737\n", + " 4\n", " -1\n", - " 6\n", + " 8192\n", + " 0.000072\n", + " 2\n", " A\n", " D\n", - " 0.000053\n", " \n", " \n", - " 0.702024\n", + " 0.746809\n", + " 4\n", " -1\n", - " 6\n", + " 2\n", + " 0.000011\n", + " 512\n", " D\n", " W\n", - " 0.000226\n", " \n", " \n", - " 0.702250\n", - " 6\n", + " 0.746820\n", " 5\n", + " 4\n", + " 512\n", + " 0.000004\n", + " 8192\n", " W\n", " A\n", - " 0.000231\n", " \n", " \n", - " 0.702481\n", + " 0.746824\n", + " 4\n", " -1\n", - " 6\n", - " A\n", - " D\n", + " 8192\n", " 0.000020\n", + " 1\n", + " A\n", + " S\n", " \n", " \n", - " 0.702501\n", + " 0.746844\n", + " 4\n", " -1\n", - " 6\n", - " D\n", + " 1\n", + " 0.006621\n", + " 512\n", + " S\n", " W\n", - " 0.000526\n", " \n", " \n", - " 0.703027\n", - " 6\n", - " 6\n", + " 0.753465\n", + " 4\n", + " 4\n", + " 512\n", + " 0.000013\n", + " 8192\n", " W\n", " A\n", - " 0.000021\n", " \n", " \n", - " 0.703048\n", + " 0.753478\n", + " 4\n", " -1\n", - " 6\n", + " 8192\n", + " 0.000013\n", + " 1\n", " A\n", " S\n", - " 0.000019\n", " \n", " \n", - " 0.703067\n", + " 0.753491\n", + " 4\n", " -1\n", - " 6\n", + " 1\n", + " 0.000234\n", + " 512\n", " S\n", " W\n", - " 0.008632\n", " \n", " \n", - " 0.711699\n", - " 6\n", + " 0.753725\n", + " 4\n", " 6\n", + " 512\n", + " 0.000006\n", + " 8192\n", " W\n", " A\n", - " 0.003906\n", " \n", " \n", - " 0.715605\n", - " -1\n", + " 0.753731\n", " 6\n", - " A\n", - " D\n", - " 0.000040\n", - " \n", - " \n", - " 0.715645\n", " -1\n", - " 6\n", - " D\n", - " W\n", - " 0.007947\n", + " 8192\n", + " 0.000028\n", + " 256\n", + " A\n", + " \n", " \n", " \n", - " 0.723592\n", - " 6\n", + " 0.753759\n", " 6\n", - " W\n", + " -1\n", + " 256\n", + " 0.000015\n", + " 8192\n", + " \n", " A\n", - " 0.007938\n", " \n", " \n", - " 0.731530\n", - " -1\n", + " 0.753774\n", " 6\n", + " -1\n", + " 8192\n", + " 0.000065\n", + " 256\n", " A\n", - " R\n", - " 0.007998\n", + " \n", " \n", " \n", - " 0.739528\n", - " -1\n", + " 0.753839\n", " 6\n", - " R\n", + " -1\n", + " 256\n", + " 0.000014\n", + " 8192\n", + " \n", " A\n", - " 0.016000\n", " \n", " \n", - " 0.755528\n", - " -1\n", + " 0.753853\n", " 6\n", + " -1\n", + " 8192\n", + " 0.000014\n", + " 256\n", " A\n", - " R\n", - " 0.008000\n", + " \n", " \n", " \n", - " 0.763528\n", - " -1\n", + " 0.753867\n", " 6\n", - " R\n", + " -1\n", + " 256\n", + " 0.000016\n", + " 8192\n", + " \n", " A\n", - " 0.021965\n", " \n", " \n", - " 0.785493\n", + " 0.753883\n", + " 6\n", " -1\n", + " 8192\n", + " 0.000077\n", " 2\n", " A\n", - " S\n", - " 0.009657\n", + " D\n", " \n", " \n", - " 0.795150\n", + " 0.753960\n", + " 6\n", " -1\n", " 2\n", - " S\n", + " 0.002421\n", + " 512\n", + " D\n", " W\n", - " 0.006005\n", " \n", " \n", - " 0.801155\n", - " 3\n", - " 2\n", + " 0.756381\n", + " 6\n", + " 6\n", + " 512\n", + " 0.000073\n", + " 8192\n", " W\n", " A\n", - " 0.000222\n", " \n", " \n", - " 0.801377\n", + " 0.756454\n", + " 1\n", " -1\n", - " 3\n", + " 8192\n", + " 0.000241\n", + " 2\n", " A\n", - " R\n", - " 0.030167\n", + " D\n", " \n", " \n", - " 0.831544\n", + " 0.756695\n", + " 1\n", " -1\n", - " 3\n", - " R\n", + " 2\n", + " 0.009881\n", + " 512\n", + " D\n", + " W\n", + " \n", + " \n", + " 0.766576\n", + " 1\n", + " 1\n", + " 512\n", + " 0.000034\n", + " 8192\n", + " W\n", " A\n", - " 0.024000\n", " \n", " \n", - " 0.855544\n", + " 0.766610\n", + " 1\n", " -1\n", - " 3\n", + " 8192\n", + " 0.000070\n", + " 2\n", " A\n", - " S\n", - " 0.014980\n", + " D\n", " \n", " \n", - " 0.870524\n", + " 0.766680\n", + " 1\n", " -1\n", - " 3\n", - " S\n", + " 2\n", + " 0.015285\n", + " 512\n", + " D\n", " W\n", - " 0.030369\n", " \n", " \n", - " 0.900893\n", - " 3\n", - " 3\n", + " 0.781965\n", + " 1\n", + " 1\n", + " 512\n", + " 0.000011\n", + " 8192\n", " W\n", " A\n", - " 0.000010\n", " \n", " \n", - " 0.900903\n", + " 0.781976\n", + " 1\n", " -1\n", - " 3\n", + " 8192\n", + " 0.000171\n", + " 2\n", " A\n", - " R\n", - " 0.002095\n", + " D\n", " \n", " \n", - " 0.902998\n", + " 0.782147\n", + " 1\n", " -1\n", - " 3\n", - " R\n", - " A\n", - " 0.028544\n", + " 2\n", + " 0.036152\n", + " 512\n", + " D\n", + " W\n", " \n", " \n", - " 0.931542\n", - " -1\n", - " 3\n", + " 0.818299\n", + " 6\n", + " 6\n", + " 512\n", + " 0.000003\n", + " 8192\n", + " W\n", " A\n", - " R\n", - " 0.008000\n", " \n", " \n", - " 0.939542\n", + " 0.818302\n", + " 6\n", " -1\n", - " 3\n", - " R\n", + " 8192\n", + " 0.015907\n", + " 0\n", " A\n", - " 0.024001\n", + " R\n", " \n", " \n", - " 0.963543\n", + " 0.834209\n", + " 6\n", " -1\n", - " 3\n", - " A\n", + " 0\n", + " 0.004472\n", + " 8192\n", " R\n", - " 0.007999\n", + " A\n", " \n", " \n", " ...\n", @@ -2740,321 +2978,447 @@ " ...\n", " ...\n", " ...\n", + " ...\n", + " ...\n", " \n", " \n", - " 1.243530\n", + " 1.274207\n", + " 5\n", " -1\n", - " 6\n", + " 0\n", + " 0.007318\n", + " 8192\n", " R\n", " A\n", - " 0.000588\n", " \n", " \n", - " 1.244118\n", + " 1.281525\n", + " 5\n", " -1\n", - " 4\n", + " 8192\n", + " 0.000627\n", + " 0\n", " A\n", - " S\n", - " 0.007059\n", + " R\n", " \n", " \n", - " 1.251177\n", + " 1.282152\n", + " 5\n", " -1\n", - " 4\n", - " S\n", - " W\n", - " 0.077320\n", - " \n", - " \n", - " 1.328497\n", - " 7\n", - " 4\n", - " W\n", + " 0\n", + " 0.006452\n", + " 8192\n", + " R\n", " A\n", - " 0.000002\n", " \n", " \n", - " 1.328499\n", + " 1.288604\n", + " 4\n", " -1\n", - " 7\n", + " 8192\n", + " 0.000014\n", + " 0\n", " A\n", " R\n", - " 0.007400\n", " \n", " \n", - " 1.335899\n", + " 1.288618\n", + " 4\n", " -1\n", - " 7\n", + " 0\n", + " 0.000014\n", + " 8192\n", " R\n", " A\n", - " 0.015629\n", " \n", " \n", - " 1.351528\n", + " 1.288632\n", + " 4\n", " -1\n", - " 7\n", + " 8192\n", + " 0.004827\n", + " 1\n", " A\n", " S\n", - " 0.015692\n", " \n", " \n", - " 1.367220\n", + " 1.293459\n", + " 4\n", " -1\n", - " 7\n", + " 1\n", + " 0.054343\n", + " 512\n", " S\n", " W\n", - " 0.061275\n", " \n", " \n", - " 1.428495\n", - " 7\n", - " 7\n", + " 1.347802\n", + " 4\n", + " 5\n", + " 512\n", + " 0.000004\n", + " 8192\n", " W\n", " A\n", - " 0.000005\n", " \n", " \n", - " 1.428500\n", + " 1.347806\n", + " 5\n", " -1\n", - " 7\n", + " 8192\n", + " 0.010400\n", + " 0\n", " A\n", " R\n", - " 0.015030\n", " \n", " \n", - " 1.443530\n", + " 1.358206\n", + " 5\n", " -1\n", - " 7\n", + " 0\n", + " 0.024000\n", + " 8192\n", " R\n", " A\n", - " 0.016000\n", " \n", " \n", - " 1.459530\n", + " 1.382206\n", + " 5\n", " -1\n", - " 7\n", + " 8192\n", + " 0.010912\n", + " 1\n", " A\n", " S\n", - " 0.008351\n", " \n", " \n", - " 1.467881\n", + " 1.393118\n", + " 5\n", " -1\n", - " 7\n", + " 1\n", + " 0.054688\n", + " 512\n", " S\n", " W\n", - " 0.060617\n", " \n", " \n", - " 1.528498\n", + " 1.447806\n", " 5\n", " 7\n", + " 512\n", + " 0.014401\n", + " 8192\n", " W\n", " A\n", - " 0.000004\n", " \n", " \n", - " 1.528502\n", + " 1.462207\n", + " 7\n", " -1\n", - " 5\n", + " 8192\n", + " 0.012545\n", + " 0\n", " A\n", " R\n", - " 0.007398\n", " \n", " \n", - " 1.535900\n", + " 1.474752\n", + " 7\n", " -1\n", - " 5\n", + " 0\n", + " 0.015480\n", + " 8192\n", " R\n", " A\n", - " 0.015627\n", " \n", " \n", - " 1.551527\n", + " 1.490232\n", + " 7\n", " -1\n", - " 5\n", + " 8192\n", + " 0.007931\n", + " 1\n", " A\n", " S\n", - " 0.016516\n", " \n", " \n", - " 1.568043\n", + " 1.498163\n", + " 7\n", " -1\n", - " 5\n", + " 1\n", + " 0.049849\n", + " 512\n", " S\n", " W\n", - " 0.060455\n", " \n", " \n", - " 1.628498\n", + " 1.548012\n", " 7\n", - " 5\n", + " 4\n", + " 512\n", + " 0.000003\n", + " 8192\n", " W\n", " A\n", - " 0.000003\n", " \n", " \n", - " 1.628501\n", + " 1.548015\n", + " 4\n", " -1\n", - " 7\n", + " 8192\n", + " 0.010203\n", + " 0\n", " A\n", " R\n", - " 0.015028\n", " \n", " \n", - " 1.643529\n", + " 1.558218\n", + " 4\n", " -1\n", - " 7\n", + " 0\n", + " 0.020480\n", + " 8192\n", " R\n", " A\n", - " 0.020229\n", " \n", " \n", - " 1.663758\n", + " 1.578698\n", + " 5\n", " -1\n", - " 7\n", + " 8192\n", + " 0.010314\n", + " 1\n", " A\n", " S\n", - " 0.009217\n", " \n", " \n", - " 1.672975\n", + " 1.589012\n", + " 5\n", " -1\n", - " 7\n", + " 1\n", + " 0.058783\n", + " 512\n", " S\n", " W\n", - " 0.055545\n", " \n", " \n", - " 1.728520\n", + " 1.647795\n", " 5\n", " 7\n", + " 512\n", + " 0.000003\n", + " 8192\n", " W\n", " A\n", - " 0.000249\n", " \n", " \n", - " 1.728769\n", + " 1.647798\n", + " 7\n", " -1\n", - " 5\n", + " 8192\n", + " 0.014406\n", + " 0\n", " A\n", - " \n", - " 0.000086\n", + " R\n", " \n", " \n", - " 1.728855\n", + " 1.662204\n", + " 7\n", " -1\n", - " 5\n", - " \n", + " 0\n", + " 0.000647\n", + " 8192\n", + " R\n", " A\n", - " 0.000037\n", " \n", " \n", - " 1.728892\n", + " 1.662851\n", + " 4\n", " -1\n", - " 5\n", + " 8192\n", + " 0.006092\n", + " 1\n", " A\n", - " \n", - " 0.000031\n", + " S\n", " \n", " \n", - " 1.728923\n", + " 1.668943\n", + " 4\n", " -1\n", - " 5\n", - " \n", + " 1\n", + " 0.078849\n", + " 512\n", + " S\n", + " W\n", + " \n", + " \n", + " 1.747792\n", + " 4\n", + " 4\n", + " 512\n", + " 0.000005\n", + " 8192\n", + " W\n", " A\n", - " 0.000021\n", " \n", " \n", - " 1.728944\n", + " 1.747797\n", + " 4\n", " -1\n", - " 5\n", + " 8192\n", + " 0.000145\n", + " 16\n", " A\n", " X\n", - " 0.000230\n", " \n", " \n", - " 1.729174\n", + " 1.747942\n", + " 4\n", " -1\n", - " 5\n", + " 16\n", + " 8.224049\n", + " 16\n", " X\n", " X\n", - " 6.543886\n", " \n", " \n", "\n", - "

74 rows × 5 columns

\n", + "

95 rows × 7 columns

\n", "" ], "text/plain": [ - " target_cpu cpu curr_state next_state delta\n", - "Time \n", - "0.701949 5 5 W A 0.000022\n", - "0.701971 -1 6 A D 0.000053\n", - "0.702024 -1 6 D W 0.000226\n", - "0.702250 6 5 W A 0.000231\n", - "0.702481 -1 6 A D 0.000020\n", - "0.702501 -1 6 D W 0.000526\n", - "0.703027 6 6 W A 0.000021\n", - "0.703048 -1 6 A S 0.000019\n", - "0.703067 -1 6 S W 0.008632\n", - "0.711699 6 6 W A 0.003906\n", - "0.715605 -1 6 A D 0.000040\n", - "0.715645 -1 6 D W 0.007947\n", - "0.723592 6 6 W A 0.007938\n", - "0.731530 -1 6 A R 0.007998\n", - "0.739528 -1 6 R A 0.016000\n", - "0.755528 -1 6 A R 0.008000\n", - "0.763528 -1 6 R A 0.021965\n", - "0.785493 -1 2 A S 0.009657\n", - "0.795150 -1 2 S W 0.006005\n", - "0.801155 3 2 W A 0.000222\n", - "0.801377 -1 3 A R 0.030167\n", - "0.831544 -1 3 R A 0.024000\n", - "0.855544 -1 3 A S 0.014980\n", - "0.870524 -1 3 S W 0.030369\n", - "0.900893 3 3 W A 0.000010\n", - "0.900903 -1 3 A R 0.002095\n", - "0.902998 -1 3 R A 0.028544\n", - "0.931542 -1 3 A R 0.008000\n", - "0.939542 -1 3 R A 0.024001\n", - "0.963543 -1 3 A R 0.007999\n", - "... ... ... ... ... ...\n", - "1.243530 -1 6 R A 0.000588\n", - "1.244118 -1 4 A S 0.007059\n", - "1.251177 -1 4 S W 0.077320\n", - "1.328497 7 4 W A 0.000002\n", - "1.328499 -1 7 A R 0.007400\n", - "1.335899 -1 7 R A 0.015629\n", - "1.351528 -1 7 A S 0.015692\n", - "1.367220 -1 7 S W 0.061275\n", - "1.428495 7 7 W A 0.000005\n", - "1.428500 -1 7 A R 0.015030\n", - "1.443530 -1 7 R A 0.016000\n", - "1.459530 -1 7 A S 0.008351\n", - "1.467881 -1 7 S W 0.060617\n", - "1.528498 5 7 W A 0.000004\n", - "1.528502 -1 5 A R 0.007398\n", - "1.535900 -1 5 R A 0.015627\n", - "1.551527 -1 5 A S 0.016516\n", - "1.568043 -1 5 S W 0.060455\n", - "1.628498 7 5 W A 0.000003\n", - "1.628501 -1 7 A R 0.015028\n", - "1.643529 -1 7 R A 0.020229\n", - "1.663758 -1 7 A S 0.009217\n", - "1.672975 -1 7 S W 0.055545\n", - "1.728520 5 7 W A 0.000249\n", - "1.728769 -1 5 A 0.000086\n", - "1.728855 -1 5 A 0.000037\n", - "1.728892 -1 5 A 0.000031\n", - "1.728923 -1 5 A 0.000021\n", - "1.728944 -1 5 A X 0.000230\n", - "1.729174 -1 5 X X 6.543886\n", + " cpu target_cpu curr_state delta next_state curr_state_str \\\n", + "Time \n", + "0.746533 6 4 512 0.000204 8192 W \n", + "0.746737 4 -1 8192 0.000072 2 A \n", + "0.746809 4 -1 2 0.000011 512 D \n", + "0.746820 5 4 512 0.000004 8192 W \n", + "0.746824 4 -1 8192 0.000020 1 A \n", + "0.746844 4 -1 1 0.006621 512 S \n", + "0.753465 4 4 512 0.000013 8192 W \n", + "0.753478 4 -1 8192 0.000013 1 A \n", + "0.753491 4 -1 1 0.000234 512 S \n", + "0.753725 4 6 512 0.000006 8192 W \n", + "0.753731 6 -1 8192 0.000028 256 A \n", + "0.753759 6 -1 256 0.000015 8192 \n", + "0.753774 6 -1 8192 0.000065 256 A \n", + "0.753839 6 -1 256 0.000014 8192 \n", + "0.753853 6 -1 8192 0.000014 256 A \n", + "0.753867 6 -1 256 0.000016 8192 \n", + "0.753883 6 -1 8192 0.000077 2 A \n", + "0.753960 6 -1 2 0.002421 512 D \n", + "0.756381 6 6 512 0.000073 8192 W \n", + "0.756454 1 -1 8192 0.000241 2 A \n", + "0.756695 1 -1 2 0.009881 512 D \n", + "0.766576 1 1 512 0.000034 8192 W \n", + "0.766610 1 -1 8192 0.000070 2 A \n", + "0.766680 1 -1 2 0.015285 512 D \n", + "0.781965 1 1 512 0.000011 8192 W \n", + "0.781976 1 -1 8192 0.000171 2 A \n", + "0.782147 1 -1 2 0.036152 512 D \n", + "0.818299 6 6 512 0.000003 8192 W \n", + "0.818302 6 -1 8192 0.015907 0 A \n", + "0.834209 6 -1 0 0.004472 8192 R \n", + "... ... ... ... ... ... ... \n", + "1.274207 5 -1 0 0.007318 8192 R \n", + "1.281525 5 -1 8192 0.000627 0 A \n", + "1.282152 5 -1 0 0.006452 8192 R \n", + "1.288604 4 -1 8192 0.000014 0 A \n", + "1.288618 4 -1 0 0.000014 8192 R \n", + "1.288632 4 -1 8192 0.004827 1 A \n", + "1.293459 4 -1 1 0.054343 512 S \n", + "1.347802 4 5 512 0.000004 8192 W \n", + "1.347806 5 -1 8192 0.010400 0 A \n", + "1.358206 5 -1 0 0.024000 8192 R \n", + "1.382206 5 -1 8192 0.010912 1 A \n", + "1.393118 5 -1 1 0.054688 512 S \n", + "1.447806 5 7 512 0.014401 8192 W \n", + "1.462207 7 -1 8192 0.012545 0 A \n", + "1.474752 7 -1 0 0.015480 8192 R \n", + "1.490232 7 -1 8192 0.007931 1 A \n", + "1.498163 7 -1 1 0.049849 512 S \n", + "1.548012 7 4 512 0.000003 8192 W \n", + "1.548015 4 -1 8192 0.010203 0 A \n", + "1.558218 4 -1 0 0.020480 8192 R \n", + "1.578698 5 -1 8192 0.010314 1 A \n", + "1.589012 5 -1 1 0.058783 512 S \n", + "1.647795 5 7 512 0.000003 8192 W \n", + "1.647798 7 -1 8192 0.014406 0 A \n", + "1.662204 7 -1 0 0.000647 8192 R \n", + "1.662851 4 -1 8192 0.006092 1 A \n", + "1.668943 4 -1 1 0.078849 512 S \n", + "1.747792 4 4 512 0.000005 8192 W \n", + "1.747797 4 -1 8192 0.000145 16 A \n", + "1.747942 4 -1 16 8.224049 16 X \n", "\n", - "[74 rows x 5 columns]" + " next_state_str \n", + "Time \n", + "0.746533 A \n", + "0.746737 D \n", + "0.746809 W \n", + "0.746820 A \n", + "0.746824 S \n", + "0.746844 W \n", + "0.753465 A \n", + "0.753478 S \n", + "0.753491 W \n", + "0.753725 A \n", + "0.753731 \n", + "0.753759 A \n", + "0.753774 \n", + "0.753839 A \n", + "0.753853 \n", + "0.753867 A \n", + "0.753883 D \n", + "0.753960 W \n", + "0.756381 A \n", + "0.756454 D \n", + "0.756695 W \n", + "0.766576 A \n", + "0.766610 D \n", + "0.766680 W \n", + "0.781965 A \n", + "0.781976 D \n", + "0.782147 W \n", + "0.818299 A \n", + "0.818302 R \n", + "0.834209 A \n", + "... ... \n", + "1.274207 A \n", + "1.281525 R \n", + "1.282152 A \n", + "1.288604 R \n", + "1.288618 A \n", + "1.288632 S \n", + "1.293459 W \n", + "1.347802 A \n", + "1.347806 R \n", + "1.358206 A \n", + "1.382206 S \n", + "1.393118 W \n", + "1.447806 A \n", + "1.462207 R \n", + "1.474752 A \n", + "1.490232 S \n", + "1.498163 W \n", + "1.548012 A \n", + "1.548015 R \n", + "1.558218 A \n", + "1.578698 S \n", + "1.589012 W \n", + "1.647795 A \n", + "1.647798 R \n", + "1.662204 A \n", + "1.662851 S \n", + "1.668943 W \n", + "1.747792 A \n", + "1.747797 X \n", + "1.747942 X \n", + "\n", + "[95 rows x 7 columns]" ] }, - "execution_count": 27, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -3066,7 +3430,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -3075,7 +3439,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 25, "metadata": {}, "outputs": [ { @@ -3099,11 +3463,13 @@ " \n", " \n", " \n", - " target_cpu\n", " cpu\n", + " target_cpu\n", " curr_state\n", - " next_state\n", " delta\n", + " next_state\n", + " curr_state_str\n", + " next_state_str\n", " \n", " \n", " Time\n", @@ -3112,61 +3478,114 @@ " \n", " \n", " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " 1.051543\n", + " 1.018229\n", + " 3\n", + " -1\n", + " 8192\n", + " 0.015539\n", + " 1\n", + " A\n", + " S\n", + " \n", + " \n", + " 1.054309\n", + " 3\n", " -1\n", - " 2\n", + " 8192\n", + " 0.007927\n", + " 0\n", " A\n", " R\n", - " 0.011999\n", " \n", " \n", - " 1.079541\n", + " 1.082624\n", + " 3\n", " -1\n", - " 2\n", + " 8192\n", + " 0.011606\n", + " 0\n", " A\n", " R\n", - " 0.020267\n", " \n", " \n", - " 1.122482\n", + " 1.110236\n", + " 3\n", " -1\n", - " 5\n", + " 8192\n", + " 0.016008\n", + " 0\n", " A\n", " R\n", - " 0.013419\n", " \n", " \n", - " 1.143925\n", + " 1.126274\n", + " 3\n", " -1\n", - " 6\n", + " 8192\n", + " 0.005738\n", + " 1\n", " A\n", " S\n", - " 0.014116\n", + " \n", + " \n", + " 1.178706\n", + " 5\n", + " -1\n", + " 8192\n", + " 0.003450\n", + " 0\n", + " A\n", + " R\n", + " \n", + " \n", + " 1.194208\n", + " 5\n", + " -1\n", + " 8192\n", + " 0.016000\n", + " 0\n", + " A\n", + " R\n", " \n", " \n", "\n", "" ], "text/plain": [ - " target_cpu cpu curr_state next_state delta\n", - "Time \n", - "1.051543 -1 2 A R 0.011999\n", - "1.079541 -1 2 A R 0.020267\n", - "1.122482 -1 5 A R 0.013419\n", - "1.143925 -1 6 A S 0.014116" + " cpu target_cpu curr_state delta next_state curr_state_str \\\n", + "Time \n", + "1.018229 3 -1 8192 0.015539 1 A \n", + "1.054309 3 -1 8192 0.007927 0 A \n", + "1.082624 3 -1 8192 0.011606 0 A \n", + "1.110236 3 -1 8192 0.016008 0 A \n", + "1.126274 3 -1 8192 0.005738 1 A \n", + "1.178706 5 -1 8192 0.003450 0 A \n", + "1.194208 5 -1 8192 0.016000 0 A \n", + "\n", + " next_state_str \n", + "Time \n", + "1.018229 S \n", + "1.054309 R \n", + "1.082624 R \n", + "1.110236 R \n", + "1.126274 S \n", + "1.178706 R \n", + "1.194208 R " ] }, - "execution_count": 29, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df[df.curr_state == TaskState.TASK_ACTIVE.char][1:1.2]" + "df[df.curr_state == TaskState.TASK_ACTIVE][1:1.2]" ] }, { @@ -3178,22 +3597,22 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 30, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABIgAAAJPCAYAAAAXEe/1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3X+05XV93/vXWwhgHfEH6lREA4kW16S23jCCttYO2gqkidgWvYAaJ9VL7rU0914bbydpLiiapqZJbI20lUaLP5KOxsQWGxJiYscYr1jEGJUgLRKVURMjYnA0oMj7/rH3sLaHGfYR+Z59hs/jsdZZs/d3f797v8/JZ+3gc333d1d3BwAAAIBx3W/VAwAAAACwWgIRAAAAwOAEIgAAAIDBCUQAAAAAgxOIAAAAAAYnEAEAAAAMTiACAFauqh5TVfuq6rCDPP7yqnrrRs91T1XVq6rqi1X1JxO/zqVV9aopX2O9NtMsAMC3TyACgPuYqjq3qj40Dy6fr6rfrKqnzh97eVV9Y/7Yl6vq/6uqpyw8dpcIU1VdVY+dcubu/kx3b+nub075Ohuhqh6T5J8m2dbdf/kAj++oqr0rmGvP/LVfXlUvX+Usa1XVEVV17XpnqapLquq6qrqjqnaueezl858dVbVninkB4L5IIAKA+5CqemmSf53kXyTZmuQxSf5tkjMXdntbd29J8vAkv5/k16uq7oXXPvw7fY77iMckuam7v7DqQQ4hL0vyZ9/G/n+Y5CVJPjzNOAAwHoEIAO4jqupBSS5K8o+7+9e7+6vd/Y3ufld3v2zt/t39jSRvSvKXkxxzD1/zU1X1z6rqo0m+WlWHV9WxVfVrVfVnVfXHVfVjC/ufPD+76Zaq+tOq+oX59uPnZyodPr9/QlW9t6q+UlXvTvKwNa/75PnZT1+uqj+sqh0Lj+2pqldW1fvnx/92VT1s4fGnLhx7Y1XtrKonzec5bGG/f1BVf3iwv3VVvXn+O366qn6qqu5XVX8nybuTHDs/S+vSNcc9IMlvLjy+b/73OrmqPjCf6fNV9bqqOmJ+TFXVa6rqC/O/28eq6q8eYKYHVtV/q6rXrif4bZZZquqEJM9P8jPLZt6vuy/u7t9Ncut6jwEA7p5ABAD3HU9JclSSd65n56o6MsnOJDd29xe/g9c9J8nfS/LgJHckeVdmZ3g8KskzkvxfVXXafN9/k+TfdPfRSb43ydsP8py/kuTqzMLQK5O8cGHuRyX5jSSvSvLQJD+e5Neq6uELx5+b5EeSPCLJEfN9UlXfnVkU+cXMzqB6YpKPdPdVSW5K8syF53hBkjcfZL5fTPKgJN+T5G8n+eEkP9Ldv5PkjCSfm39kbufiQd391TWPb+nuzyX5ZpL/e/77PmX+d3vJ/LBnJnlakr8yf83nzme9U1Udk+R3k7y/u3+su3vtwN29o7v3dPfL5z8rm+UAf8ufTPIXS/Zbl4Xfb09377g3nhMARiAQAcB9xzFJvtjdty/Z77lV9eUkNyY5Kcnf/w5f97XdfWN3/0WSJyV5eHdf1N1f7+4bkvyHJGfP9/1GksdW1cO6e193X7n2yWp2DZ8nJfl/u/u27v69zKLTfs9Pcnl3X97dd3T3u5N8KMkPLOzzH7v7f8xnentmISiZhaPf6e7/ND+76qbu/sj8sTfNnztV9dAkp2UWqtbOd9j89/mJ7v5Kd38qyc9nFpTuke6+uruv7O7b58/3+szCUzL7mz0wyeOTVHdf292fXzj82CTvTfKr3f1T93SGVcxSVX8/yWHdva6oCQBMRyACgPuOm5I8bB3XAnp7dz+4ux/R3U/v7qvn229P8l2LO1bV/vvfuJvnu3Hh9ndn9pGlL+//yezskK3zx1+U2dknn6iqq6rqBw/wfMcmuXl+hst+n17zGs9Z8xpPTfLIhX0Wvz3sa0m2zG8/OsknD/J7vDXJD80/evXcJO9bEz/2e1hmf6fFmT6d2RlT90hV/ZWq+q9V9SdVdUtm15B6WJJ093uSvC7JxUm+ULMLNB+9cPjfS3L/JP/+nr7+KmaZ/51/NsmPLdsXAJieQAQA9x0fSHJbkmffw+M/k+T4NdtOyCwcffZujlv8CNGNSf54HqD2/zywu38gSbr7f3b3OZl99OvVSd4xDwWLPp/kIWu2P2bNa7xlzWs8oLv/5Tp+xxsz+2jbXX+J7s9m9jf8B5mdDfSWgzzHFzMLZt+9Zr67+xt9y0sdYNu/S/KJJI+bf/zuJ5Pcee2e7n5td5+UZFtmgW3xmlL/IclvJbn8AH/LzTzL4zJbb++rqj9J8utJHjkPU8d/m78HAPAdEogA4D6iu/88yQVJLq6qZ1fVX6qq76qqM6rqZ9fxFL+V5PFV9YL5cQ/N7OyRX1vHx9b2++9JvlKzC1ffv6oOq6q/WlVPSpKqen5VPby770jy5fkxd6z5PT6d2UfGXlGzrz9/apIfWthl/5k+p82f/6iafaX5ceuY75eT/J2qem7NLqh9TFU9ceHxNyf5f5I8IbNgcRfd/c3MPrb20/OLMX93kpfO51qPP01yTM0uKr7fA5PckmRfVT0+yf+x/4GaXUD7lPnZXF/N7MLM3/I3S3J+kuuSvKuq7r/OOVY9y8czO6PrifOfF8/neWK+9ay0u5ivi6MyC1ffNV8D/rsWAL4D/h8pANyHdPfPZxYrfiqzrw2/MbP/wf6f13HsFzK7aPGPJvlCZv8D/stZCATreI5vJvnBzP5H/h9ndrbNL2V2QeMkOT3JNVW1L7MLVp89v07QWucmOSXJl5JcmIWLRXf3jUnOzOzMlv2/48uyjv+u6e7PZHaton86f+6PJPnrC7u8M7Mzg97Z3V+7m6f6J5kFkhuS/H5m1yp647LXn8/wiST/KckN84/IHZvZRbTPTfKVzM7CedvCIUfPt92c2UfZbkryr9Y8Zyc5L8neJP9lHk829Szzaxz9yf6fzP7vccf8/jeXjP7bmV3U+m8kuWR++2nr+Z0BgAOr5V8sAQAwjqr6ZJIfnX8jGQDAEJxBBAAwV1X/MLPr8rxn1bMAAGwkgQgAIElV7cnsAs3/eH6NJO4FVXVNVe07wM/z7uaY5x3kmGs2cnYAGImPmAEAAAAMzhlEAAAAAIMTiAAAAAAGd/iqB7i3POxhD+vjjz9+1WNsKl/96lfzgAc8YNVjsMlZJyxjjbAe1gnLWCMsY42wHtYJy1gjd3X11Vd/sbsfvmy/+0wgOv744/OhD31o1WNsKnv27MmOHTtWPQabnHXCMtYI62GdsIw1wjLWCOthnbCMNXJXVfXp9eznI2YAAAAAgxOIAAAAAAYnEAEAAAAMTiACAAAAGJxABAAAADC4SQNRVZ1eVddV1fVVtesAjz+tqj5cVbdX1VkHePzoqtpbVa+bck4AAACAkU0WiKrqsCQXJzkjybYk51TVtjW7fSbJziS/cpCneWWS35tqRgAAAACmPYPo5CTXd/cN3f31JLuTnLm4Q3d/qrs/muSOtQdX1UlJtib57QlnBAAAABjelIHoUUluXLi/d75tqaq6X5KfT/LjE8wFAAAAwILDVz3AQbwkyeXdvbeqDrpTVZ2X5Lwk2bp1a/bs2bMx0x0i9u3b52/CUtYJy1gjrId1wjLWCMtYI6yHdcIy1sg9N2Ug+mySRy/cP26+bT2ekuRvVdVLkmxJckRV7evub7nQdXdfkuSSJNm+fXvv2LHjOx76vmTPnj3xN2EZ64RlrBHWwzphGWuEZawR1sM6YRlr5J6bMhBdleRxVXVCZmHo7CTnrufA7n7e/ttVtTPJ9rVxCAAAAIB7x2TXIOru25Ocn+SKJNcmeXt3X1NVF1XVs5Kkqp5UVXuTPCfJ66vqmqnmAQAAAODAJr0GUXdfnuTyNdsuWLh9VWYfPbu757g0yaUTjAcAAABApv0WMwAAAAAOAQIRAAAAwOAEIgAAAIDBCUQAAAAAgxOIAAAAAAYnEAEAAAAMTiACAAAAGJxABAAAADA4gQgAAABgcIevegAA4J558oVXrHqEO+088bbs2gTzXPmK01Y9AgDAIckZRAAAAACDE4gAAAAABicQAQAAAAxOIAIAAAAYnEAEAAAAMDiBCAAAAGBwAhEAAADA4AQiAAAAgMEJRAAAAACDE4gAAAAABicQAQAAAAxOIAIAAAAYnEAEAAAAMDiBCAAAAGBwAhEAAADA4AQiAAAAgMEJRAAAAACDE4gAAAAABicQAQAAAAxOIAIAAAAYnEAEAAAAMDiBCAAAAGBwAhEAAADA4AQiAAAAgMEJRAAAAACDE4gAAAAABicQAQAAAAxOIAIAAAAYnEAEAAAAMDiBCAAAAGBwAhEAAADA4AQiAAAAgMEJRAAAAACDE4gAAAAABicQAQAAAAxOIAIAAAAYnEAEAAAAMDiBCAAAAGBwAhEAAADA4AQiAAAAgMEJRAAAAACDE4gAAAAABicQAQAAAAxOIAIAAAAYnEAEAAAAMDiBCAAAAGBwAhEAAADA4AQiAAAAgMEJRAAAAACDE4gAAAAABicQAQAAAAxOIAIAAAAYnEAEAAAAMDiBCAAAAGBwAhEAAADA4CYNRFV1elVdV1XXV9WuAzz+tKr6cFXdXlVnLWx/YlV9oKquqaqPVtX/OuWcAAAAACObLBBV1WFJLk5yRpJtSc6pqm1rdvtMkp1JfmXN9q8l+eHu/r4kpyf511X14KlmBQAAABjZ4RM+98lJru/uG5KkqnYnOTPJH+3fobs/NX/sjsUDu/t/LNz+XFV9IcnDk3x5wnkBAAAAhjTlR8weleTGhft759u+LVV1cpIjknzyXpoLAAAAgAXV3dM88eyaQqd394vn91+Q5JTuPv8A+16a5L929zvWbH9kkj1JXtjdVx7guPOSnJckW7duPWn37t339q9xSNu3b1+2bNmy6jHY5KwTlrFGNq9PfO6WVY9wp2OO6tx0a616jDz+2KNXPQIH4b2EZawR1sM6YRlr5K5OPfXUq7t7+7L9pvyI2WeTPHrh/nHzbetSVUcn+Y0k//xAcShJuvuSJJckyfbt23vHjh33eNj7oj179sTfhGWsE5axRjavXRdeseoR7rTzxNty6XVHrnqMXHnujlWPwEF4L2EZa4T1sE5Yxhq556b8iNlVSR5XVSdU1RFJzk5y2XoOnO//ziRvXntWEQAAAAD3rskCUXffnuT8JFckuTbJ27v7mqq6qKqelSRV9aSq2pvkOUleX1XXzA9/bpKnJdlZVR+Z/zxxqlkBAAAARjblR8zS3ZcnuXzNtgsWbl+V2UfP1h731iRvnXI2AAAAAGam/IgZAAAAAIcAgQgAAABgcAIRAAAAwOAEIgAAAIDBCUQAAAAAgxOIAAAAAAYnEAEAAAAMTiACAAAAGJxABAAAADA4gQgAAABgcAIRAAAAwOAEIgAAAIDBCUQAAAAAgxOIAAAAAAYnEAEAAAAMTiACAAAAGJxABAAAADA4gQgAAABgcAIRAAAAwOAEIgAAAIDBCUQAAAAAgxOIAAAAAAYnEAEAAAAMTiACAAAAGJxABAAAADA4gQgAAABgcAIRAAAAwOAEIgAAAIDBCUQAAAAAgxOIAAAAAAYnEAEAAAAMTiACAAAAGJxABAAAADA4gQgAAABgcAIRAAAAwOAEIgAAAIDBCUQAAAAAgxOIAAAAAAYnEAEAAAAMTiACAAAAGJxABAAAADA4gQgAAABgcAIRAAAAwOAEIgAAAIDBCUQAAAAAgxOIAAAAAAYnEAEAAAAMTiACAAAAGJxABAAAADA4gQgAAABgcAIRAAAAwOAEIgAAAIDBCUQAAAAAgxOIAAAAAAYnEAEAAAAMTiACAAAAGJxABAAAADA4gQgAAABgcAIRAAAAwOAEIgAAAIDBCUQAAAAAgxOIAAAAAAYnEAEAAAAMTiACAAAAGJxABAAAADA4gQgAAABgcJMGoqo6vaquq6rrq2rXAR5/WlV9uKpur6qz1jz2wqr6n/OfF045JwAAAMDIJgtEVXVYkouTnJFkW5Jzqmrbmt0+k2Rnkl9Zc+xDk1yY5JQkJye5sKoeMtWsAAAAACOb8gyik5Nc3903dPfXk+xOcubiDt39qe7+aJI71hx7WpJ3d/eXuvvmJO9OcvqEswIAAAAMa8pA9KgkNy7c3zvfNvWxAAAAAHwbDl/1AN+JqjovyXlJsnXr1uzZs2e1A20y+/bt8zdhKeuEZayRzWvnibeteoQ7HXNUb4p5rNXNy3sJy1gjrId1wjLWyD03ZSD6bJJHL9w/br5tvcfuWHPsnrU7dfclSS5Jku3bt/eOHTvW7jK0PXv2xN+EZawTlrFGNq9dF16x6hHutPPE23LpdUeueoxcee6OVY/AQXgvYRlrhPWwTljGGrnnpvyI2VVJHldVJ1TVEUnOTnLZOo+9Iskzq+oh84tTP3O+DQAAAIB72WSBqLtvT3J+ZmHn2iRv7+5rquqiqnpWklTVk6pqb5LnJHl9VV0zP/ZLSV6ZWWS6KslF820AAAAA3MsmvQZRd1+e5PI12y5YuH1VZh8fO9Cxb0zyxinnAwAAAGDaj5gBAAAAcAgQiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGN2kgqqrTq+q6qrq+qnYd4PEjq+pt88c/WFXHz7d/V1W9qao+VlXXVtVPTDknAAAAwMgmC0RVdViSi5OckWRbknOqatua3V6U5ObufmyS1yR59Xz7c5Ic2d1PSHJSkh/dH48AAAAAuHdNeQbRyUmu7+4buvvrSXYnOXPNPmcmedP89juSPKOqKkkneUBVHZ7k/km+nuSWCWcFAAAAGNaUgehRSW5cuL93vu2A+3T37Un+PMkxmcWiryb5fJLPJPm57v7ShLMCAAAADKu6e5onrjoryend/eL5/RckOaW7z1/Y5+PzffbO738yySlJTkzykiQ7kzwkyfuSnNHdN6x5jfOSnJckW7duPWn37t2T/C6Hqn379mXLli2rHoNNzjphGWtk8/rE5zbPybXHHNW56dZa9Rh5/LFHr3oEDsJ7CctYI6yHdcIy1shdnXrqqVd39/Zl+x0+4QyfTfLohfvHzbcdaJ+984+TPSjJTUnOTfJb3f2NJF+oqvcn2Z7kWwJRd1+S5JIk2b59e+/YsWOCX+PQtWfPnvibsIx1wjLWyOa168IrVj3CnXaeeFsuve7IVY+RK8/dseoROAjvJSxjjbAe1gnLWCP33JQfMbsqyeOq6oSqOiLJ2UkuW7PPZUleOL99VpL39OyUps8keXqSVNUDkjw5yScmnBUAAABgWJMFovk1hc5PckWSa5O8vbuvqaqLqupZ893ekOSYqro+yUuT7JpvvzjJlqq6JrPQ9B+7+6NTzQoAAAAwsnV9xKyqHpHkbyY5NslfJPl4kg919x13d1x3X57k8jXbLli4fWtmX2m/9rh9B9oOAAAAwL3vbgNRVZ2a2Vk9D03yB0m+kOSoJM9O8r1V9Y4kP9/dm+cqmQAAAAB8W5adQfQDSf637v7M2gfmF5X+wSR/N8mvTTAbAAAAABvgbgNRd7/sbh67Pcl/vtcnAgAAAGBDresi1VX1f1bV0TXzhqr6cFU9c+rhAAAAAJjeer/F7B/NrzP0zCQPSfKCJP9ysqkAAAAA2DDrDUQ1//cHkrylu69Z2AYAAADAIWy9gejqqvrtzALRFVX1wCR3+xX3AAAAABwaln2L2X4vSvLEJDd099eq6pgkPzLdWAAAAABslLs9g6iqjk+S7r6juz/c3V+e37+puz86v2j1cdOPCQAAAMBUlp1B9K+q6n5J/kuSq5P8WZKjkjw2yalJnpHkwiR7pxwSAAAAgOncbSDq7udU1bYkz0vyj5I8MsnXklyb5PIkP93dt04+JQAAAACTWXoNou7+oyT/fANmAQAAAGAF1vstZgAAAADcRwlEAAAAAIMTiAAAAAAGt65ANP86++dX1QXz+4+pqpOnHQ0AAACAjbDeM4j+bZKnJDlnfv8rSS6eZCIAAAAANtTSbzGbO6W7v7+q/iBJuvvmqjpiwrkAAAAA2CDrPYPoG1V1WJJOkqp6eJI7JpsKAAAAgA2z3kD02iTvTPKIqvrpJL+f5F9MNhUAAAAAG2ZdHzHr7l+uqquTPCNJJXl2d1876WQAAAAAbIj1XoMoSf40yfvmx9y/qr6/uz88zVgAAAAAbJR1BaKqemWSnUk+mfl1iOb/Pn2asQAAAADYKOs9g+i5Sb63u78+5TAAAAAAbLz1XqT640kePOUgAAAAAKzGes8g+pkkf1BVH09y2/6N3f2sSaYCAAAAYMOsNxC9Kcmrk3wsyR3TjQMAAADARltvIPpad7920kkAAAAAWIn1BqL3VdXPJLks3/oRM19zDwAAAHCIW28g+l/m/z55YZuvuQcAAAC4D1hXIOruU6ceBAAAAIDVuNtAVFXP7+63VtVLD/R4d//CNGMBAAAAsFGWnUH0gPm/DzzAY30vzwIAAADACtxtIOru189v/k53v3/xsar6m5NNBQAAAMCGud869/vFdW4DAAAA4BCz7BpET0nyN5I8fM11iI5OctiUgwEAAACwMZZdg+iIJFvm+y1eh+iWJGdNNRQAAAAAG2fZNYjem+S9VXVpd396g2YCAAA2yJMvvGLVIyRJdp54W3ZtklmufMVpqx4BYMMtO4NovyOr6pIkxy8e091Pn2IoAAAAADbOegPRryb590l+Kck3pxsHAAAAgI223kB0e3f/u0knAQAAAGAl1vs19++qqpdU1SOr6qH7fyadDAAAAIANsd4ziF44//dlC9s6yffcu+MAAAAAsNHWFYi6+4SpBwEAAABgNdYViKrqhw+0vbvffO+OAwAAAMBGW+9HzJ60cPuoJM9I8uEkAhEAAADAIW69HzH7J4v3q+rBSXZPMhEAAAAAG2q932K21leTuC4RAAAAwH3Aeq9B9K7MvrUsmUWlbUl+daqhAAAAANg4670G0c8t3L49yae7e+8E8wAAAACwwdZ7DaL3Lt6vqvtV1fO6+5enGQsAAACAjXK31yCqqqOr6ieq6nVV9cyaOT/JDUmeuzEjAgAAADClZWcQvSXJzUk+kOTFSX4ySSV5dnd/ZOLZAAAAANgAywLR93T3E5Kkqn4pyeeTPKa7b518MgAAAAA2xLKvuf/G/hvd/c0ke8UhAAAAgPuWZWcQ/fWqumV+u5Lcf36/knR3Hz3pdAAAAABM7m4DUXcftlGDAAAAALAayz5iBgAAAMB9nEAEAAAAMDiBCAAAAGBwAhEAAADA4AQiAAAAgMEJRAAAAACDE4gAAAAABicQAQAAAAxOIAIAAAAY3KSBqKpOr6rrqur6qtp1gMePrKq3zR//YFUdv/DYX6uqD1TVNVX1sao6aspZAQAAAEY1WSCqqsOSXJzkjCTbkpxTVdvW7PaiJDd392OTvCbJq+fHHp7krUn+9+7+viQ7knxjqlkBAAAARjblGUQnJ7m+u2/o7q8n2Z3kzDX7nJnkTfPb70jyjKqqJM9M8tHu/sMk6e6buvubE84KAAAAMKzq7mmeuOqsJKd394vn91+Q5JTuPn9hn4/P99k7v//JJKckeX6Sk5I8IsnDk+zu7p89wGucl+S8JNm6detJu3fvnuR3OVTt27cvW7ZsWfUYbHLWCctYI5vXJz53y6pHuNMxR3VuurVWPUYef+zRqx6Bg/BesnltlveSzfI+kngv2cy8l7CMNXJXp5566tXdvX3ZfodvxDD3wOFJnprkSUm+luR3q+rq7v7dxZ26+5IklyTJ9u3be8eOHRs956a2Z8+e+JuwjHXCMtbI5rXrwitWPcKddp54Wy697shVj5Erz92x6hE4CO8lm9dmeS/ZLO8jifeSzcx7CctYI/fclB8x+2ySRy/cP26+7YD7zK879KAkNyXZm+T3uvuL3f21JJcn+f4JZwUAAAAY1pSB6Kokj6uqE6rqiCRnJ7lszT6XJXnh/PZZSd7Ts8+8XZHkCVX1l+bh6G8n+aMJZwUAAAAY1mQfMevu26vq/Mxiz2FJ3tjd11TVRUk+1N2XJXlDkrdU1fVJvpRZREp331xVv5BZZOokl3f3b0w1KwAAAMDIJr0GUXdfntnHwxa3XbBw+9YkzznIsW/N7KvuAQAAAJjQlB8xAwAAAOAQIBABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAABa9VbHAAAQmUlEQVQAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGN2kgqqrTq+q6qrq+qnYd4PEjq+pt88c/WFXHr3n8MVW1r6p+fMo5AQAAAEY2WSCqqsOSXJzkjCTbkpxTVdvW7PaiJDd392OTvCbJq9c8/gtJfnOqGQEAAACY9gyik5Nc3903dPfXk+xOcuaafc5M8qb57XckeUZVVZJU1bOT/HGSayacEQAAAGB4UwaiRyW5ceH+3vm2A+7T3bcn+fMkx1TVliT/LMkrJpwPAAAAgCTV3dM8cdVZSU7v7hfP778gySndff7CPh+f77N3fv+TSU5JsivJf+/ut1fVy5Ps6+6fO8BrnJfkvCTZunXrSbt3757kdzlU7du3L1u2bFn1GGxy1gnLWCOb1yc+d8uqR7jTMUd1brq1Vj1GHn/s0asegYPwXrJ5bZb3ks3yPpJ4L9nMvJewjDVyV6eeeurV3b192X6HTzjDZ5M8euH+cfNtB9pnb1UdnuRBSW7KLBKdVVU/m+TBSe6oqlu7+3WLB3f3JUkuSZLt27f3jh07pvg9Dll79uyJvwnLWCcsY41sXrsuvGLVI9xp54m35dLrjlz1GLny3B2rHoGD8F6yeW2W95LN8j6SeC/ZzLyXsIw1cs9NGYiuSvK4qjohsxB0dpJz1+xzWZIXJvlAkrOSvKdnpzT9rf07LJxB9LoAAAAAcK+bLBB19+1VdX6SK5IcluSN3X1NVV2U5EPdfVmSNyR5S1Vdn+RLmUUkAAAAADbQlGcQpbsvT3L5mm0XLNy+NclzljzHyycZDgAAAIAk036LGQAAAACHAIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGd/iqBwAAAAAObU++8IpVj5Ak2Xnibdm1SWa58hWnrXqEb4sziAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADE4gAgAAABicQAQAAAAwOIEIAAAAYHACEQAAAMDgBCIAAACAwQlEAAAAAIMTiAAAAAAGJxABAAAADO7wVQ8AAMB0nnzhFaseIUmy88TbsmsTzHLlK05b9QgAsClNegZRVZ1eVddV1fVVtesAjx9ZVW+bP/7Bqjp+vv3vVtXVVfWx+b9Pn3JOAAAAgJFNFoiq6rAkFyc5I8m2JOdU1bY1u70oyc3d/dgkr0ny6vn2Lyb5oe5+QpIXJnnLVHMCAAAAjG7KM4hOTnJ9d9/Q3V9PsjvJmWv2OTPJm+a335HkGVVV3f0H3f25+fZrkty/qo6ccFYAAACAYU0ZiB6V5MaF+3vn2w64T3ffnuTPkxyzZp9/mOTD3X3bRHMCAAAADK26e5onrjoryend/eL5/RckOaW7z1/Y5+PzffbO739yvs8X5/e/L8llSZ7Z3Z88wGucl+S8JNm6detJu3fvnuR3OVTt27cvW7ZsWfUYbHLWCctYI5vXJz53y6pHuNMxR3VuurVWPUYef+zRqx5h09ks68Qa2byskbuyTjYv/12yeXkvuavN8l5y6qmnXt3d25ftN+W3mH02yaMX7h8333agffZW1eFJHpTkpiSpquOSvDPJDx8oDiVJd1+S5JIk2b59e+/YsePenP+Qt2fPnvibsIx1wjLWyOa1Gb4Rar+dJ96WS69b/afBrzx3x6pH2HQ2yzqxRjYva+SurJPNy3+XbF7eS+7qUHsvmfIjZlcleVxVnVBVRyQ5O7OzgRZdltlFqJPkrCTv6e6uqgcn+Y0ku7r7/RPOCAAAADC8yQLR/JpC5ye5Ism1Sd7e3ddU1UVV9az5bm9IckxVXZ/kpUl2zbefn+SxSS6oqo/Mfx4x1awAAAAAI5vyI2bp7suTXL5m2wULt29N8pwDHPeqJK+acjYAAAAAZqb8iBkAAAAAhwCBCAAAAGBwAhEAAADA4AQiAAAAgMEJRAAAAACDE4gAAAAABicQAQAAAAxOIAIAAAAYnEAEAAAAMLjDVz0AAAAAm9uTL7xi1SMkSXaeeFt2bYJZrnzFaaseAe51ziACAAAAGJxABAAAADA4gQgAAABgcAIRAAAAwOAEIgAAAIDBCUQAAAAAgxOIAAAAAAYnEAEAAAAMTiACAAAAGJxABAAAADA4gQgAAABgcAIRAAAAwOAEIgAAAIDBCUQAAAAAgxOIAAAAAAYnEAEAAAAMTiACAAAAGJxABAAAADA4gQgAAABgcAIRAAAAwOAEIgAAAIDBCUQAAAAAgxOIAAAAAAYnEAEAAAAMTiACAAAAGJxABAAAADA4gQgAAABgcAIRAAAAwOAEIgAAAIDBCUQAAAAAgxOIAAAAAAYnEAEAAAAMTiACAAAAGJxABAAAADA4gQgAAABgcAIRAAAAwOAEIgAAAIDBCUQAAAAAgxOIAAAAAAYnEAEAAAAMTiACAAAAGJxABAAAADA4gQgAAABgcAIRAAAAwOAEIgAAAIDBCUQAAAAAgxOIAAAAAAYnEAEAAAAMTiACAAAAGJxABAAAADA4gQgAAABgcAIRAAAAwOAEIgAAAIDBCUQAAAAAgxOIAAAAAAYnEAEAAAAMbtJAVFWnV9V1VXV9Ve06wONHVtXb5o9/sKqOX3jsJ+bbr6uq06acEwAAAGBkkwWiqjosycVJzkiyLck5VbVtzW4vSnJzdz82yWuSvHp+7LYkZyf5vv+/vfsPtbuu4zj+fK3l0iIxlDXbXCM3Wz/cqrUV9oeysmWhFYM0igrW/nGoBLGowAyCgqCMCBnNVUaOHErXSma0CFKX2/Ta3CR1aTnJ4TQ03VqbvvvjfBfzunXuXTv3e+49zweM+/1+zuecvS68Oefc9/f7/XyBZcAPmteTJEmSJEnSCTa1h6+9GHi4qv4CkGQ9cAmw84g5lwBfa7Y3AN9PkmZ8fVUdAB5J8nDzenf1MK80bt5z9ca2I/zXZ885wJf6IM/mazxRUJIkSZLakqrqzQsny4FlVbWi2f80sKSqVh0x5/5mzu5mfxewhE7TaHNV/bQZXwvcVlUbRvwfK4GVze45wJ978stMXKcDe9sOob5nnagba0SjYZ2oG2tE3VgjGg3rRN1YIy83u6rO6Dapl2cQ9VxVrQHWtJ2jXyXZWlWL2s6h/madqBtrRKNhnagba0TdWCMaDetE3Vgjx6+Xi1Q/Dsw6Yn9mM3bUOUmmAqcCT43yuZIkSZIkSToBetkg2gLMTTInyUl0Fp0eGjFnCPhMs70c2FSda96GgEubu5zNAeYCd/cwqyRJkiRJ0sDq2SVmVXUoySpgI/AK4Pqq2pHk68DWqhoC1gI3NItQP02niUQz7+d0FrQ+BFxeVS/0Kusk5uV3Gg3rRN1YIxoN60TdWCPqxhrRaFgn6sYaOU49W6RakiRJkiRJE0MvLzGTJEmSJEnSBGCDSJIkSZIkacDZIJIkSZIkSRpwNogmkSRvTrI6yfeaf6uTzG87l6SJpXkvWZrkNSPGl7WVSf0lyeIk726235LkC0kuajuX+leSn7SdQf0tyfua95IL286i/pFkSZLXNtsnJ7kmya1JvpXk1LbzqX1Jrkgyq+0ck4WLVE8SSVYDlwHrgd3N8Ew6d4ZbX1XfbCubJoYkn6uqdW3nULuSXAFcDjwALASurKpfNI/dU1XvbDOf2pfkauBDdO6E+htgCfA74APAxqr6Rovx1AeSDI0cAi4ANgFU1cXjHkp9J8ndVbW42f48nc+eW4ALgVv97iqAJDuABc0dstcA+4ANwNJm/OOtBlTrkjwDPA/sAm4EbqqqJ9tNNXHZIJokkjwIvLWqDo4YPwnYUVVz20mmiSLJ36rqrLZzqF1JtgPvrarnkryRzpewG6rq2iT3VtU7Wg2o1jU1shCYBjwBzKyqZ5OcDPyxqs5tNaBal+QeYCfwQ6DoNIhupHPQiqr6fXvp1C+O/ExJsgW4qKqeTPJqYHNVvb3dhOoHSR6oqvnN9ksOVCUZrqqF7aVTP0hyL/Au4P3AJ4CLgW10Pndurqp/thhvwpnadgCdMC8CZwJ/HTE+o3lMIsmfjvUQMH08s6hvTamq5wCq6tEk5wMbksymUyfSoap6AdiXZFdVPQtQVfuT+HkjgEXAlcBXgC9W1XCS/TaGNMKUJKfRWfIih4/4V9XzSQ61G0195P4jznK/L8miqtqaZB5wsNuTNRCqql4EbgduT/JKOmc6XwZ8GzijzXATjQ2iyeMq4LdJHgIea8bOAs4GVrWWSv1mOvBB4B8jxgPcOf5x1If2JFlYVcMAzZlEHwGuBzyaK4B/JzmlqvbROWIHQLMWhA0i0XxR/06Sm5qfe/A7p17uVDpH+QNUkhlV9fdm/TsPSOiwFcC1Sb4K7AXuSvIYnb93VrSaTP3iJe8XzRU1Q8BQklPaiTRxeYnZJJJkCrAYeEMz9DiwpTnSK5FkLbCuqv5wlMd+VlWfbCGW+kiSmXTOEHniKI+dV1V3tBBLfSTJtKo6cJTx04EZVbW9hVjqY0k+DJxXVV9uO4v6X/MH3fSqeqTtLOofzULVc+g0m3dX1Z6WI6lPJJlXVQ+2nWOysEEkSZIkSZI04LzNvSRJkiRJ0oCzQSRJkiRJkjTgbBBJkiSNUZLXJ1mfZFeSbUl+nWRekv1JhpPsTHJdkilJzk/yyxHP/1GS5W3llyRJGsk7SkiSJI1BkgC3AD+uqkubsQV07hS5q6oWJpkKbAI+CjzdWlhJkqRR8gwiSZKksbkAOFhV1x0eqKr76Nx2+fD+IeBO4OzxjydJkjR2NogkSZLG5m3Atv81oblV91Jg+7gkkiRJ+j/ZIJIkSTpx3pRkGLgD+FVV3QbUMeYea1ySJGncuQaRJEnS2OwAjrXA9K6qWjhi7CngtBFjrwP2nuhgkiRJx8sziCRJksZmEzAtycrDA0nOBWYdY/5DwJlJ5jdzZwMLgOFeB5UkSRotzyCSJEkag6qqJB8DvptkNfAv4FHgqmPMP5DkU8C6JK8CDgIrquqZ8cosSZLUTaq8/F2SJEmSJGmQeYmZJEmSJEnSgLNBJEmSJEmSNOBsEEmSJEmSJA04G0SSJEmSJEkDzgaRJEmSJEnSgLNBJEmSJEmSNOBsEEmSJEmSJA04G0SSJEmSJEkD7j8vwiUi9icDQAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] @@ -3210,22 +3629,22 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 31, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -3242,22 +3661,22 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 32, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -3289,7 +3708,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.2" + "version": "3.5.2" } }, "nbformat": 4, diff --git a/lisa/analysis/tasks.py b/lisa/analysis/tasks.py index fa652521aa0e7a0a35cdcd6fa4dd47d9c3c9140a..5f251898223c16aa30906afd66e407e68a3d5c9e 100644 --- a/lisa/analysis/tasks.py +++ b/lisa/analysis/tasks.py @@ -199,85 +199,197 @@ class TasksAnalysis(TraceAnalysisBase): return rt_tasks + @memoized @requires_events('sched_switch', 'sched_wakeup') - def df_task_states(self, task, stringify=False): + def df_tasks_states(self): """ - DataFrame of task's state updates events - - :param task: The task's name or PID - :type task: int or str - - :param stringify: Use `TaskState`'s string representation (instead of int) - :type stringify: bool + DataFrame of all tasks state updates events :returns: a :class:`pandas.DataFrame` with: + * A ``cpu`` column (the CPU where the task was on) + * A ``pid`` column (the PID of the task) * A ``target_cpu`` column (the CPU where the task has been scheduled). Will be ``NaN`` for non-wakeup events * A ``curr_state`` column (the current task state, see :class:`~TaskState`) - * A ``next_state`` column (the next task state, see :class:`~TaskState`) * A ``delta`` column (the duration for which the task will remain in this state) + * A ``next_state`` column (the next task state) """ - pid = self.trace.get_task_pid(task) + ###################################################### + # A) Assemble the sched_switch and sched_wakeup events + ###################################################### wk_df = self.trace.df_events('sched_wakeup') sw_df = self.trace.df_events('sched_switch') if "sched_wakeup_new" in self.trace.events: wkn_df = self.trace.df_events('sched_wakeup_new') - wk_df = pd.concat([wk_df, wkn_df]).sort_index() + wk_df = pd.concat([wk_df, wkn_df]) - task_wakeup = wk_df[wk_df.pid == pid][['target_cpu', '__cpu']] - task_wakeup['curr_state'] = TaskState.TASK_WAKING + wk_df = wk_df[wk_df.success == 1][["pid", "target_cpu", "__cpu"]] + wk_df["curr_state"] = TaskState.TASK_WAKING - task_switches_df = sw_df[ - (sw_df.prev_pid == pid) | - (sw_df.next_pid == pid) - ][['__cpu', 'prev_pid', 'prev_state']] + prev_sw_df = sw_df[["__cpu", "prev_pid", "prev_state"]].copy() + next_sw_df = sw_df[["__cpu", "next_pid"]].copy() - # This is a switch-in event - # (we don't care about the status of a task we are replacing) - task_switches_df.prev_state[task_switches_df.prev_pid != pid] = TaskState.TASK_ACTIVE + prev_sw_df.rename(columns={"prev_pid" : "pid", "prev_state" : "curr_state"}, + inplace=True) - task_switches_df = task_switches_df.drop(columns=["prev_pid"]) + next_sw_df["curr_state"] = TaskState.TASK_ACTIVE + next_sw_df.rename(columns={'next_pid' : 'pid'}, inplace=True) - task_switches_df.rename(columns={'prev_state' : 'curr_state'}, inplace=True) + all_sw_df = prev_sw_df.append(next_sw_df, sort=False) # Integer values are prefered here, otherwise the whole column # is converted to float64 - task_switches_df['target_cpu'] = -1 + all_sw_df['target_cpu'] = -1 + + df = all_sw_df.append(wk_df, sort=False) + df.sort_index(inplace=True) + df.rename(columns={'__cpu' : 'cpu'}, inplace=True) + + # Move the target_cpu column to the 2nd position + columns = df.columns.to_list() + columns = columns[:1] + ["target_cpu"] + \ + [col for col in columns[1:] if col != "target_cpu"] + + df = df[columns] + + ###################################################### + # B) Compute the deltas for each PID + ###################################################### + + # We have duplicate index values (timestamps) in there, so to make + # merging easier use an integer indexing instead. + df.reset_index(inplace=True) + + # To speed up the sorting, we'll append all of the values sequentially + # and just sort them once at the very end + index = [] + deltas = [] + states = [] + + trace_end = self.trace.start_time + self.trace.time_range + pids = df.pid.unique() + + for pid in pids: + df_slice = df[df.pid == pid] + time = df_slice.Time + state = df_slice.curr_state + + index += time.index.to_list() + deltas += list(time.values[1:] - time.values[:-1]) + [trace_end - time.values[-1]] + states += list(state.values[1:]) + [state.values[-1]] + + merged_df = pd.DataFrame(index=index, + data={"delta" : deltas, "next_state" : states}) + merged_df.sort_index(inplace=True) + + df["delta"] = merged_df.delta + df["next_state"] = merged_df.next_state + df.set_index("Time", inplace=True) + + return df + + @df_tasks_states.used_events + def df_task_states(self, task, stringify=False): + """ + DataFrame of task's state updates events + + :param task: The task's name or PID + :type task: int or str + + :param stringify: Include stringifed :class:`TaskState` columns + :type stringify: bool + + :returns: a :class:`pandas.DataFrame` with: - task_state_df = task_wakeup.append(task_switches_df, sort=True).sort_index() + * A ``cpu`` column (the CPU where the task was on) + * A ``target_cpu`` column (the CPU where the task has been scheduled). + Will be ``NaN`` for non-wakeup events + * A ``curr_state`` column (the current task state, see :class:`~TaskState`) + * A ``next_state`` column (the next task state) + * A ``delta`` column (the duration for which the task will remain in + this state) + """ + pid = self.trace.get_task_pid(task) + df = self.df_tasks_states() - task_state_df.rename(columns={'__cpu' : 'cpu'}, inplace=True) - task_state_df = task_state_df[['target_cpu', 'cpu', 'curr_state']] - # Make the last "next_state" the same as the last "curr_state" - task_state_df['next_state'] = task_state_df.curr_state.shift( - -1, fill_value=task_state_df['curr_state'].values[-1]) - self.trace.add_events_deltas(task_state_df, inplace=True) + df = df[df.pid == pid].copy() + df.drop("pid", axis=1, inplace=True) if stringify: - self.stringify_df_task_states(task_state_df, inplace=True) + self.stringify_df_task_states(df, ["curr_state", "next_state"], inplace=True) - return task_state_df + return df @classmethod - def stringify_df_task_states(cls, df_task_states, inplace=False): - """ - Convert a Dataframe obtained from :meth:`df_task_states` with - ``stringify=False`` into its ``stringify=True`` variant. + def stringify_task_state_series(cls, series): """ - df = df_task_states if inplace else df_task_states.copy() + Stringify a series containing :class:`TaskState` values + + :param series: The series + :type series: pandas.Series + + The common use case for this will be to pass a dataframe column:: + df["state_str"] = stringify_task_state_series(df["state"]) + """ def stringify_state(state): try: return TaskState(state).char except ValueError: return TaskState.sched_switch_str(state) - for col in ['curr_state', 'next_state']: - df[col] = df[col].apply(stringify_state) + return series.apply(stringify_state) + + @classmethod + def stringify_df_task_states(cls, df, columns, inplace=False): + """ + Adds stringified :class:`TaskState` columns to a Dataframe + + :param df: The DataFrame to operate on + :type df: pandas.DataFrame + + :param columns: The columns to stringify + :type columns: list + + :param inplace: Do the modification on the original DataFrame + :type inplace: bool + """ + df = df if inplace else df.copy() + + for col in columns: + df["{}_str".format(col)] = cls.stringify_task_state_series(df[col]) + + return df + + @df_tasks_states.used_events + def df_tasks_runtime(self): + """ + DataFrame of the time each task spent in TASK_ACTIVE (:class:`TaskState`) + + :returns: a :class:`pandas.DataFrame` with: + + * PIDs as index + * A ``comm`` column (the name of the task) + * A ``runtime`` column (the time that task spent running) + """ + df = self.df_tasks_states() + + runtimes = {} + for pid in df.pid.unique(): + runtimes[pid] = df[ + (df.pid == pid) & + (df.curr_state == TaskState.TASK_ACTIVE) + ].delta.sum() + + df = pd.DataFrame.from_dict(runtimes, orient="index", columns=["runtime"]) + + df.index.name = "pid" + df.sort_values(by="runtime", ascending=False, inplace=True) + df.insert(0, "comm", df.index.map(self.trace.get_task_by_pid)) return df diff --git a/tests/test_trace.py b/tests/test_trace.py index 6f402c33d4a0d1a4496f1add98b14572fdd55bb2..472bdb4f2cd17da38d0ad59ea7c5d3badcf23d1f 100644 --- a/tests/test_trace.py +++ b/tests/test_trace.py @@ -34,13 +34,17 @@ class TestTrace(StorageTestCase): traces_dir = os.path.join(os.path.dirname(__file__), 'traces') events = [ 'sched_switch', + 'sched_wakeup', 'sched_overutilized', 'cpu_idle', 'sched_load_avg_task', 'sched_load_se' ] - FLOAT_PLACES=6 + FLOAT_PLACES = 6 + + def assertAlmostEqual(self, first, second, places=FLOAT_PLACES, msg=None, delta=None): + super().assertAlmostEqual(first, second, places, msg, delta) def __init__(self, *args, **kwargs): super(TestTrace, self).__init__(*args, **kwargs) @@ -125,8 +129,7 @@ class TestTrace(StorageTestCase): normalize_time=False ) - self.assertAlmostEqual(trace.time_range, expected_duration, - places=self.FLOAT_PLACES) + self.assertAlmostEqual(trace.time_range, expected_duration) def test_time_range_window(self): """ @@ -141,8 +144,7 @@ class TestTrace(StorageTestCase): window=(76.402065, 80.402065) ) - self.assertAlmostEqual(trace.time_range, expected_duration, - places=self.FLOAT_PLACES) + self.assertAlmostEqual(trace.time_range, expected_duration) def test_squash_df(self): """ @@ -163,8 +165,8 @@ class TestTrace(StorageTestCase): tail = df1.tail(1) self.assertEqual(len(df1.index), 2) self.assertEqual(df1.index.tolist(), [16.5, 17]) - self.assertAlmostEqual(head['delta'].values[0], 0.5, places=self.FLOAT_PLACES) - self.assertAlmostEqual(tail['delta'].values[0], 0.5, places=self.FLOAT_PLACES) + self.assertAlmostEqual(head['delta'].values[0], 0.5) + self.assertAlmostEqual(tail['delta'].values[0], 0.5) self.assertEqual(head['state'].values[0], 0) self.assertEqual(tail['state'].values[0], 1) @@ -176,7 +178,7 @@ class TestTrace(StorageTestCase): df2 = Trace.squash_df(df, 16.2, 16.8) self.assertEqual(len(df2.index), 1) self.assertEqual(df2.index[0], 16.2) - self.assertAlmostEqual(df2['delta'].values[0], 0.6, places=self.FLOAT_PLACES) + self.assertAlmostEqual(df2['delta'].values[0], 0.6) self.assertEqual(df2['state'].values[0], 0) ## Test slice that matches an event's index @@ -187,7 +189,7 @@ class TestTrace(StorageTestCase): df3 = Trace.squash_df(df, 16, 17) self.assertEqual(len(df3.index), 1) self.assertEqual(df3.index[0], 16) - self.assertAlmostEqual(df3['delta'].values[0], 1, places=self.FLOAT_PLACES) + self.assertAlmostEqual(df3['delta'].values[0], 1) self.assertEqual(df3['state'].values[0], 0) ## Test slice past last event @@ -197,7 +199,7 @@ class TestTrace(StorageTestCase): df4 = Trace.squash_df(df, 19.5, 22) self.assertEqual(len(df4.index), 1) self.assertEqual(df4.index[0], 19.5) - self.assertAlmostEqual(df4['delta'].values[0], 0.5, places=self.FLOAT_PLACES) + self.assertAlmostEqual(df4['delta'].values[0], 0.5) self.assertEqual(df4['state'].values[0], 1) ## Test slice where there's no past event @@ -222,8 +224,7 @@ class TestTrace(StorageTestCase): # Last event should be extended to the trace's end expected_time = (events[1] - events[0]) + (trace_end - events[2]) - self.assertAlmostEqual(self.trace.overutilized_time, expected_time, - places=self.FLOAT_PLACES) + self.assertAlmostEqual(self.trace.overutilized_time, expected_time) def test_plot_cpu_idle_state_residency(self): """ @@ -342,6 +343,12 @@ class TestTrace(StorageTestCase): continue self.assertEqual(e,r) + def test_df_tasks_states(self): + df = self.trace.analysis.tasks.df_tasks_states() + + self.assertEqual(len(df), 4780) + # Proxy check for detecting delta computation changes + self.assertAlmostEqual(df.delta.sum(), 207.705551) class TestTraceNoClusterData(TestTrace): """