Chain-Aware ROS Evaluation Tool (CARET)#
CARET is one of performance analysis tool dedicated with ROS 2 applications. It is able to measure not only callback latency and communication latency, but also path latency, in other words, chain of node or callback. As additional tracepoints are introduced by function hook, tracing resolution is improved.
Features and capabilities are shown below.
- Low overhead with LTTng-based tracepoints for sampling events in ROS/DDS layer
- Flexible tracepoints added by function hooking with LD_PRELOAD
- Python-based API for flexible data analysis and visualization
- Application-layer events tracing by cooperation with TILDE, runtime message tracer
- Performance measurement from several aspects
- Callback latency, frequency, and period
- Topic communication latency, frequency, and period
- Node latency
- Path latency
- End-to-end latency of software if path from input to output is selected
- Visualization of scheduling for callback execution
- Filtering function to ignore specific nodes and topics
- Search of target paths to trace
- Trace of application events like consumption of buffered topic message
/tf(planned for v0.3.x release)
message_filters(supported by TILDE)
image_transport(supported by TILDE)
Tracing flow with CARET#
CARET gives you capability of tracing your application with introducing new tracepoints to ROS and DDS layer while it utilized original tracepoints for
CARET is served as only source code, but not as
apt package, so far.
CARET hooks dedicated functions to those defined in dynamic library in order to add tracepoints.
The fork of rclcpp which has CARET-dedicated tracepoints is delivered. You have to build CARET and your application if you want to use.
After you run your application with CARET, you will measure (trace) your application get a set of trace data. You have to write a configuration file, called architecture file, in which you defines node latency and target path, before you analyze the data set.
You will visualize trace data with the architecture file and
CARET_analyze package, including API for data analysis.
CARET_analyze is designed on assumption that users analyze trace data on Jupyter Notebook.
Refer to these page if you want to try.
Design documents is prepared, but some are written in Japanese.
Some useful tips to get accustomed to CARET, but almost all of them are written in Japanese.
CARET serves powerful API to visualize and analyze performance. API list is located on the other repository,
- API list (external link)
CARET is constructed of the following packages
- CARET_trace ｜ Define tracepoints added by function hooking
- CARET_analyze ｜ Library for scripts to analyze and visualize data
- CARET_analyze_cpp_impl ｜ Efficient helper functions to analyze trace data written in C++
- ros2caret ｜ CLI commands like
- CARET_demos ｜ Demo programs for CARET
- CARET_doc ｜ Documentation
- rclcpp ｜ the forked
rclcppincluding CARET-dedicated tracepoints
- ros2_tracing｜ the forked
ros2_tracingincluding definition of CARET-dedicated tracepoints
This software is based on results obtained from a project subsidized by the New Energy and Industrial Technology Development Organization (NEDO).