UDP Throughput – Why Data Transfer Differs in UDP Iperf Measurement?

iperfthroughputudp

I have the following result from a UDP throughput test as measured by iperf3

$ iperf3 -u -t 10 -c 192.168.1.2 -b 100M -V
iperf 3.6+
Linux pi-raspberry1 4.4.38-v7+ #938 SMP Thu Dec 15 15:22:21 GMT 2016 armv7l
Control connection MSS 1448
Setting UDP block size to 1448
Time: Thu, 04 Oct 2018 09:58:29 GMT
Connecting to host 192.168.1.2, port 5201
      Cookie: h3wj4by4mtyobgtq42gsf62s3nfhymg6djry
[  5] local 192.168.1.1 port 40988 connected to 192.168.1.2 port 5201
Starting Test: protocol: UDP, 1 streams, 1448 byte blocks, omitting 0 seconds, 10 second test, tos 0
[ ID] Interval           Transfer     Bitrate         Total Datagrams
[  5]   0.00-1.00   sec  3.34 MBytes  28.0 Mbits/sec  2421
[  5]   1.00-2.00   sec  3.13 MBytes  26.2 Mbits/sec  2264
[  5]   2.00-3.00   sec  2.15 MBytes  18.1 Mbits/sec  1560
[  5]   3.00-4.00   sec   905 KBytes  7.41 Mbits/sec  640
[  5]   4.00-5.00   sec   486 KBytes  3.98 Mbits/sec  344
[  5]   5.00-6.00   sec  2.19 MBytes  18.4 Mbits/sec  1587
[  5]   6.00-7.00   sec  2.55 MBytes  21.4 Mbits/sec  1848
[  5]   7.00-8.00   sec  2.18 MBytes  18.3 Mbits/sec  1576
[  5]   8.00-9.00   sec  2.72 MBytes  22.8 Mbits/sec  1968
[  5]   9.00-10.00  sec  3.21 MBytes  26.9 Mbits/sec  2321
- - - - - - - - - - - - - - - - - - - - - - - - -
Test Complete. Summary Results:
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-10.00  sec  22.8 MBytes  19.1 Mbits/sec  0.000 ms  0/16529 (0%)  sender
[  5]   0.00-10.77  sec  22.8 MBytes  17.8 Mbits/sec  22.003 ms  4/16529 (0.024%)  receiver
CPU Utilization: local/sender 9.8% (1.5%u/8.2%s), remote/receiver 1.5% (0.0%u/1.5%s)

If UDP constantly sends data without caring if they arrived or not, why is it that the amount of MBytes sent differs each second as well as the amount of total Datagrams sent does?
Moreover I see that the same number of MBytes is seen by both the server and the client at the Summary Results, but the Bitrate is not the same, does this have to do with the bigger interval taken into account by the server (10.77 seconds instead of 10)?

Best Answer

Here's a iperf3 client RaspberryPi3B running current Raspbian to a iperf3 server MacbookPro8,2 running current Fedora 29 x86_64, across a cheap DLink DGS-1005A gigabit ethernet switch, same parameters as the pi-raspberry1 test in the question:

$ iperf3 -u -t 10 -c 192.168.255.43 -b 100M -V
iperf 3.1.3
Linux vk5tu 4.14.79-v7+ #1159 SMP Sun Nov 4 17:50:20 GMT 2018 armv7l
Time: Sun, 18 Nov 2018 12:57:31 GMT
Connecting to host 192.168.255.43, port 5201
      Cookie: vk5tu.1542545851.946174.2f2a05466
[  4] local 192.168.255.21 port 43811 connected to 192.168.255.43 port 5201
Starting Test: protocol: UDP, 1 streams, 8192 byte blocks, omitting 0 seconds, 10 second test
[ ID] Interval           Transfer     Bandwidth       Total Datagrams
[  4]   0.00-1.00   sec  10.4 MBytes  86.8 Mbits/sec  1325  
[  4]   1.00-2.00   sec  11.4 MBytes  95.8 Mbits/sec  1462  
[  4]   2.00-3.00   sec  11.4 MBytes  95.8 Mbits/sec  1462  
[  4]   3.00-4.00   sec  11.4 MBytes  95.8 Mbits/sec  1462  
[  4]   4.00-5.00   sec  11.4 MBytes  95.9 Mbits/sec  1463  
[  4]   5.00-6.00   sec  11.4 MBytes  95.8 Mbits/sec  1462  
[  4]   6.00-7.00   sec  11.4 MBytes  95.9 Mbits/sec  1463  
[  4]   7.00-8.00   sec  11.4 MBytes  95.8 Mbits/sec  1462  
[  4]   8.00-9.00   sec  11.4 MBytes  95.9 Mbits/sec  1463  
[  4]   9.00-10.00  sec  11.4 MBytes  95.8 Mbits/sec  1462  
- - - - - - - - - - - - - - - - - - - - - - - - -
Test Complete. Summary Results:
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-10.00  sec   113 MBytes  94.9 Mbits/sec  0.024 ms  0/14486 (0%)  
[  4] Sent 14486 datagrams
CPU Utilization: local/sender 19.3% (0.5%u/18.8%s), remote/receiver 0.1% (0.0%u/0.1%s)

What's the provenance of the pi-raspberry1's software? Compare with the stock current Raspbian: pi-raspberry1's kernel is much older; pi-raspberry1's iperf3 version is newer. If you compiled the newer iperf3 did you do it via the Debian packaging system to make sure you compiled with the same compiler options and patches?

Note the difference in CPU: pi-raspberry1: 9.8% (1.5%u/8.2%s); vk5tu 19.3% (0.5%u/18.8%s). Did you check CPU usage during the test to ensure that the transmission was not CPU-bound? Also the USB bus on the RPi is shared between the ethernet, WLAN and USB ports, so that USB bus needs to have no other traffic whilst running the iperf tests. That pi-raspberry1 used three times as much system CPU than vk5tu whilst doing only 20% of the throughput suggests that either pi-raspberry1 is not recent RPi hardware or that there have been substantial improvements in the kernel from 4.4.38 (Dec 2016) to 4.14.79 (Nov 2018).

Have you repeated the test with a stock current system?

As you can see from the above, it is important to give a lot of information about the test environment when asking about performance issues. Best wishes.

Edit:

For your assistance, here's the same test with no output pacing, to stress the RPi3B:

$ iperf3 -u -t 10 -c 192.168.255.43 -b0 -V
iperf 3.1.3
Linux vk5tu 4.14.79-v7+ #1159 SMP Sun Nov 4 17:50:20 GMT 2018 armv7l
Time: Sun, 18 Nov 2018 13:16:45 GMT
Connecting to host 192.168.255.43, port 5201
      Cookie: vk5tu.1542547005.185182.16ba7c754
[  4] local 192.168.255.21 port 39955 connected to 192.168.255.43 port 5201
Starting Test: protocol: UDP, 1 streams, 8192 byte blocks, omitting 0 seconds, 10 second test
[ ID] Interval           Transfer     Bandwidth       Total Datagrams
[  4]   0.00-1.01   sec  11.6 MBytes  96.4 Mbits/sec  1480  
[  4]   1.01-2.01   sec  11.4 MBytes  95.8 Mbits/sec  1460  
[  4]   2.01-3.00   sec  11.4 MBytes  95.8 Mbits/sec  1460  
[  4]   3.00-4.00   sec  11.4 MBytes  95.8 Mbits/sec  1460  
[  4]   4.00-5.00   sec  11.4 MBytes  95.8 Mbits/sec  1460  
[  4]   5.00-6.01   sec  11.5 MBytes  95.8 Mbits/sec  1470  
[  4]   6.01-7.00   sec  11.4 MBytes  95.8 Mbits/sec  1460  
[  4]   7.00-8.00   sec  11.4 MBytes  95.8 Mbits/sec  1460  
[  4]   8.00-9.00   sec  11.4 MBytes  95.8 Mbits/sec  1460  
[  4]   9.00-10.01  sec  11.5 MBytes  95.9 Mbits/sec  1470  
- - - - - - - - - - - - - - - - - - - - - - - - -
Test Complete. Summary Results:
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-10.01  sec   114 MBytes  95.9 Mbits/sec  0.940 ms  0/11552 (0%)  
[  4] Sent 11552 datagrams
CPU Utilization: local/sender 18.5% (1.1%u/17.4%s), remote/receiver 1.7% (0.2%u/1.4%s)