Invoking iperf3
===============

iperf3 includes a manual page listing all of the command-line options.
The manual page is the most up-to-date reference to the various flags and parameters.

For sample command line usage, see: 

https://fasterdata.es.net/performance-testing/network-troubleshooting-tools/iperf/

Using the default options, iperf3 is meant to show typical well
designed application performance.  "Typical well designed application"
means avoiding artificial enhancements that work only for testing
(such as ``splice()``-ing the data to ``/dev/null``).  iperf3 does
also have flags for "extreme best case" optimizations but they must be
explicitly activated.  These flags include the ``-Z`` (``--zerocopy``)
and ``-A`` (``--affinity``) options.

iperf3 Manual Page
------------------

This section contains a plaintext rendering of the iperf3 manual page.
It is presented here only for convenience; the text here might not
correspond to the current version of iperf3.  The authoritative iperf3
manual page is included in the source tree and installed along with
the executable.

::

   IPERF3(1)                        User Manuals                        IPERF3(1)
   
   
   
   NAME
          iperf3 - perform network throughput tests
   
   SYNOPSIS
          iperf3 -s [ options ]
          iperf3 -c server [ options ]
   
   
   DESCRIPTION
          iperf3  is  a  tool for performing network throughput measurements.  It
          can test TCP, UDP, or SCTP throughput.  To perform an iperf3  test  the
          user must establish both a server and a client.
   
          The  iperf3  executable  contains both client and server functionality.
          An iperf3 server can be started using either of the -s or --server com-
          mand-line parameters, for example:
   
                 iperf3 -s
   
                 iperf3 --server
   
          Note  that  many  iperf3  parameters  have  both  short  (-s)  and long
          (--server) forms.  In this section we will generally use the short form
          of  command-line  flags,  unless only the long form of a flag is avail-
          able.
   
          By default, the iperf3 server listens on TCP port 5201 for  connections
          from  an iperf3 client.  A custom port can be specified by using the -p
          flag, for example:
   
                 iperf3 -s -p 5002
   
          After the server is started, it will listen for connections from iperf3
          clients  (in  other words, the iperf3 program run in client mode).  The
          client mode can be started using the -c command-line option, which also
          requires a host to which iperf3 should connect.  The host can by speci-
          fied by hostname, IPv4 literal, or IPv6 literal:
   
                 iperf3 -c iperf3.example.com
   
                 iperf3 -c 192.0.2.1
   
                 iperf3 -c 2001:db8::1
   
          If the iperf3 server is running on a non-default TCP  port,  that  port
          number needs to be specified on the client as well:
   
                 iperf3 -c iperf3.example.com -p 5002
   
          The initial TCP connection is used to exchange test parameters, control
          the start and end of the test, and to exchange test results.   This  is
          sometimes  referred  to  as  the "control connection".  The actual test
          data is sent over a separate TCP connection, as a separate flow of  UDP
          packets, or as an independent SCTP connection, depending on what proto-
          col was specified by the client.
   
          Normally, the test data is sent from the client to the server, and mea-
          sures  the  upload  speed  of the client.  Measuring the download speed
          from the server can be done by specifying the -R flag  on  the  client.
          This causes data to be sent from the server to the client.
   
                 iperf3 -c iperf3.example.com -p 5202 -R
   
          Results  are displayed on both the client and server.  There will be at
          least one line of output per measurement interval (by  default  a  mea-
          surement  interval lasts for one second, but this can be changed by the
          -i option).  Each line of output includes (at least) the time since the
          start  of the test, amount of data transferred during the interval, and
          the average bitrate over that interval.  Note that the values for  each
          measurement  interval  are taken from the point of view of the endpoint
          process emitting that output (in other words, the output on the  client
          shows the measurement interval data for the client.
   
          At  the  end of the test is a set of statistics that shows (at least as
          much as possible) a summary of the test as seen by both the sender  and
          the  receiver,  with  lines tagged accordingly.  Recall that by default
          the client is the sender and the server is the  receiver,  although  as
          indicated above, use of the -R flag will reverse these roles.
   
          The  client  can be made to retrieve the server-side output for a given
          test by specifying the --get-server-output flag.
   
          Either the client or the server can produce its output in a JSON struc-
          ture,  useful for integration with other programs, by passing it the -J
          flag.  Because the contents of the JSON structure  are  only  competely
          known after the test has finished, no JSON output will be emitted until
          the end of the test.
   
          iperf3 has a (overly) large set of command-line  options  that  can  be
          used  to  set the parameters of a test.  They are given in the "GENERAL
          OPTIONS" section of the manual page below, as  well  as  summarized  in
          iperf3's help output, which can be viewed by running iperf3 with the -h
          flag.
   
   GENERAL OPTIONS
          -p, --port n
                 set server port to listen on/connect to to n (default 5201)
   
          -f, --format
                 [kmgtKMGT]   format to report: Kbits/Mbits/Gbits/Tbits
   
          -i, --interval n
                 pause n seconds between periodic throughput reports; default  is
                 1, use 0 to disable
   
          -I, --pidfile file
                 write  a file with the process ID, most useful when running as a
                 daemon.
   
          -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.  This feature is used for finding  whether  or
                 not  the storage subsystem is the bottleneck for file transfers.
                 It does not turn iperf3 into a file transfer tool.  The  length,
                 attributes,  and in some cases contents of the received file may
                 not match those of the original file.
   
          -A, --affinity n/n,m
                 Set the CPU affinity, if possible (Linux, FreeBSD,  and  Windows
                 only).   On  both  the  client  and server you can set the local
                 affinity by using the n form of this argument (where n is a  CPU
                 number).   In  addition, on the client side you can override the
                 server's affinity for just that one test, using the n,m form  of
                 argument.   Note  that  when  using this feature, a process will
                 only be bound to a single CPU (as opposed to  a  set  containing
                 potentialy multiple CPUs).
   
          -B, --bind host
                 bind  to  the  specific  interface associated with address host.
                 --bind-dev dev.ft R bind to  the  specified  network  interface.
                 This  option  uses SO_BINDTODEVICE, and may require root permis-
                 sions.  (Available on Linux and possibly other systems.)
   
          -V, --verbose
                 give more detailed output
   
          -J, --json
                 output in JSON format
   
          --logfile file
                 send output to a log file.
   
          --forceflush
                 force flushing output at every interval.  Used to avoid  buffer-
                 ing when sending output to pipe.
   
          --timestamps[=format]
                 prepend  a  timestamp  at  the  start  of  each output line.  By
                 default,  timestamps  have  the  format  emitted  by   ctime(1).
                 Optionally,  =  followed by a format specification can be passed
                 to customize the timestamps, see strftime(3).  If this  optional
                 format  is given, the = must immediately follow the --timestamps
                 option with no whitespace intervening.
   
          --rcv-timeout #
                 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).
   
          -d, --debug
                 emit debugging output.  Primarily (perhaps exclusively)  of  use
                 to developers.
   
          -v, --version
                 show version information and quit
   
          -h, --help
                 show a help synopsis
   
   
   SERVER SPECIFIC OPTIONS
          -s, --server
                 run in server mode
   
          -D, --daemon
                 run the server in background as a daemon
   
          -1, --one-off
                 handle one client connection, then exit.
   
          --server-bitrate-limit n[KMGT]
                 set a limit on the server side, which will cause a test to abort
                 if the client specifies a test of more than n bits  per  second,
                 or if the average data sent or received by the client (including
                 all data streams) is  greater  than  n  bits  per  second.   The
                 default  limit  is  zero,  which implies no limit.  The interval
                 over which to average the data rate is 5 seconds by default, but
                 can  be  specified  by  adding a '/' and a number to the bitrate
                 specifier.
   
          --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).
   
          --authorized-users-path file
                 path to the configuration file containing authorized users  cre-
                 dentials  to  run  iperf  tests (if built with OpenSSL support).
                 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 EXAMPLES section.
   
          --time-skew-thresholdsecond seconds
                 time skew threshold (in seconds) between the server  and  client
                 during the authentication process.
   
   CLIENT SPECIFIC OPTIONS
          -c, --client host
                 run  in  client  mode,  connecting  to the specified server.  By
                 default, a test consists of sending data from the client to  the
                 server, unless the -R flag is specified.
   
          --sctp use SCTP rather than TCP (FreeBSD and Linux)
   
          -u, --udp
                 use UDP rather than TCP
   
          --connect-timeout n
                 set  timeout  for establishing the initial control connection to
                 the server, in milliseconds.  The default behavior is the  oper-
                 ating  system's  timeout for TCP connection establishment.  Pro-
                 viding a shorter value may speed up detection of a  down  iperf3
                 server.
   
          -b, --bitrate n[KMGT]
                 set  target  bitrate  to n bits/sec (default 1 Mbit/sec for UDP,
                 unlimited for TCP/SCTP).  If  there  are  multiple  streams  (-P
                 flag),  the  throughput  limit  is  applied  separately  to each
                 stream.  You can also add a '/' and  a  number  to  the  bitrate
                 specifier.  This is called "burst mode".  It will send the given
                 number of packets without  pausing,  even  if  that  temporarily
                 exceeds  the  specified  throughput  limit.   Setting the target
                 bitrate to 0 will disable bitrate  limits  (particularly  useful
                 for UDP tests).  This throughput limit is implemented internally
                 inside iperf3, and is available on all platforms.  Compare  with
                 the  --fq-rate flag.  This option replaces the --bandwidth flag,
                 which is now deprecated but (at least for now) still accepted.
   
          --pacing-timer n[KMGT]
                 set  pacing  timer  interval  in  microseconds   (default   1000
                 microseconds,  or 1 ms).  This controls iperf3's internal pacing
                 timer for the -b/--bitrate  option.   The  timer  fires  at  the
                 interval  set  by  this parameter.  Smaller values of the pacing
                 timer parameter smooth out the traffic emitted  by  iperf3,  but
                 potentially  at  the  cost  of  performance due to more frequent
                 timer processing.
   
          --fq-rate n[KMGT]
                 Set a rate to be used with fair-queueing based socket-level pac-
                 ing,  in bits per second.  This pacing (if specified) will be in
                 addition to any pacing due to iperf3's internal throughput  pac-
                 ing  (-b/--bitrate flag), and both can be specified for the same
                 test.  Only available on platforms  supporting  the  SO_MAX_PAC-
                 ING_RATE  socket  option (currently only Linux).  The default is
                 no fair-queueing based pacing.
   
          --no-fq-socket-pacing
                 This option is deprecated and will be removed.  It is equivalent
                 to specifying --fq-rate=0.
   
          -t, --time n
                 time in seconds to transmit for (default 10 secs)
   
          -n, --bytes n[KMGT]
                 number of bytes to transmit (instead of -t)
   
          -k, --blockcount n[KMGT]
                 number of blocks (packets) to transmit (instead of -t or -n)
   
          -l, --length n[KMGT]
                 length  of  buffer to read or write.  For TCP tests, the default
                 value is 128KB.  In the case of UDP, iperf3 tries to dynamically
                 determine  a  reasonable  sending size based on the path MTU; if
                 that cannot be determined it uses 1460 bytes as a sending  size.
                 For SCTP tests, the default size is 64KB.
   
          --cport port
                 bind  data  streams  to  a specific client port (for TCP and UDP
                 only, default is to use an ephemeral port)
   
          -P, --parallel n
                 number of parallel client streams to run. Note  that  iperf3  is
                 single  threaded,  so  if you are CPU bound, this will not yield
                 higher throughput.
   
          -R, --reverse
                 reverse the direction of a test, so that the server  sends  data
                 to the client
   
          --bidir
                 test  in  both  directions  (normal  and reverse), with both the
                 client and server sending and receiving data simultaneously
   
          -w, --window n[KMGT]
                 window size / socket buffer size (this gets sent to  the  server
                 and used on that side too)
   
          -M, --set-mss n
                 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. The usual prefixes for octal and hex
                 can be used, i.e. 52, 064 and 0x34 all specify the same value.
   
          --dscp dscp
                 set the IP DSCP bits.  Both  numeric  and  symbolic  values  are
                 accepted.  Numeric values can be specified in decimal, octal and
                 hex (see --tos above).
   
          -L, --flowlabel n
                 set the IPv6 flow label (currently only supported on Linux)
   
          -X, --xbind name
                 Bind SCTP associations to  a  specific  subset  of  links  using
                 sctp_bindx(3).   The  --B  flag  will be ignored if this flag is
                 specified.  Normally SCTP will include the protocol addresses of
                 all  active  links on the local host when setting up an associa-
                 tion. Specifying at least one --X name will disable this  behav-
                 iour.   This flag must be specified for each link to be included
                 in the association, and is supported for both iperf servers  and
                 clients (the latter are supported by passing the first --X argu-
                 ment to bind(2)).  Hostnames are accepted as arguments  and  are
                 resolved  using  getaddrinfo(3).   If  the  --4 or --6 flags are
                 specified, names which do not resolve to  addresses  within  the
                 specified protocol family will be ignored.
   
          --nstreams n
                 Set number of SCTP streams.
   
          -Z, --zerocopy
                 Use  a  "zero copy" method of sending data, such as sendfile(2),
                 instead of the usual write(2).
   
          -O, --omit n
                 Omit the first n seconds of the test, to skip past the TCP slow-
                 start period.
   
          -T, --title str
                 Prefix every output line with this string.
   
          --extra-data str
                 Specify  an  extra data string field to be included in JSON out-
                 put.
   
          -C, --congestion algo
                 Set the congestion control algorithm (Linux and  FreeBSD  only).
                 An  older  --linux-congestion  synonym for this flag is accepted
                 but is deprecated.
   
          --get-server-output
                 Get the output from the server.  The output format is determined
                 by the server (in particular, if the server was invoked with the
                 --json flag, the output will be in  JSON  format,  otherwise  it
                 will  be  in  human-readable format).  If the client is run with
                 --json, the server output is included in a JSON  object;  other-
                 wise  it is appended at the bottom of the human-readable output.
   
          --udp-counters-64bit
                 Use 64-bit counters in UDP test packets.  The use of this option
                 can  help  prevent counter overflows during long or high-bitrate
                 UDP tests.  Both client and server need to be running  at  least
                 version  3.1 for this option to work.  It may become the default
                 behavior at some point in the future.
   
          --repeating-payload
                 Use repeating pattern in payload, instead of random bytes.   The
                 same  payload  is  used  in iperf2 (ASCII '0..9' repeating).  It
                 might help to test and reveal problems in networking  gear  with
                 hardware  compression (including some WiFi access points), where
                 iperf2 and iperf3 perform differently,  just  based  on  payload
                 entropy.
   
          --dont-fragment
                 Set  the IPv4 Don't Fragment (DF) bit on outgoing packets.  Only
                 applicable to tests doing UDP over IPv4.
   
          --username username
                 username to use for authentication to the iperf server (if built
                 with OpenSSL support).  The password will be prompted for inter-
                 actively when the test is run.  Note, 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.
   
          --rsa-public-key-path file
                 path  to  the RSA public key used to encrypt authentication cre-
                 dentials (if built with OpenSSL support)
   
   
   EXAMPLES
      Authentication - RSA Keypair
          The authentication feature of iperf3 requires an  RSA  public  keypair.
          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.  The private key must be in PEM format and addi-
          tionally must not have a 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  key-
          pair follows:
   
               > openssl genrsa -des3 -out private.pem 2048
               > openssl rsa -in private.pem -outform PEM -pubout -out public.pem
               > openssl rsa -in private.pem -out private_not_protected.pem -out-
               form PEM
   
          After these commands, the public key will be contained in the file pub-
          lic.pem and the  private  key  will  be  contained  in  the  file  pri-
          vate_not_protected.pem.
   
      Authentication - Authorized users configuration file
          A  simple plaintext file must be provided to the iperf3 server in order
          to specify the authorized user credentials.  The file is a simple  list
          of  comma-separated  pairs  of  a username and a corresponding password
          hash.  The password hash is a SHA256 hash of the string  "{$user}$pass-
          word".   The file can also contain commented lines (starting with the #
          character).  An example of commands to generate the password hash on  a
          UNIX/Linux system is given below:
   
               > S_USER=mario S_PASSWD=rossi
               > echo -n "{$S_USER}$S_PASSWD" | sha256sum | awk '{ print $1 }'
   
          An example of a password file (with an entry corresponding to the above
          username and password) is given below:
               > cat credentials.csv
               # file format: username,sha256
               mario,bf7a49a846d44b454a5d11e7acfaf13d138bbe0b7483aa3e050879700572709b
   
   
   
   AUTHORS
          A list of the contributors to iperf3 can be found within the documenta-
          tion located at https://software.es.net/iperf/dev.html#authors.
   
   
   SEE ALSO
          libiperf(3), https://software.es.net/iperf
   
   
   
   ESnet                            February 2021
   IPERF3(1)

The iperf3 manual page will typically be installed in manual
section 1.

