(as of iperf 2.2.2)
IPerf 2 (this program) is different from the iperf3 found at https://github.com/esnet/iperf. Each can be used to measure network performance, however, they DO NOT interoperate. They are completely independent implementations with different strengths, different options, and different capabilities. Both are under active development.
| Feature | Iperf 2 | Iperf 3 |
|---|---|---|
| Traffic types | ||
| TCP traffic | Y | Y |
| UDP traffic | Y | Y |
| UDP L4S traffic (ECT(1)/L4S marking, Prague or Reno response) | Y (--udp-l4s) | N |
| SCTP traffic | N | Y |
| IPv4 | Y | Y |
| IPv6 | Y | Y |
| Multicast traffic (including SSM) | Y | N |
| TCP connect only | Y | N |
| Layer 2 checks | Y | N |
| Output options | ||
| Human format | Y | Y |
| JSON output | N | Y |
| CSV (basic only) | Y | N |
| Hide IP addresses in output (v4 only) | Y | N |
| Client side server reports | Y | Y |
| Traffic profiles | ||
| Fair queue rate limiting | Y | Y |
| Write rate limiting | Y | Y |
| Read rate limiting (TCP) | Y | N |
| Bursts | Y | Y |
| Isochronous (video) TCP/UDP | Y | N |
| Reverse roles | Y | Y |
| Bidirectional traffic | Y | Y |
| Full duplex same socket | Y | N |
| Bounceback (request/reply RPS-responsiveness test), TCP or UDP L4S | Y (--bounceback) | N |
| Concurrent working load(s) alongside bounceback | Y (--working-load) | N |
| Runtime pause/resume of a working load (SIGUSR1/SIGUSR2), any direction/transport | Y | N |
| Low duty cycle traffic with server side stats | Y | N |
| TCP_NOTSENT_LOWAT with select() (--tcp-write-prefetch) | Y | N |
| TCP near congestion / L4S (ECN, DualPI2 awareness) | Y (--udp-l4s, --near-congestion) | N |
| UDP L4S support with ECN CE marking stats | Y (--udp-l4s) | N |
| Peer version detection | Y (-X) | N |
| TCP congestion control algorithm selection | Y (-Z/--cca) | Y (-C) |
| Variable/random packet length distributions (Markov chain) | Y | N |
| Simulated network delay per flow (TCP_TX_DELAY/SO_TXTIME) | Y (--send-delay) | N |
| Port range support (-p m-n) | Y | N |
| UDP batching via sendmmsg/recvmmsg | Y | N |
| UDP GSO / GRO path | N | Y, since iperf3 3.21 |
| Metrics | ||
| Throughput | Y | Y |
| Responsiveness per second (RPS) | Y | N |
| UDP packets (total/lost) | Y | Y |
| UDP Jitter | Y | Y |
| Packet latencies UDP | Y | N |
| Frame/burst latencies TCP/UDP | Y | N |
| Write-to-read latencies TCP | Y | N |
| Network power (latency/throughput) | Y | N |
| InP - Bytes in queues (Little's law) | Y | N |
| TCP CWND | Y | N |
| TCP retries | Y | Y |
| TCP RTT | Y | Y |
| Send side write delay histograms | Y | N |
| UDP packets per second | Y | N |
| Latency histograms | Y | N |
| TCP connect times | Y | N |
| ECN CE mark counts (received CE-marked packets) | Y (--udp-l4s) | N |
| Bounceback per-direction loss attribution (request vs. reply) | Y | N |
| Bounceback one-way-delay (OWD) / asymmetry, incl. clock-offset-tolerant relative OWD | Y (--trip-times) | N |
| Other | ||
| Multi-threaded parallel tests | Y (always) | Y, since iperf3 3.16 |
| Parallel -P implementation | Threads | Threads per stream since 3.16 (processes in earlier versions) |
| Real-time scheduling | Y | N |
| -t support for server | Y | N |
| TAP virtual interface support (receive only) via --tap-dev | Y | N |
| CPU affinity | N | Y |
| Zero copy | N | Y |
| IPv6 Flow label | N | Y |
| --omit option (skip first samples per time in seconds) | Y | Y |
| Incr dst ip option with -P | Y | N |
| Incr dst port option with -P | Y | N |
| Incr src port option with -P | Y | N |
| Device or interface binding | Y | Y |
| Source port binding | Y | Y |
| MPTCP support | N | Y |
| Scheduled tx start time | Y | N |
| Permit keys (TCP, UDP, and Bounceback, professional edition) | Y | N |
| Python framework (asyncio) | Y (flows) | N |
| Testing WiFi thru 100G | Y | N/A |
| Scaling to 1000+ threads | Y | N/A |
| Official Android client app | Y (this project) | N (third-party wrappers only) |
| Official native Windows build | Y | N (third-party builds only) |