Latency DFG (almost done)
This commit is contained in:
parent
696491c401
commit
3c495ebf18
1 changed files with 264 additions and 49 deletions
|
@ -35,16 +35,7 @@
|
|||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"found converted file: /home/adlink/.ros/tracing/autoware-trace/converted\n",
|
||||
" [100%] [Ros2Handler]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def pkl_filename_from_file_timestamp(file_path):\n",
|
||||
" if os.path.exists(file_path):\n",
|
||||
|
@ -400,27 +391,7 @@
|
|||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Did not find pickled ROS objects, extracting...\n",
|
||||
"Processed 61 nodes\n",
|
||||
"Processed 264 publishers\n",
|
||||
"Processed 212 subscriptions\n",
|
||||
"Processed 67 timers\n",
|
||||
"Processed 31 timer-node links\n",
|
||||
"Processed 201 subscription objects\n",
|
||||
"Processed 483 callback objects\n",
|
||||
"Processed 483 callback symbols\n",
|
||||
"Processed 183512 publish instances\n",
|
||||
"Processed 390810 callback instances\n",
|
||||
"Processed 161 topics\n",
|
||||
"Caching dynamic properties...\n",
|
||||
"Cached node properties\n",
|
||||
"Cached publisher properties\n",
|
||||
"Cached subscription properties\n",
|
||||
"Cached timer properties\n",
|
||||
"Cached callback object properties\n",
|
||||
"Cached callback symbol properties\n",
|
||||
"Cached topic properties\n",
|
||||
"Pickling...\n",
|
||||
"Found pickled ROS objects from previous session, restoring...\n",
|
||||
"Done.\n"
|
||||
]
|
||||
}
|
||||
|
@ -1049,17 +1020,9 @@
|
|||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"(483/483) Processing done. annerNode*, std::_Placeholder<1>))(std::shared_ptr<nav_msgs::msg::OccupancyGrid_<std::allocator<void> > const>)>cator<void> > const>)>t>)>::shared_ptr<rmw_request_id_t>, std::shared_ptr<rcl_interfaces::srv::ListParameters_Request_<std::allocator<void> > >, std::shared_ptr<rcl_interfaces::srv::ListParameters_Response_<std::allocator<void> > >)#6} > >)#5}d> > >)#4}\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"#################################################\n",
|
||||
"# Data structures & helpers\n",
|
||||
|
@ -1133,8 +1096,8 @@
|
|||
"# publications of each callback\n",
|
||||
"#################################################\n",
|
||||
"\n",
|
||||
"cb_to_scored_topic: Dict[CallbackObject, Set[Tuple[Topic, float]]] = {}\n",
|
||||
"topic_to_cb: Dict[Topic, Set[CallbackObject]] = {}\n",
|
||||
"cb_to_scored_pub: Dict[CallbackObject, Set[Tuple[Publisher, float]]] = {}\n",
|
||||
"topic_to_dep_cb: Dict[Topic, Set[CallbackObject]] = {}\n",
|
||||
"pub_cb_to_lat_stats: Dict[Tuple[Publisher, CallbackObject], LatencyStats] = {}\n",
|
||||
"\n",
|
||||
"with ProgressPrinter(\"Processing\", len(callback_objects)) as p:\n",
|
||||
|
@ -1159,9 +1122,9 @@
|
|||
" raise RuntimeError(f\"Callback owners other than timers/subscriptions cannot be handled: {cb.owner} {cb.owner_info}\")\n",
|
||||
"\n",
|
||||
" for topic in dep_topics: \n",
|
||||
" if topic not in topic_to_cb:\n",
|
||||
" topic_to_cb[topic] = set()\n",
|
||||
" topic_to_cb[topic].add(cb)\n",
|
||||
" if topic not in topic_to_dep_cb:\n",
|
||||
" topic_to_dep_cb[topic] = set()\n",
|
||||
" topic_to_dep_cb[topic].add(cb)\n",
|
||||
"\n",
|
||||
" for pub in topic.publishers:\n",
|
||||
" pub_cb_to_lat_stats[(pub, cb)] = pub_use_latencies(cb.callback_instances, pub.instances)\n",
|
||||
|
@ -1178,11 +1141,263 @@
|
|||
" continue\n",
|
||||
" score = olap_count / len(pub.instances)\n",
|
||||
"\n",
|
||||
" if cb not in cb_to_scored_topic: \n",
|
||||
" cb_to_scored_topic[cb] = set()\n",
|
||||
" cb_to_scored_topic[cb].add((pub.topic, score))\n",
|
||||
" if cb not in cb_to_scored_pub: \n",
|
||||
" cb_to_scored_pub[cb] = set()\n",
|
||||
" cb_to_scored_pub[cb].add((pub, score))\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 16,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"CallbackObject(id=187651165396336, timestamp=1652795532459592148, callback_object=187651165396560)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292182224, timestamp=1652795553353366144, callback_object=281471292182448)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292197968, timestamp=1652795553355495871, callback_object=281471292198192)\n",
|
||||
"0.0020408163265306124\n",
|
||||
"CallbackObject(id=281471292182224, timestamp=1652795553353366144, callback_object=281471292182448)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292182224, timestamp=1652795553353366144, callback_object=281471292182448)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292182224, timestamp=1652795553353366144, callback_object=281471292182448)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292182224, timestamp=1652795553353366144, callback_object=281471292182448)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292197968, timestamp=1652795553355495871, callback_object=281471292198192)\n",
|
||||
"0.0020408163265306124\n",
|
||||
"CallbackObject(id=281471292182224, timestamp=1652795553353366144, callback_object=281471292182448)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292197968, timestamp=1652795553355495871, callback_object=281471292198192)\n",
|
||||
"0.0010204081632653062\n",
|
||||
"CallbackObject(id=187651234961136, timestamp=1652795547893732076, callback_object=187651238518768)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651165396336, timestamp=1652795532459592148, callback_object=187651165396560)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651165396336, timestamp=1652795532459592148, callback_object=187651165396560)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651170508848, timestamp=1652795532579426254, callback_object=187651170509072)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651165396336, timestamp=1652795532459592148, callback_object=187651165396560)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471221778768, timestamp=1652795553042749441, callback_object=281473165106896)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471555210208, timestamp=1652795547762505370, callback_object=281471555210432)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651170508848, timestamp=1652795532579426254, callback_object=187651170509072)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651165396336, timestamp=1652795532459592148, callback_object=187651165396560)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651170508848, timestamp=1652795532579426254, callback_object=187651170509072)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292197968, timestamp=1652795553355495871, callback_object=281471292198192)\n",
|
||||
"0.0010204081632653062\n",
|
||||
"CallbackObject(id=187651170508848, timestamp=1652795532579426254, callback_object=187651170509072)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187650864529200, timestamp=1652795532337451714, callback_object=187650864602416)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651170508848, timestamp=1652795532579426254, callback_object=187651170509072)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471221778768, timestamp=1652795553042749441, callback_object=281473165106896)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292182224, timestamp=1652795553353366144, callback_object=281471292182448)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651235161760, timestamp=1652795547898579693, callback_object=187651234142864)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281472225931680, timestamp=1652795547642350503, callback_object=281472225979584)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651165396336, timestamp=1652795532459592148, callback_object=187651165396560)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651612752912, timestamp=1652795532707997110, callback_object=187651612753136)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471621334496, timestamp=1652795532529885598, callback_object=281471621745744)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651170508848, timestamp=1652795532579426254, callback_object=187651170509072)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651165396336, timestamp=1652795532459592148, callback_object=187651165396560)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651165396336, timestamp=1652795532459592148, callback_object=187651165396560)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292182224, timestamp=1652795553353366144, callback_object=281471292182448)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651235161760, timestamp=1652795547898579693, callback_object=187651234142864)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292182224, timestamp=1652795553353366144, callback_object=281471292182448)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651165396336, timestamp=1652795532459592148, callback_object=187651165396560)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471221778768, timestamp=1652795553042749441, callback_object=281473165106896)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471221778768, timestamp=1652795553042749441, callback_object=281473165106896)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651233978848, timestamp=1652795532571224945, callback_object=187651234202256)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651165396336, timestamp=1652795532459592148, callback_object=187651165396560)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292197968, timestamp=1652795553355495871, callback_object=281471292198192)\n",
|
||||
"0.0020408163265306124\n",
|
||||
"CallbackObject(id=281471555210208, timestamp=1652795547762505370, callback_object=281471555210432)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651235161760, timestamp=1652795547898579693, callback_object=187651234142864)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651165396336, timestamp=1652795532459592148, callback_object=187651165396560)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651235237936, timestamp=1652795532747324130, callback_object=187651235240112)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651235237936, timestamp=1652795532747324130, callback_object=187651235240112)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651170508848, timestamp=1652795532579426254, callback_object=187651170509072)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292182224, timestamp=1652795553353366144, callback_object=281471292182448)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292182224, timestamp=1652795553353366144, callback_object=281471292182448)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651165396336, timestamp=1652795532459592148, callback_object=187651165396560)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187650884621760, timestamp=1652795532673805669, callback_object=187650884621984)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651613335744, timestamp=1652795532750644582, callback_object=187651613335968)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651236095968, timestamp=1652795532787465153, callback_object=187651235983520)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651165396336, timestamp=1652795532459592148, callback_object=187651165396560)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292182224, timestamp=1652795553353366144, callback_object=281471292182448)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471221778768, timestamp=1652795553042749441, callback_object=281473165106896)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471221778768, timestamp=1652795553042749441, callback_object=281473165106896)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292182224, timestamp=1652795553353366144, callback_object=281471292182448)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651165396336, timestamp=1652795532459592148, callback_object=187651165396560)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471221778768, timestamp=1652795553042749441, callback_object=281473165106896)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651234961136, timestamp=1652795547893732076, callback_object=187651238518768)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651239927824, timestamp=1652795548009185046, callback_object=187651239928048)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281472225931680, timestamp=1652795547642350503, callback_object=281472225979584)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471555210208, timestamp=1652795547762505370, callback_object=281471555210432)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292182224, timestamp=1652795553353366144, callback_object=281471292182448)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292182224, timestamp=1652795553353366144, callback_object=281471292182448)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292182224, timestamp=1652795553353366144, callback_object=281471292182448)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292201536, timestamp=1652795553354910549, callback_object=281471292201760)\n",
|
||||
"0.003061224489795918\n",
|
||||
"CallbackObject(id=187650857760512, timestamp=1652795532488243650, callback_object=187650857873600)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292197968, timestamp=1652795553355495871, callback_object=281471292198192)\n",
|
||||
"0.0010204081632653062\n",
|
||||
"CallbackObject(id=187651235161760, timestamp=1652795547898579693, callback_object=187651234142864)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651170508848, timestamp=1652795532579426254, callback_object=187651170509072)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651235161760, timestamp=1652795547898579693, callback_object=187651234142864)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471221778768, timestamp=1652795553042749441, callback_object=281473165106896)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651165396336, timestamp=1652795532459592148, callback_object=187651165396560)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292814832, timestamp=1652795553365321826, callback_object=281471292815056)\n",
|
||||
"0.0010204081632653062\n",
|
||||
"CallbackObject(id=281471555210208, timestamp=1652795547762505370, callback_object=281471555210432)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187650717532576, timestamp=1652795532640963472, callback_object=187650717753424)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651240214128, timestamp=1652795548020788847, callback_object=187651240224032)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651234424656, timestamp=1652795547843757259, callback_object=187651234738032)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=281471292197968, timestamp=1652795553355495871, callback_object=281471292198192)\n",
|
||||
"0.0010204081632653062\n",
|
||||
"CallbackObject(id=281472225931680, timestamp=1652795547642350503, callback_object=281472225979584)\n",
|
||||
"1.0\n",
|
||||
"CallbackObject(id=187651170508848, timestamp=1652795532579426254, callback_object=187651170509072)\n",
|
||||
"1.0\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"ename": "AttributeError",
|
||||
"evalue": "'NoneType' object has no attribute 'id'",
|
||||
"output_type": "error",
|
||||
"traceback": [
|
||||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||||
"\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
|
||||
"\u001b[0;32m<ipython-input-16-3ead38a6dee2>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 45\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 46\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mc\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mlatency_graph\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mends\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 47\u001b[0;31m \u001b[0mnet\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd_edge\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mid\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"OUTPUT\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marrows\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"to\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 48\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 49\u001b[0m \u001b[0mnet\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtoggle_physics\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
||||
"\u001b[0;31mAttributeError\u001b[0m: 'NoneType' object has no attribute 'id'"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"\n",
|
||||
"pub_to_scored_cb = {}\n",
|
||||
"\n",
|
||||
"verts = set(callback_objects.values())\n",
|
||||
"edges = {}\n",
|
||||
"for send_cb, scored_pubs in cb_to_scored_pub.items():\n",
|
||||
" for pub, score in scored_pubs:\n",
|
||||
" if score == 0.0:\n",
|
||||
" continue\n",
|
||||
" pub_to_scored_cb[pub] = (send_cb, score)\n",
|
||||
" receiver_cbs = [sub.subscription_object.callback_object for sub in pub.subscriptions if sub.subscription_object is not None]\n",
|
||||
" for recv_cb in receiver_cbs:\n",
|
||||
" edges[(send_cb, recv_cb)] = (pub.topic, pub_cb_to_lat_stats[(pub, recv_cb)])\n",
|
||||
"\n",
|
||||
"inputs = set()\n",
|
||||
"outputs = set()\n",
|
||||
"for topic in out_topics:\n",
|
||||
" outputs.update([print(tup) for pub in topic.publishers if pub in pub_to_scored_cb for tup in pub_to_scored_cb[pub] ])\n",
|
||||
"for topic in in_topics:\n",
|
||||
" inputs.update([sub.subscription_object.callback_object for sub in topic.subscriptions if sub.subscription_object is not None])\n",
|
||||
"\n",
|
||||
"latency_graph = LatencyGraph(verts, edges, inputs, outputs)\n",
|
||||
"\n",
|
||||
"#################################################\n",
|
||||
"# Filter callback objects and topics\n",
|
||||
"#################################################\n",
|
||||
"\n",
|
||||
"#################################################\n",
|
||||
"# Plot DFG\n",
|
||||
"#################################################\n",
|
||||
"\n",
|
||||
"from pyvis.network import Network\n",
|
||||
"net = Network(notebook=True, height='750px', width='100%', bgcolor='#ffffff', font_color='#000000')\n",
|
||||
"\n",
|
||||
"net.add_node(\"INPUT\", label=\"Input\", size=100, color=\"green\", physics=False, x=0, y=0)\n",
|
||||
"net.add_node(\"OUTPUT\", label=\"Output\", size=100, color=\"red\", physics=False, x=6000, y=0)\n",
|
||||
"\n",
|
||||
"for vert in latency_graph.verts:\n",
|
||||
" net.add_node(vert.id, label=vert.owner_info, size=20, color=\"#333\")\n",
|
||||
"\n",
|
||||
"for (c1, c2), (topic, lat_stats) in latency_graph.edges.items():\n",
|
||||
" net.add_edge(c1.id, c2.id, title=topic.name)\n",
|
||||
"\n",
|
||||
"for c in latency_graph.starts:\n",
|
||||
" net.add_edge(\"INPUT\", c.id, arrows=\"to\")\n",
|
||||
"\n",
|
||||
"for c in latency_graph.ends:\n",
|
||||
" net.add_edge(c.id, \"OUTPUT\", arrows=\"to\")\n",
|
||||
"\n",
|
||||
"net.toggle_physics(True)\n",
|
||||
"net.show_buttons()\n",
|
||||
"net.show(\"latency_graph.html\")\n",
|
||||
"\n",
|
||||
"#################################################\n",
|
||||
"# Transitively add latencies to get E2E latency\n",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue