Throughput Tool Comparision
There are a number of open-source command line tools available for Unix that measure memory-to-memory network throughput. Some of the more popular tools include:
- iperf2 (also see iperf HOWTO)
- iperf3 (also see iperf HOWTO)
- nuttcp (also see nuttcp HOWTO)
Each of these tools has slightly different features, and slightly different architectures, so you should not expect any one tool to have everything you need. Its best to be familiar with multiple tools, and use the right tool for your particular use case.
One key difference is whether or not the tool is single-threaded or multi-threaded. If you want to test parallel stream performance, you should use a multi-threaded tool such as iperf2, or iperf3 v3.16+.
Feature | iperf2.0.13+ | iperf3.16+ | nuttcp 8.x |
multi-threading | -P | -P | |
JSON output | --json | ||
CSV output | -y | ||
FQ-based pacing | --fq-rate | --fq-rate | |
multicast support | --ttl | -m | |
bi-directional testing | --dualtest | --bidir | |
retransmit and CWND report | -e | on by default | -br / -bc |
skip TCP slow start | --omit | ||
set TCP congestion control alg. | -Z | --congestion | |
zero-copy (sendfile) | --zerocopy | ||
UDP burst mode | -Ri#/# | ||
Select CPU core | -A | -xc#/# | |
MS Windows support | yes | no | no |
Note that all three of these tools are under active development, and the the list of unique features for a given tool will likely change over time. iperf3 features are focused on high-speed networking, and iperf2 features are more focused on wireless networking.
Based on our experience, we recommend the following:
- Use iperf2 for MS Windows-based tests, or if you want to try one if iperf2's newer options
- Use nuttcp for high-speed UDP testing
- Use iperf3 otherwise. In particular if you want detailed JSON output. Yes, we are a bit biased. :-)
For all 3 tools we recommend running the latest version, as all tools have been getting important updates every few months. In particular, there are known UDP issues with iperf2.0.5 and iperf3.1.4 or earlier, and these versions should be avoided for UDP testing.
Use of these tools in perfSONAR
perfSONAR's pScheduler tool can be used to run all of these tools.
The basic commands for each tool are:
pscheduler task --tool [tool name] throughput --dest receive_host --source send_host [tool options]
iperf3 is the default if --tool is not specified.
For the full list of options supported by pScheduler, run:
pscheduler task throughput --help
Note that not all options are supported by all tools.
More Information
- iperf3 known issues
- wikipedia page on iperf/iperf2/iperf3