Replies: 1 comment
-
I have moved the issue to the new Q&A discussion section, not being a proper issue or bug report. There is no limit in the Fast DDS DataReaders receiving packets per second with the exception of the sample reception and user callback execution time. The network architecture and the QoS settings can affect the percentage of lost packages. You can see some recently performance results for Fast DDS in the RMW OSRF 2021 report. As you mentioned, if your network is lossy, then setting a flow controller is advisable. You can also have a look at the other proposed solutions when sending large data rates. You can also use the Fast DDS Monitor to receive statistics about your network performance, though it will affect Fast DDS performance. |
Beta Was this translation helpful? Give feedback.
-
I use test/performance/throughput to test throughput across multiple hosts. I use one pub and two subs, both subs simultaneously send data on different topics to the pub.
Expected Behavior
I enlarge some kernel's buffers: net.core.rmem_default, net.core.rmem_max, net.ipv4.udp_mem, net.core.netdev_max_backlog
And use ethtool -G eth0 rx 2048 to enlarge eth0's rx buffer
I tested the result of one pub and one sub first, if the payload of the packet is 16, the max send rate is about 24Mbits/sec, the max packets send rate is about 190000 Packs/sec, packet loss is 0.
When there are 2 pubs and a sub, the sub's max receive rate should be 48Mbits/s and the 380000 Packs/sec.
Current Behavior
The send rate of each pub is about 24Mbits/sec and 190000Packs/sec, but the recv rate is about 37Mbits/sec and 290000 Packs/sec, all the other samples are lost. The lost rate is about (380000-290000)/380000 = 24%。
But if I limit the send rate of both subs to 17Mbits/sec and 135000Packs/sec, recv rate is 35Mbits/sec and 270000Packs/sec and packet loss is 0.
System information
Gigabit LAN
As a comparison, I use iperf to test throughput:
I set the UDP packet size to 88 bytes(when fastdds's payload 16bytes, the actual udp packet 88bytes, it seems there is 88-16=72bytes invalid data)
one client and one server: recv rate is 273Mbits/sec and 390000 Packs/sec, packet loss is 0.
two clients and one server: total recv rate is 428Mbits/sec and 600000 Packs/sec, packet loss is 0.
Does FastDDS sub have a upper limit of receiving packets per second?
Do I need to use flow control when several pubs simultaneously sending small packets at high speed in order not to lose packets?
Beta Was this translation helpful? Give feedback.
All reactions