FYI, I've added a
--bounceback option to iperf 2. One can use the BB cnt as analogous for messages per unit time. It by default turns on TCP_QUICKACK so one can compare the TCP RTT vs the app level bounceback (-i is recommended for tcpinfo sampling.) There is an option to add a full duplex TCP stream to the same dest along with the bounceback traffic. If you use --trip-times you'll get a histogram (BB8) of the one way delays too (clocks must be sync'ed and assumed so)
This is designed to be a simple socket level test. Please do feel free to comment and suggest improvements.
[rjmcmahon@ryzen3950 iperf2-code]$ src/iperf - hidden.com --bounceback -t 10 --trip-times -e --hide-ips
------------------------------------------------------------
Client connecting to (**hidden**), TCP port 5001 with pid 240864 (1 flows)
Write buffer size: 100 Byte
Bounce-back test (size= 100 Byte) (hold=0 usecs)
TOS set to 0x0 and nodelay (Nagle off)
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[ 1] local *.*.*.133%enp4s0 port 55634 connected with *.*.*.123 port 5001 (MSS=1448) (bb len/hold=100/0) (trip-times) (sock=3) (irtt/icwnd=14469/14) (ct=14.52 ms) on 2021-12-19 17:29:23 (PST)
[ ID] Interval Transfer Bandwidth BB cnt=avg/min/max/stdev Rtry Cwnd/RTT
[ 1] 0.00-10.03 sec 178 KBytes 145 Kbits/sec 911=10.982/6.187/21.876/1.883 ms 0 14K/13160 us
[ 1] 0.00-10.03 sec OWD Delays (ms) Cnt=911 To=5.222/0.383/16.277/1.875 From=5.760/5.500/6.091/0.092 Asymmetry=0.538/-10.678/5.421/1.871
[ 1] 0.00-10.03 sec BB8(f)-PDF: bin(w=100us):cnt(911)=62:1,79:1,97:13,98:23,99:65,100:92,101:115,102:135,103:85,104:70,105:43,106:30,107:17,108:15,109:11,110:6,111:3,112:4,113:5,114:5,115:5,116:2,117:4,118:2,119:4,120:5,121:4,122:2,123:3,124:2,125:1,126:3,127:3,128:1,131:1,132:1,133:7,134:1,135:4,138:6,139:6,141:4,142:2,143:4,144:2,145:7,146:6,147:5,148:6,149:6,150:12,151:1,153:3,154:2,155:1,156:4,157:6,158:1,159:4,160:2,162:3,163:2,165:2,166:2,167:3,168:1,169:1,171:1,172:1,177:2,179:1,183:1,187:1,188:1,191:2,197:1,208:1,219:1 (5.00/95.00/99.7%=99/154/197,Outliers=0,obl/obu=0/0) (0.000 ms/0.0)
[rjmcmahon@ryzen3950 iperf2-code]$ src/iperf -c hidden.com --bounceback -t 10 --trip-times -e --hide-ips --bounceback-congest
[ 2] local *.*.*.133 port 55640 connected with *.*.*.123 port 5001 (full-duplex) (trip-times)
[ 1] local *.*.*.133%enp4s0 port 55642 connected with *.*.*.123 port 5001 (MSS=1448) (bb len/hold=100/0) (trip-times) (sock=3) (irtt/icwnd=10580/14) (ct=10.67 ms) on 2021-12-19 17:29:48 (PST)
------------------------------------------------------------
Client connecting to (**hidden**), TCP port 5001 with pid 240911 (1 flows)
Write buffer size: 100 Byte
Bounce-back test (size= 100 Byte) (hold=0 usecs)
TOS set to 0x0 and nodelay (Nagle off)
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[ ID] Interval Transfer Bandwidth
[ 2] 0.00-10.02 sec 7.82 MBytes 6.55 Mbits/sec
[ ID] Interval Transfer Bandwidth BB cnt=avg/min/max/stdev Rtry Cwnd/RTT
[ 1] 0.00-10.09 sec 92.2 KBytes 74.9 Kbits/sec 472=20.788/6.149/128.539/17.973 ms 1 14K/42283 us
[ 1] 0.00-10.09 sec OWD Delays (ms) Cnt=472 To=15.290/1.068/123.623/17.616 From=5.498/4.806/23.336/1.342 Asymmetry=-9.792/-118.707/4.013/17.356
[ 1] 0.00-10.09 sec BB8(f)-PDF: bin(w=100us):cnt(472)=62:1,82:1,91:1,94:5,95:1,96:5,97:6,98:6,99:3,100:6,101:4,102:4,103:3,104:3,105:7,106:6,107:4,108:6,109:2,110:5,111:5,112:2,113:3,114:3,115:4,116:3,117:4,118:1,119:3,120:4,121:3,122:3,123:1,124:2,126:2,127:2,128:1,129:3,132:3,133:1,135:2,136:2,137:5,138:1,139:3,140:8,141:8,142:8,143:9,144:12,145:10,146:14,147:6,148:7,149:4,150:6,151:7,152:3,153:5,154:5,155:4,156:2,157:6,158:8,159:2,160:6,161:11,162:3,163:2,164:6,165:2,166:5,167:3,168:2,169:2,170:7,171:6,172:1,174:2,175:3,176:1,177:1,178:1,179:2,180:1,181:1,182:1,183:3,184:2,186:1,187:3,189:2,190:1,193:2,194:1,195:1,196:2,197:1,199:2,200:2,201:1,202:1,204:4,206:3,208:1,209:1,213:1,216:1,218:1,219:1,220:1,221:1,225:1,226:1,228:1,240:1,248:1,252:1,259:1,262:1,269:1,275:1,276:1,279:1,281:2,282:1,283:1,290:1,291:2,293:2,295:1,297:1,298:1,301:1,304:1,313:1,317:1,319:1,325:1,327:1,330:1,344:1,359:1,360:1,365:1,372:1,375:1,396:1,406:1,412:1,433:1,440:1,442:1,469:1,480:2,485:1,515:1,521:1,533:1,535:1,536:1,543:1,544:1,547:1,559:1,571:1,597:1,600:1,604:1,608:1,663:1,668:1,689:1,735:1,750:1,784:1,810:1,818:1,832:1,840:1,847:1,850:1,884:1,892:1,897:1,924:1,997:1,1010:1,1039:1,1046:1,1177:1,1286:1 (5.00/95.00/99.7%=98/604/1177,Outliers=2,obl/obu=0/0) (0.000 ms/0.0)
[ ID] Interval Transfer Bandwidth Burst Latency avg/min/max/stdev (cnt/size) inP NetPwr Reads=Dist
[ *2] 0.00-10.40 sec 149 MBytes 120 Mbits/sec 243.512/21.708/616.257/106.136 ms (1190/131072) 3.48 MByte 61.58 1567094=900:2894:3359:2773:1327:1282:1624:1760
[SUM] 0.00-10.41 sec 157 MBytes 126 Mbits/sec
CLIENT SPECIFIC OPTIONS
- -b, --bandwidth n[kmgKMG][,n[kmgKMG]] | n[kmgKMG]pps
- set target bandwidth to n bits/sec (default 1 Mbit/sec) or n packets per sec. This may be used with TCP or UDP. Optionally, for variable loads, use format of mean,standard deviation
- --bounceback
- run a tcp bounceback test (set size with -l or --len, defaults to 100 bytes)
- --bounceback-congest
- request a concurrent full-duplex TCP stream
- --bounceback-hold n
- request the server to insert a delay of n milliseconds between its read and write (default is no delay)
- --bounceback-period n
- request the client schedule a send every n milliseconds (w/o option bouncebacks are immediately scheduled. With command option and no optional value given, the interval will be one second.)
- --bounceback-no-quickack
- request the server not set the TCP_QUICKACK socket option (disabling TCP ACK delays) during a bounceback test (see NOTES)
- --burst-period n
Bob