ROS-Dynamic-Executor-Experi.../analysis/analysis.ipynb

443 lines
86 KiB
Text
Raw Normal View History

{
"cells": [
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import json\n",
"\n",
"import matplotlib.pyplot as plt\n",
"from dataclasses import dataclass\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [],
"source": [
"this_dir = os.path.dirname(os.path.abspath(''))\n",
"# results is in \"../results\"\n",
"results_dir = os.path.join(this_dir, \"results\")"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [],
"source": [
"experiment_folder = \"casestudy_example\"\n",
"experiment_name = \"cs_example_edf\"\n",
"\n",
"experiment_file = os.path.join(results_dir, experiment_folder, experiment_name + \".json\")\n",
"if not os.path.exists(experiment_file):\n",
" print(\"Experiment file not found: \", experiment_file)"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [],
"source": [
"with open(experiment_file) as f:\n",
" experiment_data_raw = json.load(f)"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7146948, 'on_time': 1, 'time_diff': -73, 'periods_late': 0, 'thread_id': 1}, 'time': 0.000127}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7146948, 'on_time': 1, 'time_diff': 0, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0002}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7147048, 'on_time': 1, 'time_diff': -71, 'periods_late': 0, 'thread_id': 1}, 'time': 0.000229}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7147148, 'on_time': 1, 'time_diff': -157, 'periods_late': 0, 'thread_id': 0}, 'time': 0.000243}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7147048, 'on_time': 1, 'time_diff': 0, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0003}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7147148, 'on_time': 1, 'time_diff': -57, 'periods_late': 0, 'thread_id': 1}, 'time': 0.000343}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7147248, 'on_time': 1, 'time_diff': -100, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0004}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7147248, 'on_time': 1, 'time_diff': -57, 'periods_late': 0, 'thread_id': 0}, 'time': 0.000443}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7147348, 'on_time': 1, 'time_diff': -100, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0005}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7147348, 'on_time': 1, 'time_diff': -57, 'periods_late': 0, 'thread_id': 1}, 'time': 0.000543}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7147448, 'on_time': 1, 'time_diff': -100, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0006}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7147448, 'on_time': 1, 'time_diff': -57, 'periods_late': 0, 'thread_id': 0}, 'time': 0.000643}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7147548, 'on_time': 1, 'time_diff': -100, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0007}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7147648, 'on_time': 1, 'time_diff': -157, 'periods_late': 0, 'thread_id': 1}, 'time': 0.000743}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7147548, 'on_time': 1, 'time_diff': 0, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0008}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7147648, 'on_time': 1, 'time_diff': -57, 'periods_late': 0, 'thread_id': 0}, 'time': 0.000843}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7147748, 'on_time': 1, 'time_diff': -100, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0009}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7147848, 'on_time': 1, 'time_diff': -157, 'periods_late': 0, 'thread_id': 0}, 'time': 0.000943}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7147748, 'on_time': 1, 'time_diff': 0, 'periods_late': 0, 'thread_id': 1}, 'time': 0.001}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7147948, 'on_time': 1, 'time_diff': -157, 'periods_late': 0, 'thread_id': 0}, 'time': 0.001043}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7147848, 'on_time': 1, 'time_diff': 0, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0011}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7147948, 'on_time': 1, 'time_diff': -70, 'periods_late': 0, 'thread_id': 1}, 'time': 0.00113}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7148048, 'on_time': 1, 'time_diff': -157, 'periods_late': 0, 'thread_id': 0}, 'time': 0.001143}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7148048, 'on_time': 1, 'time_diff': -100, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0012}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7148148, 'on_time': 1, 'time_diff': -157, 'periods_late': 0, 'thread_id': 1}, 'time': 0.001243}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7148148, 'on_time': 1, 'time_diff': -100, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0013}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7148248, 'on_time': 1, 'time_diff': -157, 'periods_late': 0, 'thread_id': 1}, 'time': 0.001343}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7148248, 'on_time': 1, 'time_diff': -100, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0014}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7148348, 'on_time': 1, 'time_diff': -157, 'periods_late': 0, 'thread_id': 0}, 'time': 0.001443}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7148348, 'on_time': 1, 'time_diff': -100, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0015}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7148448, 'on_time': 1, 'time_diff': -157, 'periods_late': 0, 'thread_id': 0}, 'time': 0.001543}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7148448, 'on_time': 1, 'time_diff': -100, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0016}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7148548, 'on_time': 1, 'time_diff': -170, 'periods_late': 0, 'thread_id': 0}, 'time': 0.00163}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7148648, 'on_time': 1, 'time_diff': -257, 'periods_late': 0, 'thread_id': 1}, 'time': 0.001643}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7148548, 'on_time': 1, 'time_diff': -100, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0017}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7148648, 'on_time': 1, 'time_diff': -157, 'periods_late': 0, 'thread_id': 0}, 'time': 0.001743}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7148748, 'on_time': 1, 'time_diff': -200, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0018}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7148848, 'on_time': 1, 'time_diff': -257, 'periods_late': 0, 'thread_id': 1}, 'time': 0.001843}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7148748, 'on_time': 1, 'time_diff': -100, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0019}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7148948, 'on_time': 1, 'time_diff': -257, 'periods_late': 0, 'thread_id': 1}, 'time': 0.001943}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7148848, 'on_time': 1, 'time_diff': -100, 'periods_late': 0, 'thread_id': 0}, 'time': 0.002}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7148948, 'on_time': 1, 'time_diff': -157, 'periods_late': 0, 'thread_id': 1}, 'time': 0.002043}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7149048, 'on_time': 1, 'time_diff': -200, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0021}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7149048, 'on_time': 1, 'time_diff': -157, 'periods_late': 0, 'thread_id': 0}, 'time': 0.002143}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7149148, 'on_time': 1, 'time_diff': -200, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0022}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7149148, 'on_time': 1, 'time_diff': -157, 'periods_late': 0, 'thread_id': 1}, 'time': 0.002243}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7149248, 'on_time': 1, 'time_diff': -200, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0023}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7149248, 'on_time': 1, 'time_diff': -157, 'periods_late': 0, 'thread_id': 0}, 'time': 0.002343}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7149348, 'on_time': 1, 'time_diff': -200, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0024}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7149348, 'on_time': 1, 'time_diff': -170, 'periods_late': 0, 'thread_id': 1}, 'time': 0.00243}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7149448, 'on_time': 1, 'time_diff': -257, 'periods_late': 0, 'thread_id': 0}, 'time': 0.002443}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7149448, 'on_time': 1, 'time_diff': -200, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0025}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7149548, 'on_time': 1, 'time_diff': -256, 'periods_late': 0, 'thread_id': 1}, 'time': 0.002544}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7149548, 'on_time': 1, 'time_diff': -200, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0026}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7149648, 'on_time': 1, 'time_diff': -259, 'periods_late': 0, 'thread_id': 1}, 'time': 0.002641}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7149648, 'on_time': 1, 'time_diff': -200, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0027}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7149748, 'on_time': 1, 'time_diff': -257, 'periods_late': 0, 'thread_id': 1}, 'time': 0.002743}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7149748, 'on_time': 1, 'time_diff': -200, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0028}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7149848, 'on_time': 1, 'time_diff': -256, 'periods_late': 0, 'thread_id': 1}, 'time': 0.002844}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7149848, 'on_time': 1, 'time_diff': -200, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0029}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7149948, 'on_time': 1, 'time_diff': -257, 'periods_late': 0, 'thread_id': 0}, 'time': 0.002943}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7149948, 'on_time': 1, 'time_diff': -200, 'periods_late': 0, 'thread_id': 1}, 'time': 0.003}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7150048, 'on_time': 1, 'time_diff': -257, 'periods_late': 0, 'thread_id': 1}, 'time': 0.003043}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7150048, 'on_time': 1, 'time_diff': -200, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0031}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7150148, 'on_time': 1, 'time_diff': -257, 'periods_late': 0, 'thread_id': 0}, 'time': 0.003143}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7150148, 'on_time': 1, 'time_diff': -200, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0032}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7150248, 'on_time': 1, 'time_diff': -257, 'periods_late': 0, 'thread_id': 0}, 'time': 0.003243}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7150248, 'on_time': 1, 'time_diff': -200, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0033}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7150348, 'on_time': 1, 'time_diff': -257, 'periods_late': 0, 'thread_id': 0}, 'time': 0.003343}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7150348, 'on_time': 1, 'time_diff': -200, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0034}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7150448, 'on_time': 1, 'time_diff': -270, 'periods_late': 0, 'thread_id': 0}, 'time': 0.00343}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7150548, 'on_time': 1, 'time_diff': -357, 'periods_late': 0, 'thread_id': 1}, 'time': 0.003443}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7150448, 'on_time': 1, 'time_diff': -200, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0035}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7150548, 'on_time': 1, 'time_diff': -257, 'periods_late': 0, 'thread_id': 0}, 'time': 0.003543}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7150648, 'on_time': 1, 'time_diff': -300, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0036}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7150748, 'on_time': 1, 'time_diff': -357, 'periods_late': 0, 'thread_id': 0}, 'time': 0.003643}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7150648, 'on_time': 1, 'time_diff': -200, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0037}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7150748, 'on_time': 1, 'time_diff': -257, 'periods_late': 0, 'thread_id': 1}, 'time': 0.003743}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7150848, 'on_time': 1, 'time_diff': -300, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0038}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7150948, 'on_time': 1, 'time_diff': -358, 'periods_late': 0, 'thread_id': 1}, 'time': 0.003842}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7150848, 'on_time': 1, 'time_diff': -200, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0039}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7150948, 'on_time': 1, 'time_diff': -257, 'periods_late': 0, 'thread_id': 0}, 'time': 0.003943}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7151048, 'on_time': 1, 'time_diff': -300, 'periods_late': 0, 'thread_id': 1}, 'time': 0.004}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7151148, 'on_time': 1, 'time_diff': -356, 'periods_late': 0, 'thread_id': 1}, 'time': 0.004044}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7151048, 'on_time': 1, 'time_diff': -200, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0041}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7151148, 'on_time': 1, 'time_diff': -257, 'periods_late': 0, 'thread_id': 0}, 'time': 0.004143}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7151248, 'on_time': 1, 'time_diff': -300, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0042}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7151248, 'on_time': 1, 'time_diff': -257, 'periods_late': 0, 'thread_id': 0}, 'time': 0.004243}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7151348, 'on_time': 1, 'time_diff': -300, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0043}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7151348, 'on_time': 1, 'time_diff': -270, 'periods_late': 0, 'thread_id': 1}, 'time': 0.00433}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7151448, 'on_time': 1, 'time_diff': -357, 'periods_late': 0, 'thread_id': 0}, 'time': 0.004343}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7151448, 'on_time': 1, 'time_diff': -300, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0044}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7151548, 'on_time': 1, 'time_diff': -370, 'periods_late': 0, 'thread_id': 0}, 'time': 0.00443}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7151648, 'on_time': 1, 'time_diff': -457, 'periods_late': 0, 'thread_id': 1}, 'time': 0.004443}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7151548, 'on_time': 1, 'time_diff': -300, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0045}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7151648, 'on_time': 1, 'time_diff': -357, 'periods_late': 0, 'thread_id': 0}, 'time': 0.004543}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7151748, 'on_time': 1, 'time_diff': -400, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0046}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7151748, 'on_time': 1, 'time_diff': -357, 'periods_late': 0, 'thread_id': 1}, 'time': 0.004643}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7151848, 'on_time': 1, 'time_diff': -400, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0047}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7151848, 'on_time': 1, 'time_diff': -370, 'periods_late': 0, 'thread_id': 1}, 'time': 0.00473}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7151948, 'on_time': 1, 'time_diff': -457, 'periods_late': 0, 'thread_id': 0}, 'time': 0.004743}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7151948, 'on_time': 1, 'time_diff': -400, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0048}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7152048, 'on_time': 1, 'time_diff': -457, 'periods_late': 0, 'thread_id': 0}, 'time': 0.004843}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7152048, 'on_time': 1, 'time_diff': -400, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0049}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7152148, 'on_time': 1, 'time_diff': -457, 'periods_late': 0, 'thread_id': 0}, 'time': 0.004943}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7152148, 'on_time': 1, 'time_diff': -400, 'periods_late': 0, 'thread_id': 1}, 'time': 0.005}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7152248, 'on_time': 1, 'time_diff': -457, 'periods_late': 0, 'thread_id': 1}, 'time': 0.005043}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7152248, 'on_time': 1, 'time_diff': -400, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0051}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7152348, 'on_time': 1, 'time_diff': -457, 'periods_late': 0, 'thread_id': 0}, 'time': 0.005143}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7152348, 'on_time': 1, 'time_diff': -400, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0052}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7152448, 'on_time': 1, 'time_diff': -473, 'periods_late': 0, 'thread_id': 1}, 'time': 0.005227}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7152448, 'on_time': 1, 'time_diff': -400, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0053}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7152548, 'on_time': 1, 'time_diff': -456, 'periods_late': 0, 'thread_id': 0}, 'time': 0.005344}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7152548, 'on_time': 1, 'time_diff': -456, 'periods_late': 0, 'thread_id': 1}, 'time': 0.005344}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7152648, 'on_time': 1, 'time_diff': -457, 'periods_late': 0, 'thread_id': 1}, 'time': 0.005443}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7152648, 'on_time': 1, 'time_diff': -400, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0055}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7152748, 'on_time': 1, 'time_diff': -457, 'periods_late': 0, 'thread_id': 0}, 'time': 0.005543}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7152748, 'on_time': 1, 'time_diff': -400, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0056}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7152848, 'on_time': 1, 'time_diff': -457, 'periods_late': 0, 'thread_id': 1}, 'time': 0.005643}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7152848, 'on_time': 1, 'time_diff': -400, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0057}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7152948, 'on_time': 1, 'time_diff': -457, 'periods_late': 0, 'thread_id': 0}, 'time': 0.005743}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7152948, 'on_time': 1, 'time_diff': -400, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0058}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7153048, 'on_time': 1, 'time_diff': -457, 'periods_late': 0, 'thread_id': 0}, 'time': 0.005843}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7153048, 'on_time': 1, 'time_diff': -400, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0059}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7153148, 'on_time': 1, 'time_diff': -470, 'periods_late': 0, 'thread_id': 0}, 'time': 0.00593}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7153248, 'on_time': 1, 'time_diff': -557, 'periods_late': 0, 'thread_id': 1}, 'time': 0.005943}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7153148, 'on_time': 1, 'time_diff': -400, 'periods_late': 0, 'thread_id': 0}, 'time': 0.006}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7153248, 'on_time': 1, 'time_diff': -470, 'periods_late': 0, 'thread_id': 0}, 'time': 0.00603}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7153348, 'on_time': 1, 'time_diff': -557, 'periods_late': 0, 'thread_id': 1}, 'time': 0.006043}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7153348, 'on_time': 1, 'time_diff': -500, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0061}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7153448, 'on_time': 1, 'time_diff': -557, 'periods_late': 0, 'thread_id': 0}, 'time': 0.006143}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7153448, 'on_time': 1, 'time_diff': -500, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0062}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7153548, 'on_time': 1, 'time_diff': -563, 'periods_late': 0, 'thread_id': 1}, 'time': 0.006237}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7153548, 'on_time': 1, 'time_diff': -500, 'periods_late': 0, 'thread_id': 0}, 'time': 0.0063}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7153648, 'on_time': 1, 'time_diff': -560, 'periods_late': 0, 'thread_id': 0}, 'time': 0.00634}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7153648, 'on_time': 1, 'time_diff': -500, 'periods_late': 0, 'thread_id': 1}, 'time': 0.0064}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7153748, 'on_time': 1, 'time_diff': -557, 'periods_late': 0, 'thread_id': 1}, 'time': 0.006443}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7153748, 'on_time': 1, 'time_diff': -504, 'periods_late': 0, 'thread_id': 0}, 'time': 0.006496}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 0, 'deadline': 7146848}, 'time': 0.0}\n",
"Record: {'entry': {'operation': 'next_deadline', 'chain_id': 1, 'deadline': 7146848}, 'time': 0.0}\n",
"Number of records: 1542\n",
"First record: {'entry': {'operation': 'start_work', 'chain': 0, 'node': 'node_0', 'count': 500, 'next_release_us': 99910}, 'time': 0.0001}\n",
"Operation types: ['end_work', 'next_deadline', 'get_next_executable', 'wait_for_work', 'start_work']\n"
]
}
],
"source": [
"def pre_process_data(data):\n",
" for record in data:\n",
" record[\"time\"] = int(record[\"time\"])\n",
"\n",
" min_time = min([record[\"time\"] for record in data])\n",
" for record in data:\n",
" record[\"time\"] -= min_time\n",
" record[\"time\"] /= (1000 * 1000)\n",
"\n",
" if record[\"entry\"][\"operation\"] == \"next_deadline\":\n",
" print(\"Record: \", record)\n",
" record[\"entry\"][\"deadline\"] = int(record[\"entry\"][\"deadline\"])\n",
" record[\"entry\"][\"deadline\"] -= min_time\n",
" record[\"entry\"][\"deadline\"] /= (1000 * 1000)\n",
"\n",
" # data = sorted(data, key=lambda x: x[\"time\"])\n",
" return data\n",
"\n",
"experiment_data = pre_process_data(experiment_data_raw)\n",
"\n",
"print(\"Number of records: \", len(experiment_data))\n",
"print(\"First record: \", experiment_data[0])\n",
"operation_types = list(set([record[\"entry\"][\"operation\"] for record in experiment_data]))\n",
"print(\"Operation types: \", operation_types)"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [],
"source": [
"@dataclass\n",
"class Record:\n",
" start_time: float\n",
" end_time: float\n",
" node_name: str\n",
"\n",
"@dataclass\n",
"class RecordLine:\n",
" node_name: str\n",
" count: int\n",
"\n",
" def __eq__(self, other):\n",
" return self.node_name == other.node_name and self.count == other.count\n",
"\n",
" def __hash__(self):\n",
" return hash((self.node_name, self.count))\n",
"\n",
"def get_records(data) -> list[Record]:\n",
" # used to match start_work and end_work records\n",
" current_records: dict[RecordLine, Record] = {}\n",
" records = []\n",
" for record in data:\n",
" if record[\"entry\"][\"operation\"] == \"start_work\":\n",
" current_record = Record(start_time=record[\"time\"], node_name=record[\"entry\"][\"node\"], end_time=None)\n",
" current_record_line = RecordLine(node_name=record[\"entry\"][\"node\"], count=record[\"entry\"][\"count\"])\n",
" if current_record_line in current_records:\n",
" raise Exception(\"Overlapping records\")\n",
" current_records[current_record_line] = current_record\n",
" elif record[\"entry\"][\"operation\"] == \"end_work\":\n",
" current_record_line = RecordLine(node_name=record[\"entry\"][\"node\"], count=record[\"entry\"][\"count\"])\n",
" if current_record_line not in current_records:\n",
" raise Exception(\"No start record\")\n",
" current_record = current_records[current_record_line]\n",
" current_record.end_time = record[\"time\"]\n",
" records.append(current_record)\n",
" del current_records[current_record_line]\n",
" return records\n",
"\n",
"records = get_records(experiment_data)"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of nodes: 4\n"
]
}
],
"source": [
"num_nodes = len(set([record.node_name for record in records]))\n",
"print(\"Number of nodes: \", num_nodes)"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "ea1129c959df4732a9cb712543ecf881",
"version_major": 2,
"version_minor": 0
},
"image/png": "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
"text/html": [
"\n",
" <div style=\"display: inline-block;\">\n",
" <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
" Figure\n",
" </div>\n",
" <img src='data:image/png;base64,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
" </div>\n",
" "
],
"text/plain": [
"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib widget\n",
"\n",
"# swimlane plot\n",
"name_to_id = {name: i for i, name in enumerate(set([record.node_name for record in records]))}\n",
"fig, ax = plt.subplots()\n",
"for i, record in enumerate(records):\n",
" # ax.plot([record.start_time, record.end_time], [name_to_id[record.node_name], name_to_id[record.node_name]], label=record.node_name)\n",
" ax.broken_barh([(record.start_time, record.end_time - record.start_time)], (name_to_id[record.node_name] - 0.4, 0.8), facecolors='blue')\n",
"ax.set_yticks(range(num_nodes))\n",
"ax.set_yticklabels(name_to_id.keys())\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [],
"source": [
"@dataclass\n",
"class Deadline:\n",
" chain_id: int\n",
" deadline: float\n",
" on_time: bool\n",
"\n",
"def get_deadlines(data) -> list[Deadline]:\n",
" deadlines = []\n",
" for record in data:\n",
" if record[\"entry\"][\"operation\"] == \"next_deadline\" and \"on_time\" in record[\"entry\"]:\n",
" deadlines.append(Deadline(chain_id=record[\"entry\"][\"chain_id\"], deadline=record[\"entry\"][\"deadline\"], on_time=record[\"entry\"][\"on_time\"]))\n",
" return deadlines\n",
"\n",
"deadlines = get_deadlines(experiment_data)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "d7a21561dee14bb3bb4b56b83e7a86af",
"version_major": 2,
"version_minor": 0
},
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAJtRJREFUeJzt3X901fV9+PFX+GH4GTC1QtCgoEyCkuKI0zCO4JGjcOwqx07ogSkeoCvYCso2UDyaVPmlrTtsOh1FD1DlHOumous2FZzQbRYUJ4dKMqaBCqdMwKHA2oHVfL5/+DWHlB+SkOQmvB+Pc+453B/v+3m/Pgnhyb0k5GVZlgUAAMlol+sNAADQsgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiOuR6A21ZbW1t7Nq1K7p37x55eXm53g4AcBKyLIuDBw9Gnz59ol27NF8LE4CnYNeuXVFcXJzrbQAAjbBz584499xzc72NnBCAp6B79+4R8fknUEFBQY53AwCcjAMHDkRxcXHdn+MpEoCn4Iu3fQsKCgQgALQxKf/zrTTf+AYASJgABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjP8L+HRQWxvx4Yef//qssyLatfvy+9rimlwfP5U9m7P1Ht+c5sz18VvDnDSNjEbbv39/FhHZ/v37c7uR3buzLOLzy+7dJ3dfW1yT6+Onsmdztt7jm9OcuT5+a5izCbSaP79zSFIDACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGALZBeXmfX47lq72Ov+5497WGNbk+fkusyfXxG7sm18c3Z9OuyfXxm3LNiaTw+7OlPjc4PQlAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxLSZAKysrIwhQ4bkehsAAG1emwnApvTLX/4ypkyZEv369YvOnTvHBRdcEBUVFfHJJ5/kemsAAM2uQ643kAv/+Z//GbW1tbFkyZK48MIL45133olvf/vb8etf/zp++MMf5np7AADNqlleARw5cmTMmDEjZs+eHYWFhdG7d++orKysu3/Hjh1x/fXXR7du3aKgoCDGjRsXu3fvrvccixYtil69ekX37t1jypQpcejQoaOOs2zZsigpKYlOnTrFwIED49FHHz2p/Y0ePTqWLVsW11xzTfTv3z++8Y1vxJ//+Z/Hc889d0pzAwC0Bc32FvCKFSuia9eusWHDhnjwwQfjvvvui9WrV0eWZTF27NjYt29frFu3LlavXh01NTUxfvz4urXPPPNMVFRUxPz582Pjxo1RVFR0VNwtXbo07r777pg/f35UV1fHggUL4p577okVK1Y0ar/79++PwsLCU5oZAKAtaLa3gEtLS6OioiIiIgYMGBCPPPJIvPrqqxERsXnz5ti+fXsUFxdHRMSTTz4ZF198cbz55ptx2WWXxeLFi2Py5MkxderUiIiYN29erFmzpt6rgPfff3889NBDccMNN0RERL9+/aKqqiqWLFkSkyZNatBea2pq4uGHH46HHnrohI87fPhwHD58uO76gQMHGnQcAIDWoNleASwtLa13vaioKPbs2RPV1dVRXFxcF38REYMGDYqePXtGdXV1RERUV1dHeXl5vfVHXt+7d2/s3LkzpkyZEt26dau7zJs3L2pqahq0z127dsXo0aPjxhtvrAvO41m4cGH06NGj7nLkDAAAbUWzvQLYsWPHetfz8vKitrY2siyLvLy8ox5/vNuPpba2NiI+fxv48ssvr3df+/btT3qPu3btiquuuirKy8vjRz/60Zc+/q677opZs2bVXT9w4IAIBADanBb/LuBBgwbFjh07YufOnXXxVFVVFfv374+SkpKIiCgpKYn169fHzTffXLdu/fr1db/u1atXnHPOObFt27aYOHFio/bxq1/9Kq666qoYOnRoLFu2LNq1+/IXQ/Pz8yM/P79RxwMAaC1aPABHjRoVpaWlMXHixFi8eHF8+umnceutt8aIESOirKwsIiJmzpwZkyZNirKyshg+fHisXLkytmzZEv379697nsrKypgxY0YUFBTEmDFj4vDhw7Fx48b46KOP6r1Kdyy7du2KkSNHRt++feOHP/xh7N27t+6+3r17N8/gAACtRIsHYF5eXqxatSpuu+22uPLKK6Ndu3YxevToePjhh+seM378+KipqYk5c+bEoUOH4pvf/GZMnz49Xn755brHTJ06Nbp06RI/+MEPYvbs2dG1a9cYPHhw3H777V+6h1deeSXee++9eO+99+Lcc8+td1+WZU02KwBAa9QsAbh27dqjblu1alXdr/v27RsvvPDCCZ9j7ty5MXfu3Hq3PfDAA/WuT5gwISZMmNDg/d1yyy1xyy23NHgdAMDpIMn/Cg4AIGWnZQAuWLCg3o+HOfIyZsyYXG8PACCnTsv/C3jatGkxbty4Y97XuXPnFt4NAEDrcloGYGFhof/WDQDgOE7Lt4ABADg+AQgAkBgBCACQGAEIAJAYAQgAkBgBCACQGAEIAJAYAQgAkBgBCACQGAEIAJAYAQgAkBgBCACQGAEIAJAYAQgAkBgBCACQGAEIAJAYAQgAkBgBCACQGAEIAJAYAQgAkJgOud4ADZdlx79v7+6G39ca1uT6+C2xJtfHb+yaXB/fnE27JtfHb8o1J5LC78+W+tzg9OQVQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIwFYsL69x959oXUutaehzfbVX0x6/JfbcmDU+NuY0Z9PNeaJZTqS1fmwas6aljs/pRwACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkps0EYGVlZQwZMiTX2wAAaPPaTAA2tfnz58ewYcOiS5cu0bNnz1xvBwCgxSQbgJ988knceOONMX369FxvBQCgRTVLAI4cOTJmzJgRs2fPjsLCwujdu3dUVlbW3b9jx464/vrro1u3blFQUBDjxo2L3bt313uORYsWRa9evaJ79+4xZcqUOHTo0FHHWbZsWZSUlESnTp1i4MCB8eijj570Hr///e/HHXfcEYMHD270nAAAbVGzvQK4YsWK6Nq1a2zYsCEefPDBuO+++2L16tWRZVmMHTs29u3bF+vWrYvVq1dHTU1NjB8/vm7tM888ExUVFTF//vzYuHFjFBUVHRV3S5c
"text/html": [
"\n",
" <div style=\"display: inline-block;\">\n",
" <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
" Figure\n",
" </div>\n",
" <img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAJtRJREFUeJzt3X901fV9+PFX+GH4GTC1QtCgoEyCkuKI0zCO4JGjcOwqx07ogSkeoCvYCso2UDyaVPmlrTtsOh1FD1DlHOumous2FZzQbRYUJ4dKMqaBCqdMwKHA2oHVfL5/+DWHlB+SkOQmvB+Pc+453B/v+3m/Pgnhyb0k5GVZlgUAAMlol+sNAADQsgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiBCAAQGIEIABAYgQgAEBiOuR6A21ZbW1t7Nq1K7p37x55eXm53g4AcBKyLIuDBw9Gnz59ol27NF8LE4CnYNeuXVFcXJzrbQAAjbBz584499xzc72NnBCAp6B79+4R8fknUEFBQY53AwCcjAMHDkRxcXHdn+MpEoCn4Iu3fQsKCgQgALQxKf/zrTTf+AYASJgABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjP8L+HRQWxvx4Yef//qssyLatfvy+9rimlwfP5U9m7P1Ht+c5sz18VvDnDSNjEbbv39/FhHZ/v37c7uR3buzLOLzy+7dJ3dfW1yT6+Onsmdztt7jm9OcuT5+a5izCbSaP79zSFIDACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGALZBeXmfX47lq72Ov+5497WGNbk+fkusyfXxG7sm18c3Z9OuyfXxm3LNiaTw+7OlPjc4PQlAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxLSZAKysrIwhQ4bkehsAAG1emwnApvTLX/4ypkyZEv369YvOnTvHBRdcEBUVFfHJJ5/kemsAAM2uQ643kAv/+Z//GbW1tbFkyZK48MIL45133olvf/vb8etf/zp++MMf5np7AADNqlleARw5cmTMmDEjZs+eHYWFhdG7d++orKysu3/Hjh1x/fXXR7du3aKgoCDGjRsXu3fvrvccixYtil69ekX37t1jypQpcejQoaOOs2zZsigpKYlOnTrFwIED49FHHz2p/Y0ePTqWLVsW11xzTfTv3z++8Y1vxJ//+Z/Hc889d0pzAwC0Bc32FvCKFSuia9eusWHDhnjwwQfjvvvui9WrV0eWZTF27NjYt29frFu3LlavXh01NTUxfvz4urXPPPNMVFRUxPz582Pjxo1RVFR0VNwtXbo07r777pg/f35UV1fHggUL4p577okVK1Y0ar/79++PwsLCU5oZAKAtaLa3gEtLS6OioiIiIgYMGBCPPPJIvPrqqxERsXnz5ti+fXsUFxdHRMSTTz4ZF198cbz55ptx2WWXxeLFi2Py5MkxderUiIiYN29erFmzpt6rgPfff3889NBDccMNN0RERL9+/aKqqiqWLFkSkyZNatBea2pq4uGHH46HHnrohI87fPhwHD58uO76gQMHGnQcAIDWoNleASwtLa13vaioKPbs2RPV1dVRXFxcF38REYMGDYqePXtGdXV1RERUV1dHeXl5vfVHXt+7d2/s3LkzpkyZEt26dau7zJs3L2pqahq0z127dsXo0aPjxhtvrAvO41m4cGH06NGj7nLkDAAAbUWzvQLYsWPHetfz8vKitrY2siyLvLy8ox5/vNuPpba2NiI+fxv48ssvr3df+/btT3qPu3btiquuuirKy8vjRz/60Zc+/q677opZs2bVXT9w4IAIBADanBb/LuBBgwbFjh07YufOnXXxVFVVFfv374+SkpKIiCgpKYn169fHzTffXLdu/fr1db/u1atXnHPOObFt27aYOHFio/bxq1/9Kq666qoYOnRoLFu2LNq1+/IXQ/Pz8yM/P79RxwMAaC1aPABHjRoVpaWlMXHixFi8eHF8+umnceutt8aIESOirKwsIiJmzpwZkyZNirKyshg+fHisXLkytmzZEv379697nsrKypgxY0YUFBTEmDFj4vDhw7Fx48b46KOP6r1Kdyy7du2KkSNHRt++feOHP/xh7N27t+6+3r17N8/gAACtRIsHYF5eXqxatSpuu+22uPLKK6Ndu3YxevToePjhh+seM378+KipqYk5c+bEoUOH4pvf/GZMnz49Xn755brHTJ06Nbp06RI/+MEPYvbs2dG1a9cYPHhw3H777V+6h1deeSXee++9eO+99+Lcc8+td1+WZU02KwBAa9QsAbh27dqjblu1alXdr/v27RsvvPDCCZ9j7ty5MXfu3Hq3PfDAA/WuT5gwISZMmNDg/d1yyy1xyy23NHgdAMDpIMn/Cg4AIGWnZQAuWLCg3o+HOfIyZsyYXG8PACCnTsv/C3jatGkxbty4Y97XuXPnFt4NAEDrcloGYGFhof/WDQDgOE7Lt4ABADg+AQgAkBgBCACQGAEIAJAYAQgAkBgBCACQGAEIAJAYAQgAkBgBCACQGAEIAJAYAQgAkBgBCACQGAEIAJAYAQgAkBgBCACQGAEIAJAYAQgAkBgBCACQGAEIAJAYAQgAkJgOud4ADZdlx79v7+6G39ca1uT6+C2xJtfHb+yaXB/fnE27JtfHb8o1J5LC78+W+tzg9OQVQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIwFYsL69x959oXUutaehzfbVX0x6/JfbcmDU+NuY0Z9PNeaJZTqS1fmwas6aljs/pRwACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkps0EYGVlZQwZMiTX2wAAaPPaTAA2tfnz58ewYcOiS5cu0bNnz1xvBwCgxSQbgJ988knceOONMX369FxvBQCgRTVLAI4cOTJmzJgRs2fPjsLCwujdu3dUVlbW3b9jx464/vrro1u3blFQUBDjxo2L3bt313uORYsWRa9evaJ79+4xZcqUOHTo0FHHWbZsWZSUlESnTp1i4MCB8eijj570Hr///e/HHXfcEYMHD270nAAAbVGzvQK4YsWK6Nq1a2zYsCEefPDBuO+++2L16tWRZVmMHTs29u3bF+vWrYvVq1dHTU1NjB8
" </div>\n",
" "
],
"text/plain": [
"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# plot with lines for deadlines\n",
"fig, ax = plt.subplots()\n",
"for i, record in enumerate(records):\n",
" ax.broken_barh([(record.start_time, record.end_time - record.start_time)], (name_to_id[record.node_name] - 0.4, 0.8), facecolors='blue')\n",
"\n",
"# draw a vertical line for each deadline\n",
"for deadline in deadlines:\n",
" # may have to adjust the y value depending on your chain layout\n",
" ax.plot([deadline.deadline, deadline.deadline], [0, num_nodes], color='red')\n",
"\n",
"ax.set_yticks(range(num_nodes))\n",
"ax.set_yticklabels(name_to_id.keys())\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 2
}