Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ros2/buildfarm_perf_tests
Performance tests which run regularly on the buildfarm
https://github.com/ros2/buildfarm_perf_tests
Last synced: about 2 months ago
JSON representation
Performance tests which run regularly on the buildfarm
- Host: GitHub
- URL: https://github.com/ros2/buildfarm_perf_tests
- Owner: ros2
- License: apache-2.0
- Created: 2019-09-11T23:13:26.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-05-17T13:53:32.000Z (8 months ago)
- Last Synced: 2024-05-17T14:59:56.277Z (8 months ago)
- Language: C++
- Size: 475 KB
- Stars: 24
- Watchers: 20
- Forks: 7
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# buildfarm perf tests
[![Continuous Integration](https://github.com/ros2/buildfarm_perf_tests/workflows/Continuous%20Integration/badge.svg?branch=master&event=push)](https://github.com/ros2/buildfarm_perf_tests/actions?query=branch%3Amaster+event%3Apush)
## Purpose
This package defines some tests.
On one hand it invokes `perf_test` from Apex.AI's [performance_test](https://gitlab.com/ApexAI/performance_test) package.
This allows you to test performance and latency of several ROS 2 RMW implementations.
On the other hand we are evaluating the additional overhead caused by a single pub/sub topic or one process spinning and detect potential leaks related to theses activities.* There is a test for each RMW:
- CycloneDDS (standalone test)
- FastRTPS (standalone test)
- rmw_connext_cpp
- rmw_cyclonedds_cpp
- rmw_fastrtps_cpp
- rmw_fastrtps_dynamic_cpp
- rmw_opensplice_cpp### Test 1 - Performance Test (Apex.AI)
In this test we are running the Performance Test provided by Apex.AI.
Right now we have [our own fork](https://github.com/ros2/performance_test) because there are some pending pull requests in the official gitlab repository.In this test we are measurement:
- Average latency
- CPU usage (provided by Apex.AI tool)
- Sent/Received messages per second
- Total lost messages
- Max resident set sizeWe are generating two plots per measurement
- [One per-build](http://build.ros2.org/view/Rci/job/Rci__nightly-performance_ubuntu_focal_amd64/lastBuild/)
- [Other over time](http://build.ros2.org/view/Rci/job/Rci__nightly-performance_ubuntu_focal_amd64/plot/)**The test only measures the latency between the same RMW implementation**
| Publisher/Subscriber | rmw_fastrtps_cpp | rmw_opensplice_cpp | rmw_cyclonedds_cpp | rmw_fastrtps_dynamic_cpp | rmw_connext_cpp |
|--------------------------|--------------------------|--------------------------|--------------------------|--------------------------|--------------------------|
| rmw_fastrtps_cpp | :heavy_check_mark: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: |
| rmw_opensplice_cpp | :heavy_multiplication_x: | :heavy_check_mark: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: |
| rmw_cyclonedds_cpp | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_check_mark: | :heavy_multiplication_x: | :heavy_multiplication_x: |
| rmw_fastrtps_dynamic_cpp | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_check_mark: | :heavy_multiplication_x: |
| rmw_connext_cpp | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_multiplication_x: | :heavy_check_mark: |## Test 2 - Simple pub/sub
In this case we are testing one publisher and one subscriber **in different processes** sending a 1kArray at 5Hz.
This will allow us to evaluate additional overhead caused by a single pub/sub topic and detect leaks related to this activity.We measure for both publisher and subscriber:
- Average round trip
- CPU usage ( readed from the filesystem )
- Total lost messages
- Received/Sent messages per second
- Physical memory
- Resident anonymous memory
- Virtual memoryAgain we plot measurement:
- [One per-build](http://build.ros2.org/view/Rci/job/Rci__nightly-performance_ubuntu_focal_amd64/lastBuild/)
- [Other over time](http://build.ros2.org/view/Rci/job/Rci__nightly-performance_ubuntu_focal_amd64/plot/)| Publisher/Subscriber | rmw_fastrtps_cpp | rmw_opensplice_cpp | rmw_cyclonedds_cpp | rmw_fastrtps_dynamic_cpp | rmw_connext_cpp |
|--------------------------|--------------------|--------------------|--------------------|--------------------------|--------------------|
| rmw_fastrtps_cpp | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| rmw_opensplice_cpp | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| rmw_cyclonedds_cpp | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| rmw_fastrtps_dynamic_cpp | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| rmw_connext_cpp | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |## Test 3 - Node spinning
This test creates one process and spins for 1 minute to evaluate ROS 2 overhead and detect obvious leaks.
We measure:
- CPU usage ( readed from file system )
- Physical memory
- Resident anonymous memory
- Virtual memoryAgain we plot measurement:
- [One per-build](http://build.ros2.org/view/Rci/job/Rci__nightly-performance_ubuntu_focal_amd64/lastBuild/)
- [Other over time](http://build.ros2.org/view/Rci/job/Rci__nightly-performance_ubuntu_focal_amd64/plot/Node%20Spinning%20Results/)| DDS | Process 1 |
|--------------------------|-----------|
| rmw_fastrtps_cpp | :heavy_check_mark: |
| rmw_opensplice_cpp | :heavy_check_mark: |
| rmw_cyclonedds_cpp | :heavy_check_mark: |
| rmw_fastrtps_dynamic_cpp | :heavy_check_mark: |
| rmw_connext_cpp | :heavy_check_mark: |## Build
1. Install ROS 2 (https://index.ros.org/doc/ros2/Installation/).
1. Source the ROS 2 installation (either `/opt/ros//setup.bash` if installing from binaries, or `~/ros2_ws/install/setup.bash` if building from source):
1. `source /opt/ros//setup.bash` or `source ~/ros2_ws/install/setup.bash`
1. Make a new workspace and clone this repository into it:
1. `mkdir -p ~/performance_ws/src`
1. `cd ~/performance_ws`
1. `wget https://github.com/ros2/buildfarm_perf_tests/raw/master/tools/ros2_dependencies.repos`
1. `vcs import src < ros2_dependencies.repos`
1. `rosdep install --from-path src --ignore-src`
1. Build the local workspace:
1. `colcon build`
1. Source the local workspace:
1. `source install/local_setup.bash`### Run
```bash
colcon test --packages-select buildfarm_perf_tests --event-handlers console_direct+
```## Details
***Note: the graphs presented here are for demonstration purposes only. The data in the graphs are not meant to be accurate or current.***
* Each test runs for **30** seconds with a **1k payload**, but this can be changed using CMake variables.
- `PERF_TEST_RUNTIME`: Maximum number of seconds to run before exiting. Zero runs forever.
- `PERF_TEST_TOPICS`: Topics to use. These are all available topics: `Array1k`, `Array4k`, `Array16k`, `Array32k`, `Array60k`, `Array1m`, `Array2m`, `Struct16`, `Struct256`, `Struct4k`, `Struct32k`, `PointCloud512k`, `PointCloud1m`, `PointCloud2m`, `PointCloud4m`, `Range`, `NavSatFix`, `RadarDetection` and `RadarTrack`.For example, If we want to run the test during `30` seconds using the topic `Array1k`:
```bash
colcon build --packages-select buildfarm_perf_tests --cmake-args -DPERF_TEST_RUNTIME="30" -DPERF_TEST_TOPICS="Array1k;Array4k" --no-warn-unused-cli
```* Each test produces a PNG plot of [various measures](http://build.ros2.org/view/Eci/job/Eci__nightly-performance_ubuntu_bionic_amd64/) across time, displayed in Jenkins using the image gallery plugin.
- These plots are displayed on the build's summary page, and are part of the output artifacts for the build.
![](img/latency.png)* Each test also produces a couple of [aggregated measures](http://build.ros2.org/view/Eci/job/Eci__nightly-performance_ubuntu_bionic_amd64/plot/) in a small csv file, used to plot build-over-build using the Jenkins plot plugin.
- To see these plots, click the "Plots" link on the left side of the JOB summary (not a build summary)
- You should be able to click one of those points to jump to the aforementioned PNG plot that produced that aggregated point.
![](img/agregate_latency.png)
![](img/size.png)
![](img/cpu.png)
![](img/lost_packets.png)
![](img/received_packets.png)
![](img/sent_packets.png)## System metrics collector tool
This tool allows to create statistics based on the name of the process and arguments. This tool allows to collect the following statistics:
- CPU usage (%): This information is fetched from `/proc/stat`.
- CPU memory virtual, ResidentAnonymousMemory and physical: This information is fetched from `/proc/meminfo`.
- Process usage (%): This information is fetched from `/proc/stat`.
- Process memory: a) virtual, b) resident anonymous memory and c) physical: This information is fetched from `/proc/