nuttcp
nuttcp is another network test tool, similar to iperf2 and iperf3, that has a number of unique features. perfSONAR currently includes version 8.1.4 of nuttcp. nuttcp version 7.1.1+ has some features that can be quite useful.
Here is a summary of some of these features.
server: nuttcp -S
client: nuttcp -i1 server_hostname
0.8125 MB / 1.00 sec = 6.8150 Mbps 0 retrans
0.7500 MB / 1.00 sec = 6.2907 Mbps 0 retrans
0.7500 MB / 1.00 sec = 6.2907 Mbps 0 retrans
0.8125 MB / 1.00 sec = 6.8150 Mbps 0 retrans
0.8125 MB / 1.00 sec = 6.8150 Mbps 0 retrans
0.7500 MB / 1.00 sec = 6.2907 Mbps 24 retrans
0.6875 MB / 1.00 sec = 5.7665 Mbps 17 retrans
0.8125 MB / 1.00 sec = 6.8150 Mbps 11 retrans
1.0625 MB / 1.00 sec = 8.9119 Mbps 3 retrans
Test the reverse direction:
nuttcp -i1 -r server_hostname
UDP Burst mode
Starting with version 6.2.8, nuttcp includes a 'burst mode' for UDP, which is useful to find paths that are constrained by network devices with not enough buffering.
e.g.: Send 300 Mbps of UDP in bursts of 20 packets for 5 seconds
./nuttcp -u -Ri300m/20 -i 1 -T5 server_hostname
35.7607 MB / 1.00 sec = 299.9241 Mbps 0 / 36619 ~drop/pkt 0.00 ~%loss
35.7617 MB / 1.00 sec = 300.0018 Mbps 0 / 36620 ~drop/pkt 0.00 ~%loss
35.5645 MB / 1.00 sec = 298.3730 Mbps 2 / 36420 ~drop/pkt 0.00549 ~%loss
33.3262 MB / 1.00 sec = 279.5649 Mbps 2253 / 36379 ~drop/pkt 6.19 ~%loss
34.6924 MB / 1.00 sec = 291.0208 Mbps 1095 / 36620 ~drop/pkt 2.99 ~%loss
175.1836 MB / 5.00 sec = 293.7936 Mbps 99 %TX 11 %RX 3350 / 182738 drop/pkt 1.83 %loss
This amount of loss is tolerable. Now send a 300 Mbps in bursts of 50 packets:
./nuttcp -u -Ri300m/50 -i 1 -T5 server_hostname
23.8232 MB / 1.00 sec = 199.8394 Mbps 12238 / 36633 ~drop/pkt 33.41 ~%loss
25.2227 MB / 1.00 sec = 211.5836 Mbps 10783 / 36611 ~drop/pkt 29.45 ~%loss
25.1846 MB / 1.00 sec = 211.2405 Mbps 10816 / 36605 ~drop/pkt 29.55 ~%loss
24.2969 MB / 1.00 sec = 203.8392 Mbps 11754 / 36634 ~drop/pkt 32.08 ~%loss
25.1484 MB / 1.00 sec = 210.8927 Mbps 10864 / 36616 ~drop/pkt 29.67 ~%loss
123.7090 MB / 5.00 sec = 207.5136 Mbps 99 %TX 12 %RX 56470 / 183148 drop/pkt 30.83 %loss
And the level of loss become excessive, showing that some device in the path needs bigger buffers. Note that bursts of > 50 packets is common with TCP over paths with a RTT > 20 ms.
On a 10G network with a 9K MTU, the following has worked to identify a path with buffers that are too small:
If this has no packet loss:
nuttcp -l8972 -T30 -u -w4m -Ri300m/100 -i1 server_hostname
And this has packet loss:
nuttcp -l8972 -T30 -u -w4m -Ri300m/300 -i1 server_hostname
Then likely there is a device with buffers less than 32MB per port in the path.
nuttcp also supports 3rd party mode, similar to pscheduler:
nuttcp -P 5099/5099 -T30 -i2 sendhost receivehost
Testing Multiple NICS, using CPU affinity binding:
nuttcp -i1 -xc 2/2 -Is1 -p 5500 10.26.0.132 & nuttcp -i1 -xc 3/3 -Is2 -p 5501 10.26.0.132
10G+ UDP testing
nuttcp is definitely the best tool for high-speed UDP testing. To get a full 10Gbps using UDP requires the right MTU size (9K), the right packet size (8972), and an larger buffer size. For example:
nuttcp -l8972 -T30 -u -w4m -Ru -i1 192.168.2.11