Fast-DDS
Fast-DDS copied to clipboard
[21617] Inconsistent network throughput with LARGE_DATA
Is there an already existing issue for this?
- [X] I have searched the existing issues
Expected behavior
I expect amount of network traffic generated by FastDDS in LARGE_DATA mode to be almost the same as the payload (ROS message size multiplied by publishing rate).
Current behavior
Occasionally, generated network traffic exceeds estimated payload throughput.
There no consistency in how often it happens: on some days it could happen on half of the runs, on other days - maybe one out of ten runs.
Surprisingly, whenever network traffic exceeds the estimated value, it is always almost exactly 3 times higher.
Steps to reproduce
Set up two computers connected via Ethernet. Run publisher on one computer and subscriber on another computer. Publish large messages. Observe network throughput.
Fast DDS version/commit
I use ROS Jazzy, which currently bundles Fast DDS v2.14.1. I also tried ROS Humble with Fast DDS v2.14.3 - same behavior.
Platform/Architecture
Other. Please specify in Additional context section.
Transport layer
TCPv4
Additional context
In my experiments, the publisher is an embedded ARM64 platform:
- 8 core Cortex-A78C, 2.4 GHz
- 8 GB RAM
- Red Hat Linux
- Kernel 5.14.0
Subscriber runs on a desktop PC:
- 24 core AMD Ryzen 9 7900, 5 GHz
- 64 GB RAM
- NixOS 24.05
- Kernel 6.6.40
Computers connected through 1 Gbps switch.
Both computers build ROS2 (with FastDDS) from source code through Nix package manager. I didn't apply any extra patches to FastDDS.
On publisher side, net.core.wmem_max = 200000000
. On subscriber side: net.core.rmem_max = 200000000
.
I emulated two kinds of payload:
- Point cloud: 180000 points, 4 f32 fields per point, 10 Hz. Estimated throughput: 180000 * 4 * 4 * 10 ~ 28 MB/s
- Images: 200 x 200, RGB8, 25 Hz. Estimated throughput: 200 * 200 * 3 * 25 ~ 3 MB/s
XML configuration file
<?xml version="1.0" encoding="UTF-8" ?>
<dds xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles">
<profiles>
<participant
profile_name="large_data_builtin_transports_options"
is_default_profile="true">
<rtps>
<builtinTransports
max_msg_size="10MB"
sockets_size="200MB"
non_blocking="true">LARGE_DATA</builtinTransports>
</rtps>
</participant>
</profiles>
</dds>
Relevant log output
No response
Network traffic capture
No response