xref: /iperf/docs/invoking.rst (revision e26b0711)
1Invoking iperf3
2===============
3
4iperf3 includes a manual page listing all of the command-line options.
5The manual page is the most up-to-date reference to the various flags and parameters.
6
7For sample command line usage, see:
8
9https://fasterdata.es.net/performance-testing/network-troubleshooting-tools/iperf/
10
11Using the default options, iperf3 is meant to show typical well
12designed application performance.  "Typical well designed application"
13means avoiding artificial enhancements that work only for testing
14(such as ``splice()``-ing the data to ``/dev/null``).  iperf3 does
15also have flags for "extreme best case" optimizations but they must be
16explicitly activated.  These flags include the ``-Z`` (``--zerocopy``)
17and ``-A`` (``--affinity``) options.
18
19iperf3 Manual Page
20------------------
21
22This section contains a plaintext rendering of the iperf3 manual page.
23It is presented here only for convenience; the text here might not
24correspond to the current version of iperf3.  The authoritative iperf3
25manual page is included in the source tree and installed along with
26the executable.
27
28::
29
30   IPERF3(1)                        User Manuals                        IPERF3(1)
31
32
33
34   NAME
35          iperf3 - perform network throughput tests
36
37   SYNOPSIS
38          iperf3 -s [ options ]
39          iperf3 -c server [ options ]
40
41
42   DESCRIPTION
43          iperf3  is  a  tool for performing network throughput measurements.  It
44          can test TCP, UDP, or SCTP throughput.  To perform an iperf3  test  the
45          user must establish both a server and a client.
46
47          The  iperf3  executable  contains both client and server functionality.
48          An iperf3 server can be started using either of the -s or --server com-
49          mand-line parameters, for example:
50
51                 iperf3 -s
52
53                 iperf3 --server
54
55          Note  that  many  iperf3  parameters  have  both  short  (-s)  and long
56          (--server) forms.  In this section we will generally use the short form
57          of  command-line  flags,  unless only the long form of a flag is avail-
58          able.
59
60          By default, the iperf3 server listens on TCP port 5201 for  connections
61          from  an iperf3 client.  A custom port can be specified by using the -p
62          flag, for example:
63
64                 iperf3 -s -p 5002
65
66          After the server is started, it will listen for connections from iperf3
67          clients  (in  other words, the iperf3 program run in client mode).  The
68          client mode can be started using the -c command-line option, which also
69          requires a host to which iperf3 should connect.  The host can by speci-
70          fied by hostname, IPv4 literal, or IPv6 literal:
71
72                 iperf3 -c iperf3.example.com
73
74                 iperf3 -c 192.0.2.1
75
76                 iperf3 -c 2001:db8::1
77
78          If the iperf3 server is running on a non-default TCP  port,  that  port
79          number needs to be specified on the client as well:
80
81                 iperf3 -c iperf3.example.com -p 5002
82
83          The initial TCP connection is used to exchange test parameters, control
84          the start and end of the test, and to exchange test results.   This  is
85          sometimes  referred  to  as  the "control connection".  The actual test
86          data is sent over a separate TCP connection, as a separate flow of  UDP
87          packets, or as an independent SCTP connection, depending on what proto-
88          col was specified by the client.
89
90          Normally, the test data is sent from the client to the server, and mea-
91          sures  the  upload  speed  of the client.  Measuring the download speed
92          from the server can be done by specifying the -R flag  on  the  client.
93          This causes data to be sent from the server to the client.
94
95                 iperf3 -c iperf3.example.com -p 5202 -R
96
97          Results  are displayed on both the client and server.  There will be at
98          least one line of output per measurement interval (by  default  a  mea-
99          surement  interval lasts for one second, but this can be changed by the
100          -i option).  Each line of output includes (at least) the time since the
101          start  of the test, amount of data transferred during the interval, and
102          the average bitrate over that interval.  Note that the values for  each
103          measurement  interval  are taken from the point of view of the endpoint
104          process emitting that output (in other words, the output on the  client
105          shows the measurement interval data for the client.
106
107          At  the  end of the test is a set of statistics that shows (at least as
108          much as possible) a summary of the test as seen by both the sender  and
109          the  receiver,  with  lines tagged accordingly.  Recall that by default
110          the client is the sender and the server is the  receiver,  although  as
111          indicated above, use of the -R flag will reverse these roles.
112
113          The  client  can be made to retrieve the server-side output for a given
114          test by specifying the --get-server-output flag.
115
116          Either the client or the server can produce its output in a JSON struc-
117          ture,  useful for integration with other programs, by passing it the -J
118          flag.  Because the contents of the JSON structure are  only  completely
119          known after the test has finished, no JSON output will be emitted until
120          the end of the test.
121
122          iperf3 has a (overly) large set of command-line  options  that  can  be
123          used  to  set the parameters of a test.  They are given in the "GENERAL
124          OPTIONS" section of the manual page below, as  well  as  summarized  in
125          iperf3's help output, which can be viewed by running iperf3 with the -h
126          flag.
127
128   GENERAL OPTIONS
129          -p, --port n
130                 set server port to listen on/connect to to n (default 5201)
131
132          -f, --format
133                 [kmgtKMGT]   format to report: Kbits/Mbits/Gbits/Tbits
134
135          -i, --interval n
136                 pause n seconds between periodic throughput reports; default  is
137                 1, use 0 to disable
138
139          -I, --pidfile file
140                 write  a file with the process ID, most useful when running as a
141                 daemon.
142
143          -F, --file name
144                 Use a file as the  source  (on  the  sender)  or  sink  (on  the
145                 receiver)  of  data,  rather than just generating random data or
146                 throwing it away.  This feature is used for finding  whether  or
147                 not  the storage subsystem is the bottleneck for file transfers.
148                 It does not turn iperf3 into a file transfer tool.  The  length,
149                 attributes,  and in some cases contents of the received file may
150                 not match those of the original file.
151
152          -A, --affinity n/n,m
153                 Set the CPU affinity, if possible (Linux, FreeBSD,  and  Windows
154                 only).   On  both  the  client  and server you can set the local
155                 affinity by using the n form of this argument (where n is a  CPU
156                 number).   In  addition, on the client side you can override the
157                 server's affinity for just that one test, using the n,m form  of
158                 argument.   Note  that  when  using this feature, a process will
159                 only be bound to a single CPU (as opposed to  a  set  containing
160                 potentially multiple CPUs).
161
162          -B, --bind host[%dev]
163                 bind to the specific interface associated with address host.  If
164                 an optional interface is specified, it is treated as a  shortcut
165                 for  --bind-dev  dev.   Note  that  a percent sign and interface
166                 device name are required for IPv6 link-local  address  literals.
167                 --bind-dev  dev  bind  to the specified network interface.  This
168                 option uses SO_BINDTODEVICE, and may require  root  permissions.
169                 (Available on Linux and possibly other systems.)
170
171          -V, --verbose
172                 give more detailed output
173
174          -J, --json
175                 output in JSON format
176
177          --logfile file
178                 send output to a log file.
179
180          --forceflush
181                 force  flushing output at every interval.  Used to avoid buffer-
182                 ing when sending output to pipe.
183
184          --timestamps[=format]
185                 prepend a timestamp at  the  start  of  each  output  line.   By
186                 default,   timestamps  have  the  format  emitted  by  ctime(1).
187                 Optionally, = followed by a format specification can  be  passed
188                 to  customize the timestamps, see strftime(3).  If this optional
189                 format is given, the = must immediately follow the  --timestamps
190                 option with no whitespace intervening.
191
192          --rcv-timeout #
193                 set  idle  timeout  for  receiving data during active tests. The
194                 receiver will halt a test if no data is received from the sender
195                 for this number of ms (default to 12000 ms, or 2 minutes).
196
197          -d, --debug
198                 emit  debugging  output.  Primarily (perhaps exclusively) of use
199                 to developers.
200
201          -v, --version
202                 show version information and quit
203
204          -h, --help
205                 show a help synopsis
206
207
208   SERVER SPECIFIC OPTIONS
209          -s, --server
210                 run in server mode
211
212          -D, --daemon
213                 run the server in background as a daemon
214
215          -1, --one-off
216                 handle one client connection, then exit.  If  an  idle  time  is
217                 set, the server will exit after that amount of time with no con-
218                 nection.
219
220          --idle-timeout n
221                 restart the server after n seconds in case it  gets  stuck.   In
222                 one-off mode, this is the number of seconds the server will wait
223                 before exiting.
224
225          --server-bitrate-limit n[KMGT]
226                 set a limit on the server side, which will cause a test to abort
227                 if  the  client specifies a test of more than n bits per second,
228                 or if the average data sent or received by the client (including
229                 all  data  streams)  is  greater  than  n  bits per second.  The
230                 default limit is zero, which implies  no  limit.   The  interval
231                 over which to average the data rate is 5 seconds by default, but
232                 can be specified by adding a '/' and a  number  to  the  bitrate
233                 specifier.
234
235          --rsa-private-key-path file
236                 path  to  the  RSA  private key (not password-protected) used to
237                 decrypt authentication credentials from  the  client  (if  built
238                 with OpenSSL support).
239
240          --authorized-users-path file
241                 path  to the configuration file containing authorized users cre-
242                 dentials to run iperf tests (if  built  with  OpenSSL  support).
243                 The  file  is  a  comma separated list of usernames and password
244                 hashes; more information on the structure of  the  file  can  be
245                 found in the EXAMPLES section.
246
247          --time-skew-thresholdsecond seconds
248                 time  skew  threshold (in seconds) between the server and client
249                 during the authentication process.
250
251   CLIENT SPECIFIC OPTIONS
252          -c, --client host[%dev]
253                 run in client mode, connecting  to  the  specified  server.   By
254                 default,  a test consists of sending data from the client to the
255                 server, unless the -R flag is specified.  If an optional  inter-
256                 face  is  specified,  it is treated as a shortcut for --bind-dev
257                 dev.  Note that a percent sign and  interface  device  name  are
258                 required for IPv6 link-local address literals.
259
260          --sctp use SCTP rather than TCP (FreeBSD and Linux)
261
262          -u, --udp
263                 use UDP rather than TCP
264
265          --connect-timeout n
266                 set  timeout  for establishing the initial control connection to
267                 the server, in milliseconds.  The default behavior is the  oper-
268                 ating  system's  timeout for TCP connection establishment.  Pro-
269                 viding a shorter value may speed up detection of a  down  iperf3
270                 server.
271
272          -b, --bitrate n[KMGT]
273                 set  target  bitrate  to n bits/sec (default 1 Mbit/sec for UDP,
274                 unlimited for TCP/SCTP).  If  there  are  multiple  streams  (-P
275                 flag),  the  throughput  limit  is  applied  separately  to each
276                 stream.  You can also add a '/' and  a  number  to  the  bitrate
277                 specifier.  This is called "burst mode".  It will send the given
278                 number of packets without  pausing,  even  if  that  temporarily
279                 exceeds  the  specified  throughput  limit.   Setting the target
280                 bitrate to 0 will disable bitrate  limits  (particularly  useful
281                 for UDP tests).  This throughput limit is implemented internally
282                 inside iperf3, and is available on all platforms.  Compare  with
283                 the  --fq-rate flag.  This option replaces the --bandwidth flag,
284                 which is now deprecated but (at least for now) still accepted.
285
286          --pacing-timer n[KMGT]
287                 set  pacing  timer  interval  in  microseconds   (default   1000
288                 microseconds,  or 1 ms).  This controls iperf3's internal pacing
289                 timer for the -b/--bitrate  option.   The  timer  fires  at  the
290                 interval  set  by  this parameter.  Smaller values of the pacing
291                 timer parameter smooth out the traffic emitted  by  iperf3,  but
292                 potentially  at  the  cost  of  performance due to more frequent
293                 timer processing.
294
295          --fq-rate n[KMGT]
296                 Set a rate to be used with fair-queueing based socket-level pac-
297                 ing,  in bits per second.  This pacing (if specified) will be in
298                 addition to any pacing due to iperf3's internal throughput  pac-
299                 ing  (-b/--bitrate flag), and both can be specified for the same
300                 test.  Only available on platforms  supporting  the  SO_MAX_PAC-
301                 ING_RATE  socket  option (currently only Linux).  The default is
302                 no fair-queueing based pacing.
303
304          --no-fq-socket-pacing
305                 This option is deprecated and will be removed.  It is equivalent
306                 to specifying --fq-rate=0.
307
308          -t, --time n
309                 time in seconds to transmit for (default 10 secs)
310
311          -n, --bytes n[KMGT]
312                 number of bytes to transmit (instead of -t)
313
314          -k, --blockcount n[KMGT]
315                 number of blocks (packets) to transmit (instead of -t or -n)
316
317          -l, --length n[KMGT]
318                 length  of  buffer to read or write.  For TCP tests, the default
319                 value is 128KB.  In the case of UDP, iperf3 tries to dynamically
320                 determine  a  reasonable  sending size based on the path MTU; if
321                 that cannot be determined it uses 1460 bytes as a sending  size.
322                 For SCTP tests, the default size is 64KB.
323
324          --cport port
325                 bind  data  streams  to  a specific client port (for TCP and UDP
326                 only, default is to use an ephemeral port)
327
328          -P, --parallel n
329                 number of parallel client streams to run. Note  that  iperf3  is
330                 single  threaded,  so  if you are CPU bound, this will not yield
331                 higher throughput.
332
333          -R, --reverse
334                 reverse the direction of a test, so that the server  sends  data
335                 to the client
336
337          --bidir
338                 test  in  both  directions  (normal  and reverse), with both the
339                 client and server sending and receiving data simultaneously
340
341          -w, --window n[KMGT]
342                 set socket buffer size / window size.  This value gets  sent  to
343                 the  server and used on that side too; on both sides this option
344                 sets both the sending and receiving socket buffer  sizes.   This
345                 option  can  be  used to set (indirectly) the maximum TCP window
346                 size.  Note that on Linux systems, the effective maximum  window
347                 size  is  approximately  double what is specified by this option
348                 (this behavior is not a bug in iperf3 but  a  "feature"  of  the
349                 Linux kernel, as documented by tcp(7) and socket(7)).
350
351          -M, --set-mss n
352                 set TCP/SCTP maximum segment size (MTU - 40 bytes)
353
354          -N, --no-delay
355                 set TCP/SCTP no delay, disabling Nagle's Algorithm
356
357          -4, --version4
358                 only use IPv4
359
360          -6, --version6
361                 only use IPv6
362
363          -S, --tos n
364                 set the IP type of service. The usual prefixes for octal and hex
365                 can be used, i.e. 52, 064 and 0x34 all specify the same value.
366
367          --dscp dscp
368                 set the IP DSCP bits.  Both  numeric  and  symbolic  values  are
369                 accepted.  Numeric values can be specified in decimal, octal and
370                 hex (see --tos above). To set both the DSCP  bits  and  the  ECN
371                 bits, use --tos.
372
373          -L, --flowlabel n
374                 set the IPv6 flow label (currently only supported on Linux)
375
376          -X, --xbind name
377                 Bind  SCTP  associations  to  a  specific  subset of links using
378                 sctp_bindx(3).  The --B flag will be ignored  if  this  flag  is
379                 specified.  Normally SCTP will include the protocol addresses of
380                 all active links on the local host when setting up  an  associa-
381                 tion.  Specifying at least one --X name will disable this behav-
382                 iour.  This flag must be specified for each link to be  included
383                 in  the association, and is supported for both iperf servers and
384                 clients (the latter are supported by passing the first --X argu-
385                 ment  to  bind(2)).  Hostnames are accepted as arguments and are
386                 resolved using getaddrinfo(3).  If the  --4  or  --6  flags  are
387                 specified,  names  which  do not resolve to addresses within the
388                 specified protocol family will be ignored.
389
390          --nstreams n
391                 Set number of SCTP streams.
392
393          -Z, --zerocopy
394                 Use a "zero copy" method of sending data, such  as  sendfile(2),
395                 instead of the usual write(2).
396
397          -O, --omit n
398                 Omit the first n seconds of the test, to skip past the TCP slow-
399                 start period.
400
401          -T, --title str
402                 Prefix every output line with this string.
403
404          --extra-data str
405                 Specify an extra data string field to be included in  JSON  out-
406                 put.
407
408          -C, --congestion algo
409                 Set  the  congestion control algorithm (Linux and FreeBSD only).
410                 An older --linux-congestion synonym for this  flag  is  accepted
411                 but is deprecated.
412
413          --get-server-output
414                 Get the output from the server.  The output format is determined
415                 by the server (in particular, if the server was invoked with the
416                 --json  flag,  the  output  will be in JSON format, otherwise it
417                 will be in human-readable format).  If the client  is  run  with
418                 --json,  the  server output is included in a JSON object; other-
419                 wise it is appended at the bottom of the human-readable  output.
420
421          --udp-counters-64bit
422                 Use 64-bit counters in UDP test packets.  The use of this option
423                 can help prevent counter overflows during long  or  high-bitrate
424                 UDP  tests.   Both client and server need to be running at least
425                 version 3.1 for this option to work.  It may become the  default
426                 behavior at some point in the future.
427
428          --repeating-payload
429                 Use  repeating pattern in payload, instead of random bytes.  The
430                 same payload is used in iperf2  (ASCII  '0..9'  repeating).   It
431                 might  help  to test and reveal problems in networking gear with
432                 hardware compression (including some WiFi access points),  where
433                 iperf2  and  iperf3  perform  differently, just based on payload
434                 entropy.
435
436          --dont-fragment
437                 Set the IPv4 Don't Fragment (DF) bit on outgoing packets.   Only
438                 applicable to tests doing UDP over IPv4.
439
440          --username username
441                 username to use for authentication to the iperf server (if built
442                 with OpenSSL support).  The password will be prompted for inter-
443                 actively  when  the  test is run.  Note, the password to use can
444                 also be specified via the IPERF3_PASSWORD environment  variable.
445                 If  this  variable  is  present,  the  password  prompt  will be
446                 skipped.
447
448          --rsa-public-key-path file
449                 path to the RSA public key used to encrypt  authentication  cre-
450                 dentials (if built with OpenSSL support)
451
452
453   EXAMPLES
454      Authentication - RSA Keypair
455          The  authentication  feature  of iperf3 requires an RSA public keypair.
456          The public key is used to encrypt the authentication  token  containing
457          the  user  credentials,  while  the  private key is used to decrypt the
458          authentication token.  The private key must be in PEM format and  addi-
459          tionally  must  not have a password set.  The public key must be in PEM
460          format and use SubjectPrefixKeyInfo encoding.  An example of a  set  of
461          UNIX/Linux  commands  using OpenSSL to generate a correctly-formed key-
462          pair follows:
463
464               > openssl genrsa -des3 -out private.pem 2048
465               > openssl rsa -in private.pem -outform PEM -pubout -out public.pem
466               > openssl rsa -in private.pem -out private_not_protected.pem -out-
467               form PEM
468
469          After these commands, the public key will be contained in the file pub-
470          lic.pem  and  the  private  key  will  be  contained  in  the file pri-
471          vate_not_protected.pem.
472
473      Authentication - Authorized users configuration file
474          A simple plaintext file must be provided to the iperf3 server in  order
475          to  specify the authorized user credentials.  The file is a simple list
476          of comma-separated pairs of a username  and  a  corresponding  password
477          hash.   The password hash is a SHA256 hash of the string "{$user}$pass-
478          word".  The file can also contain commented lines (starting with the  #
479          character).   An example of commands to generate the password hash on a
480          UNIX/Linux system is given below:
481
482               > S_USER=mario S_PASSWD=rossi
483               > echo -n "{$S_USER}$S_PASSWD" | sha256sum | awk '{ print $1 }'
484
485          An example of a password file (with an entry corresponding to the above
486          username and password) is given below:
487               > cat credentials.csv
488               # file format: username,sha256
489               mario,bf7a49a846d44b454a5d11e7acfaf13d138bbe0b7483aa3e050879700572709b
490
491
492
493   AUTHORS
494          A list of the contributors to iperf3 can be found within the documenta-
495          tion located at https://software.es.net/iperf/dev.html#authors.
496
497
498   SEE ALSO
499          libiperf(3), https://software.es.net/iperf
500
501
502
503   ESnet                            January 2022                        IPERF3(1)
504
505The iperf3 manual page will typically be installed in manual
506section 1.
507