version 1.1.1.2, 2021/03/17 00:36:46
|
version 1.1.1.3, 2023/09/27 11:14:54
|
Line 1
|
Line 1
|
.TH IPERF3 1 "July 2020" ESnet "User Manuals" | .TH IPERF3 1 "September 2022" ESnet "User Manuals" |
.SH NAME |
.SH NAME |
iperf3 \- perform network throughput tests |
iperf3 \- perform network throughput tests |
.SH SYNOPSIS |
.SH SYNOPSIS |
Line 6 iperf3 \- perform network throughput tests
|
Line 6 iperf3 \- perform network throughput tests
|
.I options |
.I options |
.B ] |
.B ] |
.br |
.br |
.B iperf3 -c | .B iperf3 -c |
.I server |
.I server |
.B [ |
.B [ |
.I options |
.I options |
Line 96 test by specifying the --get-server-output flag.
|
Line 96 test by specifying the --get-server-output flag.
|
Either the client or the server can produce its output in a JSON |
Either the client or the server can produce its output in a JSON |
structure, useful for integration with other programs, by passing it |
structure, useful for integration with other programs, by passing it |
the -J flag. |
the -J flag. |
Because the contents of the JSON structure are only competely known | Because the contents of the JSON structure are only completely known |
after the test has finished, no JSON output will be emitted until the |
after the test has finished, no JSON output will be emitted until the |
end of the test. |
end of the test. |
.PP |
.PP |
Line 117 set server port to listen on/connect to to \fIn\fR (de
|
Line 117 set server port to listen on/connect to to \fIn\fR (de
|
pause \fIn\fR seconds between periodic throughput reports; |
pause \fIn\fR seconds between periodic throughput reports; |
default is 1, use 0 to disable |
default is 1, use 0 to disable |
.TP |
.TP |
|
.BR -I ", " --pidfile " \fIfile\fR" |
|
write a file with the process ID, most useful when running as a daemon. |
|
.TP |
.BR -F ", " --file " \fIname\fR" |
.BR -F ", " --file " \fIname\fR" |
Use a file as the source (on the sender) or sink (on the receiver) of |
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. |
data, rather than just generating random data or throwing it away. |
Line 134 In addition, on the client side you can override the s
|
Line 137 In addition, on the client side you can override the s
|
affinity for just that one test, using the \fIn,m\fR form of |
affinity for just that one test, using the \fIn,m\fR form of |
argument. |
argument. |
Note that when using this feature, a process will only be bound |
Note that when using this feature, a process will only be bound |
to a single CPU (as opposed to a set containing potentialy multiple | to a single CPU (as opposed to a set containing potentially multiple |
CPUs). |
CPUs). |
.TP |
.TP |
.BR -B ", " --bind " \fIhost\fR" | .BR -B ", " --bind " \fIhost\fR[\fB%\fIdev\fR]" |
bind to the specific interface associated with address \fIhost\fR. |
bind to the specific interface associated with address \fIhost\fR. |
|
If an optional interface is specified, it is treated as a shortcut |
|
for \fB--bind-dev \fIdev\fR. |
|
Note that a percent sign and interface device name are required for IPv6 link-local address literals. |
.TP |
.TP |
|
.BR --bind-dev " \fIdev\fR" |
|
bind to the specified network interface. |
|
This option uses SO_BINDTODEVICE, and may require root permissions. |
|
(Available on Linux and possibly other systems.) |
|
.TP |
.BR -V ", " --verbose " " |
.BR -V ", " --verbose " " |
give more detailed output | give more detailed output |
.TP |
.TP |
.BR -J ", " --json " " |
.BR -J ", " --json " " |
output in JSON format |
output in JSON format |
Line 153 send output to a log file.
|
Line 164 send output to a log file.
|
force flushing output at every interval. |
force flushing output at every interval. |
Used to avoid buffering when sending output to pipe. |
Used to avoid buffering when sending output to pipe. |
.TP |
.TP |
.BR --timestamps " [\fIformat\fR]" | .BR --timestamps "[\fB=\fIformat\fR]" |
prepend a timestamp at the start of each output line. |
prepend a timestamp at the start of each output line. |
By default, timestamps have the format emitted by |
By default, timestamps have the format emitted by |
.BR ctime ( 1 ). |
.BR ctime ( 1 ). |
Optionally, a format specification can be passed to customize the | Optionally, \fC=\fR followed by |
| a format specification can be passed to customize the |
timestamps, see |
timestamps, see |
.BR strftime ( 3 ). |
.BR strftime ( 3 ). |
|
If this optional format is given, the \fC=\fR must immediately |
|
follow the \fB--timestamps\fR option with no whitespace intervening. |
.TP |
.TP |
|
.BR --rcv-timeout " \fI#\fR" |
|
set idle timeout for receiving data during active tests. The receiver |
|
will halt a test if no data is received from the sender for this |
|
number of ms (default to 12000 ms, or 2 minutes). |
|
.TP |
|
.BR --snd-timeout " \fI#\fR" |
|
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. The required |
|
parameter is specified in ms, and defaults to the system settings. |
|
This functionality depends on the TCP_USER_TIMEOUT socket option, and |
|
will not work on systems that do not support it. |
|
.TP |
.BR -d ", " --debug " " |
.BR -d ", " --debug " " |
emit debugging output. |
emit debugging output. |
Primarily (perhaps exclusively) of use to developers. |
Primarily (perhaps exclusively) of use to developers. |
Line 179 run in server mode
|
Line 206 run in server mode
|
.BR -D ", " --daemon " " |
.BR -D ", " --daemon " " |
run the server in background as a daemon |
run the server in background as a daemon |
.TP |
.TP |
.BR -I ", " --pidfile " \fIfile\fR" |
|
write a file with the process ID, most useful when running as a daemon. |
|
.TP |
|
.BR -1 ", " --one-off |
.BR -1 ", " --one-off |
handle one client connection, then exit. | handle one client connection, then exit. If an idle time is set, the |
| server will exit after that amount of time with no connection. |
.TP |
.TP |
|
.BR --idle-timeout " \fIn\fR" |
|
restart the server after \fIn\fR seconds in case it gets stuck. In |
|
one-off mode, this is the number of seconds the server will wait |
|
before exiting. |
|
.TP |
.BR --server-bitrate-limit " \fIn\fR[KMGT]" |
.BR --server-bitrate-limit " \fIn\fR[KMGT]" |
set a limit on the server side, which will cause a test to abort if |
set a limit on the server side, which will cause a test to abort if |
the client specifies a test of more than \fIn\fR bits per second, or |
the client specifies a test of more than \fIn\fR bits per second, or |
Line 195 the data rate is 5 seconds by default, but can be spec
|
Line 225 the data rate is 5 seconds by default, but can be spec
|
a '/' and a number to the bitrate specifier. |
a '/' and a number to the bitrate specifier. |
.TP |
.TP |
.BR --rsa-private-key-path " \fIfile\fR" |
.BR --rsa-private-key-path " \fIfile\fR" |
path to the RSA private key (not password-protected) used to decrypt | path to the RSA private key (not password-protected) used to decrypt |
authentication credentials from the client (if built with OpenSSL |
authentication credentials from the client (if built with OpenSSL |
support). |
support). |
.TP | .TP |
.BR --authorized-users-path " \fIfile\fR" |
.BR --authorized-users-path " \fIfile\fR" |
path to the configuration file containing authorized users credentials to run | path to the configuration file containing authorized users credentials to run |
iperf tests (if built with OpenSSL support). |
iperf tests (if built with OpenSSL support). |
The file is a comma separated list of usernames and password hashes; |
The file is a comma separated list of usernames and password hashes; |
more information on the structure of the file can be found in the |
more information on the structure of the file can be found in the |
EXAMPLES section. |
EXAMPLES section. |
|
.TP |
|
.BR --time-skew-threshold second " \fIseconds\fR" |
|
time skew threshold (in seconds) between the server and client |
|
during the authentication process. |
.SH "CLIENT SPECIFIC OPTIONS" |
.SH "CLIENT SPECIFIC OPTIONS" |
.TP |
.TP |
.BR -c ", " --client " \fIhost\fR" | .BR -c ", " --client " \fIhost\fR[\fB%\fIdev\fR]" |
run in client mode, connecting to the specified server. |
run in client mode, connecting to the specified server. |
By default, a test consists of sending data from the client to the |
By default, a test consists of sending data from the client to the |
server, unless the \-R flag is specified. |
server, unless the \-R flag is specified. |
|
If an optional interface is specified, it is treated as a shortcut |
|
for \fB--bind-dev \fIdev\fR. |
|
Note that a percent sign and interface device name are required for IPv6 link-local address literals. |
.TP |
.TP |
.BR --sctp |
.BR --sctp |
use SCTP rather than TCP (FreeBSD and Linux) |
use SCTP rather than TCP (FreeBSD and Linux) |
Line 300 test in both directions (normal and reverse), with bot
|
Line 337 test in both directions (normal and reverse), with bot
|
server sending and receiving data simultaneously |
server sending and receiving data simultaneously |
.TP |
.TP |
.BR -w ", " --window " \fIn\fR[KMGT]" |
.BR -w ", " --window " \fIn\fR[KMGT]" |
window size / socket buffer size (this gets sent to the server and used on that side too) | set socket buffer size / window size. |
| This value gets sent to the server and used on that side too; on both |
| sides this option sets both the sending and receiving socket buffer sizes. |
| This option can be used to set (indirectly) the maximum TCP window size. |
| Note that on Linux systems, the effective maximum window size is approximately |
| double what is specified by this option (this behavior is not a bug in iperf3 |
| but a "feature" of the Linux kernel, as documented by tcp(7) and socket(7)). |
.TP |
.TP |
.BR -M ", " --set-mss " \fIn\fR" |
.BR -M ", " --set-mss " \fIn\fR" |
set TCP/SCTP maximum segment size (MTU - 40 bytes) |
set TCP/SCTP maximum segment size (MTU - 40 bytes) |
Line 348 Use a "zero copy" method of sending data, such as send
|
Line 391 Use a "zero copy" method of sending data, such as send
|
instead of the usual write(2). |
instead of the usual write(2). |
.TP |
.TP |
.BR -O ", " --omit " \fIn\fR" |
.BR -O ", " --omit " \fIn\fR" |
Omit the first n seconds of the test, to skip past the TCP slow-start | Perform pre-test for N seconds and omit the pre-test statistics, to skip past the TCP slow-start |
period. |
period. |
.TP |
.TP |
.BR -T ", " --title " \fIstr\fR" |
.BR -T ", " --title " \fIstr\fR" |
Line 386 It might help to test and reveal problems in networkin
|
Line 429 It might help to test and reveal problems in networkin
|
compression (including some WiFi access points), where iperf2 and iperf3 |
compression (including some WiFi access points), where iperf2 and iperf3 |
perform differently, just based on payload entropy. |
perform differently, just based on payload entropy. |
.TP |
.TP |
.BR --username " \fIusername\fR" | .BR --dont-fragment |
| Set the IPv4 Don't Fragment (DF) bit on outgoing packets. |
| Only applicable to tests doing UDP over IPv4. |
| .TP |
| .BR --username " \fIusername\fR" |
username to use for authentication to the iperf server (if built with |
username to use for authentication to the iperf server (if built with |
OpenSSL support). |
OpenSSL support). |
The password will be prompted for interactively when the test is run. Note, |
The password will be prompted for interactively when the test is run. Note, |
the password to use can also be specified via the IPERF3_PASSWORD environment |
the password to use can also be specified via the IPERF3_PASSWORD environment |
variable. If this variable is present, the password prompt will be skipped. |
variable. If this variable is present, the password prompt will be skipped. |
.TP |
.TP |
.BR --rsa-public-key-path " \fIfile\fR" | .BR --rsa-public-key-path " \fIfile\fR" |
path to the RSA public key used to encrypt authentication credentials |
path to the RSA public key used to encrypt authentication credentials |
(if built with OpenSSL support) |
(if built with OpenSSL support) |
|
|
.SH EXAMPLES |
.SH EXAMPLES |
.SS "Authentication - RSA Keypair" |
.SS "Authentication - RSA Keypair" |
The authentication feature of iperf3 requires an RSA public keypair. |
The authentication feature of iperf3 requires an RSA public keypair. |
The public key is used to encrypt the authentication token containing the | The public key is used to encrypt the authentication token containing the |
user credentials, while the private key is used to decrypt the authentication token. |
user credentials, while the private key is used to decrypt the authentication token. |
An example of a set of UNIX/Linux commands to generate correct keypair follows: | The private key must be in PEM format and additionally must not have a |
.sp 1 | password set. |
| The public key must be in PEM format and use SubjectPrefixKeyInfo encoding. |
| An example of a set of UNIX/Linux commands using OpenSSL |
| to generate a correctly-formed keypair follows: |
| .sp 1 |
.in +.5i |
.in +.5i |
> openssl genrsa -des3 -out private.pem 2048 |
> openssl genrsa -des3 -out private.pem 2048 |
.sp 0 |
.sp 0 |
> openssl rsa -in private.pem -outform PEM -pubout -out public.pem |
> openssl rsa -in private.pem -outform PEM -pubout -out public.pem |
.sp 0 |
.sp 0 |
> openssl rsa -in private.pem -out private_not_protected.pem -outform PEM | > openssl rsa -in private.pem -out private_not_protected.pem -outform PEM |
.in -.5i |
.in -.5i |
.sp 1 |
.sp 1 |
After these commands, the public key will be contained in the file |
After these commands, the public key will be contained in the file |
public.pem and the private key will be contained in the file |
public.pem and the private key will be contained in the file |
private_not_protected.pem. |
private_not_protected.pem. |
.SS "Authentication - Authorized users configuration file" |
.SS "Authentication - Authorized users configuration file" |
A simple plaintext file must be provided to the iperf3 server in order to specify | A simple plaintext file must be provided to the iperf3 server in order to specify |
the authorized user credentials. |
the authorized user credentials. |
The file is a simple list of comma-separated pairs of a username and a |
The file is a simple list of comma-separated pairs of a username and a |
corresponding password hash. |
corresponding password hash. |
Line 425 The file can also contain commented lines (starting wi
|
Line 476 The file can also contain commented lines (starting wi
|
character). |
character). |
An example of commands to generate the password hash on a UNIX/Linux system |
An example of commands to generate the password hash on a UNIX/Linux system |
is given below: |
is given below: |
.sp 1 | .sp 1 |
.in +.5i |
.in +.5i |
> S_USER=mario S_PASSWD=rossi |
> S_USER=mario S_PASSWD=rossi |
.sp 0 |
.sp 0 |