-
Notifications
You must be signed in to change notification settings - Fork 13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
End-to-End Latency Analysis per Message #34
Comments
Happy to hear you like it!
Yeah, the callback duration is simply the time difference between just before the user callback is called and just after it returns. It's not quite straightforward looking at the code, but it's the difference between the
This is indeed possible using the tracing instrumentation. See Section IV-A (Transport Links) in this paper: https://arxiv.org/pdf/2204.10208.
You're talking about linking a message being received (and handled by a callback) to a message being published by that callback? See Section IV-B (Causal Message Links), specifically the "direct case," in the paper I linked to above. All of this allows you to get the end-to-end latency of a processing pipeline and visualize it. I'd recommend reading the full paper! This is all implemented in the Eclipse Trace Compass Incubator (not in Using this information, you can split the end-to-end latency time into ROS 2 internal latency, network latency, etc. However, it could be broken down further (see Section VIII in the paper, for example). One latency component that's especially interesting and which I haven't looked into yet is the delay between the message reception inside the middleware and the start of the callback execution, because this depends on the executor. The executor of course has a big influence of the performance of a ROS 2 application. Let me know if you have any questions. |
Hi, thanks for the extensive explanations!
Ah great, yeah I was lacking a bit the information about what each of the attributes inside the python library really represent. Yes, I saw this paper as well and just recognized that it explains what the
I tried also the tool but had a bit problems understanding what I actually see 😁 As I was unable to find instructions/explanations about the different views and how to tune it (e.g. which exact timestamps are visualized, how to visualize callback duration,..) and had the feeling using this library might be better in the long run, especially when I want to add custom trace points for the kernel execution time |
Hey,
First I wanted to say thanks for your nice tracing framework and analysis library.
I am currently adjusting it a bit to evaluate the impact of hardware acceleration in ROS 2.
I wanted to evaluate memory, cpu usages,.. but also ros-related overhead.
As far as I can tell, your library provides the callback duration out of the box, which is most likely the time
RCLCPP_HANDLE
takes to handle a callback (using the term from this paper Latency Analysis of ROS2 Multi-Node Systems - https://arxiv.org/pdf/2101.02074)The callback is a nice way to inspect the execution time of a kernel, but I wish to further investigate the latency per topic and end-to-end latency of the system to approximate the "communication overhead".
(my communication system is rather trivial and is a basically a chain of publications/callbacks with only minor topics being consumed even multiple times)
My question was if the current data structure already supports the linking of
publish_handle
andsubscription_handle
based on a topic such that once can unambiguously link a published message start time to a taken message start time.The second link I wanted to get by connecting a subscription to a callback which gives me a rough time when the publication should start.
This second link I have also still not fully figured out, as I cannot get something other than
None
being returned fromget_subscription_reference_info
.Could you perhaps give me some insights into the data structure and if I need to create/append further information to the traces or simply expose further information from the internal data structures?
The text was updated successfully, but these errors were encountered: