| -s | Start server mode |
| -p <port> | Listen on custom port (default: 5201) |
| -B <addr> | Bind to specific interface/IP |
| -D | Run as daemon (background) |
| -1 | Handle one client then exit |
| --forceflush | Force output flush after each interval |
| -c <host> | Connect to server at host/IP |
| -p <port> | Connect to custom port |
| -t <sec> | Test duration in seconds (default: 10) |
| -n <bytes> | Transfer exactly N bytes instead of timed |
| -i <sec> | Interval between reports (default: 1) |
| -R | Reverse mode (server→client) |
| --bidir | Bidirectional simultaneous test |
| -b <rate> | Target bitrate (K/M/G suffix). Default: unlimited TCP, 1M UDP |
| -b 0 | Unlimited (TCP only) |
| -u | Use UDP instead of TCP |
| -b <rate> | Bandwidth (required for UDP, default 1M) |
| -l <bytes> | UDP datagram / packet size |
| -w <size> | Socket/window buffer size (K/M) |
| -M <mss> | Set TCP max segment size |
| -N | Disable Nagle's algorithm |
| -4 / -6 | Force IPv4 or IPv6 |
| -P <n> | Parallel streams |
| -J | Output results as JSON |
| --logfile | Save output to file |
| -f <fmt> | Format: k/m/g/K/M/G (bits or bytes) |
| -V | Verbose output |
| -d | Debug output |
| Bitrate | Throughput per interval |
| Retr | TCP retransmits (lower = better) |
| Jitter | UDP only — variance in delay |
| Lost/Total | UDP only — packet loss count/% |
| Cwnd | TCP congestion window size |
| -O <sec> | Omit first N seconds (skip slow-start) |
| --connect-timeout | Connection timeout in ms |
| --rcv-timeout | Idle read timeout (ms) |
| -T <title> | Add prefix string to output |
| -Z | Use zero-copy send (sendfile) |
| --pacing-timer | Pacing timer interval (us) |
| --get-server-output | Retrieve output from server side |
| --authorized-users-file | Path to user credentials file |
| --rsa-private-key-path | RSA key for auth |
| --username | Client username for auth |
| Firewall | Open TCP/UDP 5201 on server (or use -p) |
| Skip slow-start | Use -O 2 for cleaner TCP results |
| CPU bound? | Use -Z (zero-copy) to reduce CPU overhead |
| VPN testing | Run server on both ends; test each direction with -R |
| Parallel streams | -P 4 often reveals true max throughput on high-latency paths |
| Only 1 client | iPerf3 accepts one client at a time; use -s per port for multi |
| -s | Server mode |
| -c <h> | Client → host |
| -p <n> | Port |
| -t <s> | Duration (sec) |
| -i <s> | Report interval |
| -n <b> | Transfer N bytes |
| -u | UDP mode |
| -b <r> | Bandwidth/bitrate |
| -P <n> | Parallel streams |
| -R | Reverse direction |
| --bidir | Bidirectional |
| -w <b> | Window size |
| -4 / -6 | IPv4 / IPv6 |
| -J | JSON output |
| -f <k/m/g> | Output format |
| -O <s> | Omit N seconds |
| -Z | Zero-copy mode |
| -D | Daemon (server) |