Usage: iperf3 [-s|-c host] [options]
iperf3 [-h|--help] [-v|--version]
Server or Client:
-p, --port # server port to listen on/connect to
-f, --format [kmgtKMGT] format to report: Kbits, Mbits, Gbits, Tbits
-i, --interval # seconds between periodic throughput reports
-I, --pidfile file write PID file
-F, --file name xmit/recv the specified file
-A, --affinity n[,m] set CPU affinity core number to n (the core the process will use)
(optional Client only m - the Server's core number for this test)
-B, --bind <host>[%<dev>] bind to the interface associated with the address <host>
(optional <dev> equivalent to `--bind-dev <dev>`)
--bind-dev <dev> bind to the network interface with SO_BINDTODEVICE
-V, --verbose more detailed output
-J, --json output in JSON format
--json-stream output in line-delimited JSON format
--json-stream-full-output output in JSON format with JSON streams enabled
--logfile f send output to a log file
--forceflush force flushing output at every interval
--timestamps<=format> emit a timestamp at the start of each output line
(optional "=" and format string as per strftime(3))
--rcv-timeout # idle timeout for receiving data (default 120000 ms)
--snd-timeout # timeout for unacknowledged TCP data
(in ms, default is system settings)
--cntl-ka[=#/#/#] use control connection TCP keepalive - KEEPIDLE/KEEPINTV/KEEPCNT
each value is optional with system settings default
-m, --mptcp use MPTCP rather than plain TCP
-d, --debug[=#] emit debugging output
(optional "=" and debug level: 1-4. Default is 4 - all messages)
-v, --version show version information and quit
-h, --help show this message and quit
Server specific:
-s, --server run in server mode
-D, --daemon run the server as a daemon
-1, --one-off handle one client connection then exit
--server-bitrate-limit #[KMG][/#] server's total bit rate limit (default 0 = no limit)
(optional slash and number of secs interval for averaging
total data rate. Default is 5 seconds)
--idle-timeout # restart idle server after # seconds in case it
got stuck (default - no timeout)
--server-max-duration # max time, in seconds, that an iperf test can run against the server
--rsa-private-key-path path to the RSA private key used to decrypt
authentication credentials
--authorized-users-path path to the configuration file containing user
credentials
--time-skew-threshold time skew threshold (in seconds) between the server
and client during the authentication process
--use-pkcs1-padding use pkcs1 padding at your own risk
Client specific:
-c, --client <host>[%<dev>] run in client mode, connecting to <host>
(option <dev> equivalent to `--bind-dev <dev>`)
-u, --udp use UDP rather than TCP
--connect-timeout # timeout for control connection setup (ms)
-b, --bitrate #[KMG][/#] target bitrate in bits/sec (0 for unlimited)
(default 1 Mbit/sec for UDP, unlimited for TCP)
(optional slash and packet count for burst mode)
--pacing-timer #[KMG] set the Server timing for pacing, in microseconds (default 1000)
(deprecated - for servers using older versions backward compatibility)
--fq-rate #[KMG] enable fair-queuing based socket pacing in
bits/sec (Linux only)
-t, --time # time in seconds to transmit for (default 10 secs)
-n, --bytes #[KMG] transmit until the end of the interval when the client sent or received
(per direction) at least this number of bytes (instead of -t or -k)
-k, --blockcount #[KMG] transmit until the end of the interval when the client sent or received
(per direction) at least this number of blocks (instead of -t or -n)
-l, --length #[KMG] length of buffer to read or write
(default 128 KB for TCP, dynamic or 1460 for UDP)
--cport <port> bind to a specific client port (TCP and UDP, default: ephemeral port)
-P, --parallel # number of parallel client streams to run
-R, --reverse run in reverse mode (server sends, client receives)
--bidir run in bidirectional mode.
Client and server send and receive data.
-w, --window #[KMG] set send/receive socket buffer sizes
(indirectly sets TCP window size)
-C, --congestion <algo> set TCP congestion control algorithm (Linux and FreeBSD only)
-M, --set-mss # set TCP/SCTP maximum segment size (MTU - 40 bytes)
-N, --no-delay set TCP/SCTP no delay, disabling Nagle's Algorithm
-4, --version4 only use IPv4
-6, --version6 only use IPv6
-S, --tos N set the IP type of service, 0-255.
The usual prefixes for octal and hex can be used,
i.e. 52, 064 and 0x34 all specify the same value.
--dscp N or --dscp val set the IP dscp value, either 0-63 or symbolic (one of: af11-13, af21-23,
af31-33, af41-43, cs1-7, ef, va, lowdelay, throughput, reliability).
Numeric values can be decimal, octal and hex (see --tos above).
-L, --flowlabel N set the IPv6 flow label (only supported on Linux)
-Z, --zerocopy use a 'zero copy' method of sending data
--skip-rx-copy ignore received messages using MSG_TRUNC option
-O, --omit N perform pre-test for N seconds and omit the pre-test statistics
-T, --title str prefix every output line with this string
--extra-data str data string to include in client and server JSON
--get-server-output get results from server
--udp-counters-64bit use 64-bit counters in UDP test packets
--gsro enable UDP GSO/GRO on both client and server (client-only option)
--repeating-payload use repeating pattern in payload, instead of
randomized payload (like in iperf2)
--dont-fragment set IPv4 Don't Fragment flag
--username username for authentication
--rsa-public-key-path path to the RSA public key used to encrypt
authentication credentials
[KMG] indicates options that support a K/M/G suffix for kilo-, mega-, or giga-
iperf3 homepage at: https://software.es.net/iperf/
Report bugs to: https://github.com/esnet/iperf
Options (69)
| Option | Description | Source |
|---|---|---|
-p, --port n | Set server port to listen on/connect to to n (default 5201) | help + man |
-f, --format | [kmgtKMGT] format to report: Kbits, Mbits, Gbits, Tbits | help |
-i, --interval n | Pause n seconds between periodic throughput reports; | help + man |
-I, --pidfile file | Write a file with the process ID. | help + man |
-F, --file name | Use a file as the source (on the sender) or sink (on the receiver) of data, rather than just generating random data or throwing it away. | help + man |
-A, --affinity n | set CPU affinity core number to n (the core the process will use) (optional Client only m - the Server's core number for this test) | help + man |
--bind-dev dev | bind to the network interface with SO_BINDTODEVICE | help + man |
-V, --verbose | Produce more detailed output. | help + man |
-J, --json | Output in JSON format instead of the default human-readable output. | help + man |
--json-stream | Output in line-delimited JSON format instead of the default human-readable output. | help + man |
--logfile f | Send output to a log file. | help + man |
--forceflush | Force flushing output at every interval. | help + man |
--timestamps format | emit a timestamp at the start of each output line (optional "=" and format string as per strftime(3)) | help |
--rcv-timeout # | Set idle timeout for receiving data during active tests. | help + man |
--snd-timeout # | Set timeout for unacknowledged TCP data (on both test and control connections) This option can be used to force a faster test timeout in case of a network partition during a test. | help + man |
--cntl-ka #/#/# | use control connection TCP keepalive - KEEPIDLE/KEEPINTV/KEEPCNT each value is optional with system settings default | help |
-m, --mptcp | Use the MPTCP variant for the current protocol. | help + man |
-d, --debug # | emit debugging output (optional "=" and debug level: 1-4. | help + man |
-v, --version | Show version information and quit. | help + man |
-h, --help | show this message and quit | help + man |
-s, --server | Run in server mode. | help + man |
-D, --daemon | Run the server in background as a daemon. | help + man |
-1, --one-off | Handle (at most) one client connection, then exit. | help + man |
--server-bitrate-limit #[KMG][/# | server's total bit rate limit (default 0 = no limit) (optional slash and number of secs interval for averaging total data rate. | help |
--idle-timeout # | restart idle server after # seconds in case it got stuck (default - no timeout) | help + man |
--server-max-duration # | The maximum time, in seconds, that an iperf client can run against the server. | help + man |
--rsa-private-key-path file | Path to the RSA private key (not password-protected) used to decrypt authentication credentials from the client (if built with OpenSSL support). | help + man |
--authorized-users-path file | Path to the configuration file containing authorized users credentials to run iperf tests (if built with OpenSSL support). | help + man |
--time-skew-threshold seconds | Specify the allowable time skew threshold (in seconds) between the server and client during the authentication process. | help + man |
--use-pkcs1-padding | This option is only meaningful when using iperf3's authentication features. | help + man |
-u, --udp | Use UDP for tests rather than TCP. | help + man |
--connect-timeout # | Set timeout for establishing the initial control connection to the server, in milliseconds. | help + man |
-b, --bitrate #[KMG][/# | target bitrate in bits/sec (0 for unlimited) (default 1 Mbit/sec for UDP, unlimited for TCP) (optional slash and packet count for burst mode) | help |
--pacing-timer #[KMG | set the Server timing for pacing, in microseconds (default 1000) (deprecated - for servers using older versions backward compatibility) | help |
--fq-rate #[KMG | enable fair-queuing based socket pacing in bits/sec (Linux only) | help |
-t, --time n | # time in seconds to transmit for (default 10 secs) | help + man |
-n, --bytes | #[KMG] transmit until the end of the interval when the client sent or received (per direction) at least this number of bytes (instead of -t or -k) | help |
-k, --blockcount #[KMG | transmit until the end of the interval when the client sent or received (per direction) at least this number of blocks (instead of -t or -n) | help |
-l, --length | #[KMG] length of buffer to read or write (default 128 KB for TCP, dynamic or 1460 for UDP) | help |
--cport port | Bind data streams to a specific TCP or UDP client port (for TCP and UDP only, default is to use an ephemeral port). | help + man |
-P, --parallel n | Set the number of parallel client streams to run. | help + man |
-R, --reverse | Reverse the direction of a test, so that the server sends data to the client. | help + man |
--bidir | Test in both directions (normal and reverse), with both the client and server sending and receiving data simultaneously | help + man |
-w, --window | #[KMG] set send/receive socket buffer sizes (indirectly sets TCP window size) | help |
-C, --congestion algo | Set the congestion control algorithm (Linux and FreeBSD only). | help + man |
-M, --set-mss n | Set the TCP/SCTP maximum segment size (MTU - 40 bytes). | help + man |
-N, --no-delay | Set the TCP/SCTP no delay option, disabling Nagle's Algorithm. | help + man |
-4, --version4 | Force the use of IPv4. | help + man |
-6, --version6 | Force the use of IPv6. | help + man |
-S, --tos N | set the IP type of service, 0-255. | help + man |
--dscp, --dscp N | set the IP dscp value, either 0-63 or symbolic (one of: af11-13, af21-23, af31-33, af41-43, cs1-7, ef, va, lowdelay, throughput, reliability). | help + man |
-L, --flowlabel N | Set the IPv6 flow label (currently only supported on Linux). | help + man |
-Z, --zerocopy | Use a "zero copy" method of sending data, such as sendfile(2), instead of the usual write(2). | help + man |
--skip-rx-copy | Ignored received packet data, using the MSG_TRUNC flag to the recv(2) system call. | help + man |
-O, --omit N | Perform pre-test for n seconds and omit the pre-test statistics, to skip past the TCP slow-start period. | help + man |
-T, --title str | Prefix every output line with the string str. | help + man |
--extra-data str | Specify an extra data string field to be included in JSON output. | help + man |
--get-server-output | Get the output from the server. | help + man |
--udp-counters-64bit | Use 64-bit counters in UDP test packets. | help + man |
--gsro | Enable UDP Generic Segmentation Offload (GSO) on the sender and Generic Receive Offload (GRO) on the receiver, where supported by the operating system and network hardware (currently Linux only). | help + man |
--repeating-payload | use repeating pattern in payload, instead of randomized payload (like in iperf2) | help + man |
--dont-fragment | Set the IPv4 Don't Fragment (DF) bit on outgoing packets. | help + man |
--username username | Specify username to use for authentication to the iperf server (if built with OpenSSL support). | help + man |
--rsa-public-key-path file | Set path to the RSA public key used to encrypt authentication credentials (if built with OpenSSL support). | help + man |
--json-stream-full-output | Output in JSON format with JSON streams enabled. (in the manual page but not in --help) | man |
--sctp | Use SCTP for tests rather than TCP (FreeBSD and Linux). (in the manual page but not in --help) | man |
--no-fq-socket-pacing | This option is deprecated and will be removed. (in the manual page but not in --help) | man |
-X, --xbind name | Bind SCTP associations to a specific subset of links using sctp_bindx(3). (in the manual page but not in --help) | man |
--nstreams n | Set number of SCTP streams. (in the manual page but not in --help) | man |