iperf3 with tls support
Go to file
2014-04-24 10:19:13 -07:00
config Regen. 2014-03-20 09:58:27 -07:00
docs s/esnet.github.io/software.es.net/ 2014-04-22 10:46:31 -07:00
examples Commit a version of the patch for #125 for testing. 2014-04-16 16:23:13 -07:00
src Only set sockets to non-blocking mode on the sending side of the 2014-04-23 15:01:27 -07:00
.gitignore Fix breakage due to iperf.h depending on the autoconf config.h file but 2014-04-14 13:33:33 -07:00
aclocal.m4 Regen. 2014-03-20 09:58:27 -07:00
AUTHORS updates for 3.0 release 2013-11-10 09:37:10 -08:00
bootstrap.sh MacPorts installs libtoolize as glibtoolize. Autodetect this and DTRT. 2014-03-20 09:46:04 -07:00
configure Regen. 2014-04-14 14:49:39 -07:00
configure.ac Make iperf built from master have a distinct version number string. 2014-04-24 10:19:13 -07:00
INSTALL Commented 'AX_LIB_SOCKET_NSL' out of configure.ac to fix build problem. 2012-08-20 14:35:58 -07:00
LICENSE Happy 2014. 2014-01-07 16:12:34 -08:00
make_release Make this work on old git (1.7). 2014-03-26 11:05:40 -07:00
Makefile.am automake / libtool support for programs in the examples/ subdirectory. 2014-03-20 09:52:09 -07:00
Makefile.in Regen. 2014-04-14 13:37:47 -07:00
README.md Merge branch 'features/issue-125' 2014-04-17 12:14:58 -07:00
RELEASE_NOTES Update release notes on mainline. 2014-03-26 10:04:03 -07:00
test_commands.sh added test for -C flag 2013-12-20 15:05:21 -08:00

iperf3: A TCP, UDP, and SCTP network bandwidth measurement tool

Summary

iperf is a tool for active measurements of the maximum achievable bandwidth on IP networks. It supports tuning of various parameters related to timing, protocols, and buffers. For each test it reports the bandwidth, loss, and other parameters.

This version, sometimes referred to as iperf3, is a redesign of an original version developed at NLANR/DAST. iperf3 is a new implementation from scratch, with the goal of a smaller, simpler code base, and a library version of the functionality that can be used in other programs. iperf3 also a number of features found in other tools such as nuttcp and netperf, but were missing from the original iperf. These include, for example, a zero-copy mode and optional JSON output. Note that iperf3 is NOT backwards compatible with the original iperf.

Primary development for iperf3 takes place on CentOS Linux, FreeBSD, and MacOS X. At this time, these are the only officially supported platforms, however there have been some reports of success with OpenBSD, Android, other Linux distributions.

iperf3 is principally developed by ESnet / Lawrence Berkleley National Laboratory. It is released under a three-clause BSD license.

For more information see: https://github.com/esnet/iperf

Obtaining iperf3

Downloads of iperf3 are available at:

http://stats.es.net/software/

To check out the most recent code, do:

git clone https://github.com/esnet/iperf.git

Building iperf3

Prerequisites:

None.

Building

./configure; make; make install

(Note: If configure fails, try running ./bootstrap.sh first)

Invoking iperf3

iperf3 includes a manual page listing all of the command-line options. The manual page is the most up-to-date reference to the various flags and parameters.

For sample command line usage, see:

http://fasterdata.es.net/performance-testing/network-troubleshooting-tools/iperf-and-iperf3/

Using the default options, iperf is meant to show typical well designed application performance. 'Typical well designed application' means avoiding artificial enhancements that work only for testing (such as splice()'ing the data to /dev/null). iperf does also have flags for 'extreme best case' optimizations but they must be explicitly activated.

These flags include:

-Z, --zerocopy            use a 'zero copy' sendfile() method of sending data
-A, --affinity n/n,m      set CPU affinity

Bug Reports

Before submitting a bug report, try checking out the latest version of the code, and confirm that its not already fixed. Then submit to: https://github.com/esnet/iperf/issues

Changes from iperf 2.x

New options:

-V, --verbose             more detailed output than before
-J, --json                output in JSON format
-Z, --zerocopy            use a 'zero copy' sendfile() method of sending data
-O, --omit N              omit the first n seconds (to ignore slowstart)
-T, --title str           prefix every output line with this string
-F, --file name           xmit/recv the specified file
-A, --affinity n/n,m      set CPU affinity (Linux and FreeBSD only)
-k, --blockcount #[KMG]   number of blocks (packets) to transmit (instead 
                          of -t or -n)
-L, --flowlabel           set IPv6 flow label (Linux only)

Changed flags:

-C, --linux-congestion    set congestion control algorithm (Linux only)
                          (-Z in iperf2)

Deprecated options:

Not planning to support these iperf2 flags. If you really miss these options, please submit a request in the issue tracker:

-d, --dualtest           Do a bidirectional test simultaneously
-r, --tradeoff           Do a bidirectional test individually
-T, --ttl                time-to-live, for multicast (default 1)
-x, --reportexclude [CDMSV]   exclude C(connection) D(data) M(multicast) 
                              S(settings) V(server) reports
-y, --reportstyle C      report as a Comma-Separated Values

Also deprecated is the ability to set the options via environment variables.

Known Issues

  • UDP performance: iperf2/iperf3 both only are only about 50% as fast as nuttcp in UDP mode. We are looking into this, but in the meantime, if you want to get UDP above 5Gbps, we recommend using nuttcp instead (http://www.nuttcp.net/).

  • The -Z flag sometimes hangs on OSX.

  • On OpenBSD, the server seems to require a "-4" argument, implying that it can only be used with IPv4.

  • When specifying the TCP buffer size using the "-w" flag on Linux, Linux doubles the value you pass in. (You can see this using iperf3's debug flag). But then the CWND does not actually ramp up to the doubled value, but only to about 75% of the doubled value. This appears to be by design.

  • On some platforms (observed on at least one version of Ubuntu Linux), it might be necessary to invoke "ldconfig" manually after doing a "make install" before the iperf3 executable can find its shared library. (Issue #153)