iPerf3 is a tool for active measurements of the maximum achievable bandwidth on IP networks. It supports tuning of various parameters related to timing, buffers and protocols (TCP, UDP, SCTP with IPv4 and IPv6). For each test it reports the bandwidth, loss, and other parameters. This is a new implementation that shares no code with the original iPerf and also is not backwards compatible. iPerf was orginally developed by NLANR/DAST. iPerf3 is principally developed by ESnet / Lawrence Berkeley National Laboratory. It is released under a three-clause BSD license.
Features
- TCP and SCTP
- Measure bandwidth
- Report MSS/MTU size and observed read sizes.
- Support for TCP window size via socket buffers.
- UDP
- Client can create UDP streams of specified bandwidth.
- Measure packet loss
- Measure delay jitter
- Multicast capable
- Cross-platform: Windows, Linux, Android, MacOS X, FreeBSD, OpenBSD, NetBSD, VxWorks, Solaris,...
- Client and server can have multiple simultaneous connections (-P option).
- Server handles multiple connections, rather than quitting after a single test.
- Can run for specified time (-t option), rather than a set amount of data to transfer (-n or -k option).
- Print periodic, intermediate bandwidth, jitter, and loss reports at specified intervals (-i option).
- Run the server as a daemon (-D option)
- Use representative streams to test out how link layer compression affects your achievable bandwidth (-F option).
- A server accepts a single client simultaneously (iPerf3) multiple clients simultaneously (iPerf2)
- New: Ignore TCP slowstart (-O option).
- New: Set target bandwidth for UDP and (new) TCP (-b option).
- New: Set IPv6 flow label (-L option)
- New: Set congestion control algorithm (-C option)
- New: Use SCTP rather than TCP (--sctp option)
- New: Output in JSON format (-J option).
- New: Disk read test (server: iperf3 -s / client: iperf3 -c testhost -i1 -F filename)
- New: Disk write tests (server: iperf3 -s -F filename / client: iperf3 -c testhost -i1)
What's New
Change between iPerf 2.0, iPerf 3.0 and iPerf 3.1
iPerf2 features currently supported by iPerf3 :
- TCP and UDP tests
- Set port (-p)
- Setting TCP options: No delay, MSS, etc.
- Setting UDP bandwidth (-b)
- Setting socket buffer size (-w)
- Reporting intervals (-i)
- Setting the iPerf buffer (-l)
- Bind to specific interfaces (-B)
- IPv6 tests (-6)
- Number of bytes to transmit (-n)
- Length of test (-t)
- Parallel streams (-P)
- Setting DSCP/TOS bit vectors (-S)
- Change number output format (-f)
New Features in iPerf 3.0:
- Dynamic server (client/server parameter exchange) – Most server options from iPerf2 can now be dynamically set by the client
- Client/server results exchange
- A iPerf3 server accepts a single client simultaneously (multiple clients simultaneously for iPerf2)
- iPerf API (libiperf) – Provides an easy way to use, customize and extend iPerf functionality
- -R, Reverse test mode – Server sends, client receives
- -O, --omit N : omit the first n seconds (to ignore TCP slowstart)
- -b, --bandwidth n[KM] for TCP (only UDP for IPERF 2): Set target bandwidth to n bits/sec (default 1 Mbit/sec for UDP, unlimited for TCP).
- -V, --verbose : more detailed output than before
- -J, --json : output in JSON format
- -Z, --zerocopy : use a 'zero copy' sendfile() method of sending data. This uses much less CPU.
- -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 (cores are numbered from 0 - Linux and FreeBSD only)
- -k, --blockcount #[KMG] : number of blocks (packets) to transmit (instead of -t or -n)
- -4, --version4 : only use IPv4
- -6, --version6 : only use IPv6
- -L, --flowlabel : set IPv6 flow label (Linux only)
- -C, --linux-congestion : set congestion control algorithm (Linux and FreeBSD only) (-Z in iPerf2)
- -d, --debug : emit debugging output. Primarily (perhaps exclusively) of use to developers.
- -s, --server : iPerf2 can handle multiple client requests. iPerf3 will only allow one iperf connection at a time.
New Features in iPerf 3.1:
- -I, --pidfile file write a file with the process ID, most useful when running as a daemon.
- --cport : Specify the client-side port.
- --sctp use SCTP rather than TCP (Linux, FreeBSD and Solaris).
- --udp-counters-64bit : Support very long-running UDP tests, which could cause a counter to overflow
- --logfile file : send output to a log file.
iPerf2 Features Not Supported by iPerf3:
- Bidirectional testing (-d / -r)
- Data transmitted from stdin (-I)
- TTL : time-to-live, for multicast (-T)
- Exclude C(connection) D(data) M(multicast) S(settings) V(server) reports (-x)
- Report as a Comma-Separated Values (-y)
- Compatibility mode allows for use with older version of iPerf (-C)