Latency DFG (almost done)

This commit is contained in:
Maximilian Schmeller 2022-06-03 14:57:54 +02:00
parent 696491c401
commit 3c495ebf18

View file

@ -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",