I did an UDP iperf 2.0.5-Ubuntu test between two VMs on the same hypervisor. As can be seen in the iperf output below I started my first test with "-b 686M" flag. However, iperf reported that it was able to send traffic only at 633Mbps (92% of target bandwidth). Then, I reduced target bandwidth to 633Mbps. However, again iperf was able to send out traffic only at 604Mbps (95% of target bandwidth). Then I kept doing this until it reached some kind of equilibrium at 561Mbps, where finally target bandwidth matched the actual bandwidth consistently.
What is going on here? Why iperf sends traffic at lower rate that the specified target bandwidth? Obviously from first test run iperf has enough CPU resources to generate traffic at 686Mbps, if it really wanted to.
root@ubuntu:/# iperf -u -c 192.168.71.135 -b 686M -t 10
------------------------------------------------------------
Client connecting to 192.168.71.135, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 208 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.71.136 port 37449 connected with 192.168.71.135 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 754 MBytes 633 Mbits/sec
[ 3] Sent 538085 datagrams
[ 3] Server Report:
[ 3] 0.0-10.0 sec 754 MBytes 633 Mbits/sec 0.012 ms 40/538084 (0.0074%)
[ 3] 0.0-10.0 sec 1 datagrams received out-of-order
root@ubuntu:/# iperf -u -c 192.168.71.135 -b 633M -t 10
------------------------------------------------------------
Client connecting to 192.168.71.135, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 208 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.71.136 port 58953 connected with 192.168.71.135 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 720 MBytes 604 Mbits/sec
[ 3] Sent 513420 datagrams
[ 3] Server Report:
[ 3] 0.0-10.0 sec 720 MBytes 604 Mbits/sec 0.016 ms 49/513419 (0.0095%)
[ 3] 0.0-10.0 sec 1 datagrams received out-of-order
root@ubuntu:/# iperf -u -c 192.168.71.135 -b 604M -t 10
------------------------------------------------------------
Client connecting to 192.168.71.135, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 208 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.71.136 port 45411 connected with 192.168.71.135 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 695 MBytes 583 Mbits/sec
[ 3] Sent 495600 datagrams
[ 3] Server Report:
[ 3] 0.0-10.0 sec 695 MBytes 583 Mbits/sec 0.015 ms 199/495599 (0.04%)
[ 3] 0.0-10.0 sec 1 datagrams received out-of-order
root@ubuntu:/# iperf -u -c 192.168.71.135 -b 583M -t 10
------------------------------------------------------------
Client connecting to 192.168.71.135, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 208 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.71.136 port 56228 connected with 192.168.71.135 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 669 MBytes 561 Mbits/sec
[ 3] Sent 477143 datagrams
[ 3] Server Report:
[ 3] 0.0-10.0 sec 669 MBytes 561 Mbits/sec 0.013 ms 4/477142 (0.00084%)
[ 3] 0.0-10.0 sec 1 datagrams received out-of-order
root@ubuntu:/# iperf -u -c 192.168.71.135 -b 561M -t 10
------------------------------------------------------------
Client connecting to 192.168.71.135, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 208 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.71.136 port 41766 connected with 192.168.71.135 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 669 MBytes 561 Mbits/sec
[ 3] Sent 477264 datagrams
[ 3] Server Report:
[ 3] 0.0-10.0 sec 669 MBytes 561 Mbits/sec 0.013 ms 405/477263 (0.085%)
[ 3] 0.0-10.0 sec 1 datagrams received out-of-order
root@ubuntu:/# iperf -u -c 192.168.71.135 -b 561M -t 10