Package: iperf
Version: 2.0.12+dfsg1-2
Severity: normal
Dear Maintainer,
iperf package on Buster persistently fails at rate higher around 2.2Gbps. This
was not a problem on version 2.0.9+dfsg1-1, and it now introduces problems for
performance measuring on our 25GbE network. I found the root cause to
be an overflow error:
yan@133m27:~$ iperf -c localhost -p 11113 -b 2147483647 -i 1 -t 5
------------------------------------------------------------
Client connecting to localhost, TCP port 11113
TCP window size: 3.76 MByte (default)
------------------------------------------------------------
[ 3] local 127.0.0.1 port 48726 connected with 127.0.0.1 port 11113
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 256 MBytes 2.15 Gbits/sec
[ 3] 1.0- 2.0 sec 256 MBytes 2.15 Gbits/sec
[ 3] 2.0- 3.0 sec 256 MBytes 2.15 Gbits/sec
[ 3] 3.0- 4.0 sec 256 MBytes 2.15 Gbits/sec
[ 3] 4.0- 5.0 sec 256 MBytes 2.15 Gbits/sec
[ 3] 0.0- 5.0 sec 1.25 GBytes 2.15 Gbits/sec
yan@133m27:~$ iperf -c localhost -p 11113 -b 2147483648 -i 1 -t 5
------------------------------------------------------------
Client connecting to localhost, TCP port 11113
TCP window size: 3.76 MByte (default)
------------------------------------------------------------
[ 3] local 127.0.0.1 port 55514 connected with 127.0.0.1 port 11113
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 5.0 sec 128 KBytes 210 Kbits/sec
yan@133m27:~$ iperf -c localhost -p 11113 -b 3g -i 1 -t 5
------------------------------------------------------------
Client connecting to localhost, TCP port 11113
TCP window size: 3.76 MByte (default)
------------------------------------------------------------
[ 3] local 127.0.0.1 port 58056 connected with 127.0.0.1 port 11113
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 5.0 sec 128 KBytes 210 Kbits/sec
I created a patch which fixed the problem. With the patch, the package
now works properly:
yan@133m27:~$ ./iperf -c localhost -p 11113 -b 3g -i 1 -t 5
------------------------------------------------------------
Client connecting to localhost, TCP port 11113
TCP window size: 3.76 MByte (default)
------------------------------------------------------------
[ 3] local 127.0.0.1 port 50612 connected with 127.0.0.1 port 11113
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 358 MBytes 3.00 Gbits/sec
[ 3] 1.0- 2.0 sec 358 MBytes 3.00 Gbits/sec
[ 3] 2.0- 3.0 sec 358 MBytes 3.00 Gbits/sec
[ 3] 3.0- 4.0 sec 358 MBytes 3.00 Gbits/sec
[ 3] 4.0- 5.0 sec 358 MBytes 3.00 Gbits/sec
[ 3] 0.0- 5.0 sec 1.75 GBytes 3.00 Gbits/sec
-- System Information:
Debian Release: 10.4
Architecture: amd64 (x86_64)
Index: iperf2/src/Client.cpp
===================================================================
--- iperf2.orig/src/Client.cpp
+++ iperf2/src/Client.cpp
@@ -396,7 +396,7 @@ void Client::RunRateLimitedTCP ( void )
double tokens = 0;
Timestamp time1, time2;
- int var_rate = mSettings->mUDPRate;
+ max_size_t var_rate = mSettings->mUDPRate;
while (InProgress()) {
// Add tokens per the loop time
// clock_gettime is much cheaper than gettimeofday() so
@@ -504,7 +504,7 @@ void Client::RunUDP( void ) {
if (isVaryLoad(mSettings) && mSettings->mUDPRateUnits == kRate_BW) {
static Timestamp time3;
if (now.subSec(time3) >= VARYLOAD_PERIOD) {
- int var_rate = lognormal(mSettings->mUDPRate,variance);
+ max_size_t var_rate = lognormal(mSettings->mUDPRate,variance);
if (var_rate < 0)
var_rate = 0;