Annotation of embedaddon/iperf/docs/invoking.rst, revision 1.1.1.2

1.1       misho       1: Invoking iperf3
                      2: ===============
                      3: 
                      4: iperf3 includes a manual page listing all of the command-line options.
                      5: The manual page is the most up-to-date reference to the various flags and parameters.
                      6: 
                      7: For sample command line usage, see: 
                      8: 
1.1.1.2 ! misho       9: https://fasterdata.es.net/performance-testing/network-troubleshooting-tools/iperf/
1.1       misho      10: 
                     11: Using the default options, iperf3 is meant to show typical well
                     12: designed application performance.  "Typical well designed application"
                     13: means avoiding artificial enhancements that work only for testing
                     14: (such as ``splice()``-ing the data to ``/dev/null``).  iperf3 does
                     15: also have flags for "extreme best case" optimizations but they must be
                     16: explicitly activated.  These flags include the ``-Z`` (``--zerocopy``)
                     17: and ``-A`` (``--affinity``) options.
                     18: 
                     19: iperf3 Manual Page
                     20: ------------------
                     21: 
                     22: This section contains a plaintext rendering of the iperf3 manual page.
1.1.1.2 ! misho      23: It is presented here only for convenience; the text here might not
        !            24: correspond to the current version of iperf3.  The authoritative iperf3
1.1       misho      25: manual page is included in the source tree and installed along with
                     26: the executable.
                     27: 
                     28: ::
                     29: 
1.1.1.2 ! misho      30:    IPERF3(1)                        User Manuals                        IPERF3(1)
        !            31:    
        !            32:    
        !            33:    
1.1       misho      34:    NAME
1.1.1.2 ! misho      35:           iperf3 - perform network throughput tests
        !            36:    
1.1       misho      37:    SYNOPSIS
1.1.1.2 ! misho      38:           iperf3 -s [ options ]
        !            39:           iperf3 -c server [ options ]
        !            40:    
        !            41:    
1.1       misho      42:    DESCRIPTION
1.1.1.2 ! misho      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  competely
        !           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:    
1.1       misho     128:    GENERAL OPTIONS
1.1.1.2 ! misho     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:           -F, --file name
        !           140:                  Use  a  file  as  the  source  (on  the  sender) or sink (on the
        !           141:                  receiver) of data, rather than just generating  random  data  or
        !           142:                  throwing  it  away.  This feature is used for finding whether or
        !           143:                  not the storage subsystem is the bottleneck for file  transfers.
        !           144:                  It  does not turn iperf3 into a file transfer tool.  The length,
        !           145:                  attributes, and in some cases contents of the received file  may
        !           146:                  not match those of the original file.
        !           147:    
        !           148:           -A, --affinity n/n,m
        !           149:                  Set  the  CPU affinity, if possible (Linux, FreeBSD, and Windows
        !           150:                  only).  On both the client and server  you  can  set  the  local
        !           151:                  affinity  by using the n form of this argument (where n is a CPU
        !           152:                  number).  In addition, on the client side you can  override  the
        !           153:                  server's  affinity for just that one test, using the n,m form of
        !           154:                  argument.  Note that when using this  feature,  a  process  will
        !           155:                  only  be  bound  to a single CPU (as opposed to a set containing
        !           156:                  potentialy multiple CPUs).
        !           157:    
        !           158:           -B, --bind host
        !           159:                  bind to the specific interface associated with address host.  If
        !           160:                  the  host  has multiple interfaces, it will use the first inter-
        !           161:                  face by default.
        !           162:    
        !           163:           -V, --verbose
        !           164:                  give more detailed output
        !           165:    
        !           166:           -J, --json
        !           167:                  output in JSON format
        !           168:    
        !           169:           --logfile file
        !           170:                  send output to a log file.
        !           171:    
        !           172:           --forceflush
        !           173:                  force flushing output at every interval.  Used to avoid  buffer-
        !           174:                  ing when sending output to pipe.
        !           175:    
        !           176:           -d, --debug
        !           177:                  emit  debugging  output.  Primarily (perhaps exclusively) of use
        !           178:                  to developers.
        !           179:    
        !           180:           -v, --version
        !           181:                  show version information and quit
        !           182:    
        !           183:           -h, --help
        !           184:                  show a help synopsis
        !           185:    
        !           186:    
1.1       misho     187:    SERVER SPECIFIC OPTIONS
1.1.1.2 ! misho     188:           -s, --server
        !           189:                  run in server mode
        !           190:    
        !           191:           -D, --daemon
        !           192:                  run the server in background as a daemon
        !           193:    
        !           194:           -I, --pidfile file
        !           195:                  write a file with the process ID, most useful when running as  a
        !           196:                  daemon.
        !           197:    
        !           198:           -1, --one-off
        !           199:                  handle one client connection, then exit.
        !           200:    
        !           201:           --rsa-private-key-path file
        !           202:                  path  to  the  RSA  private key (not password-protected) used to
        !           203:                  decrypt authentication credentials from  the  client  (if  built
        !           204:                  with OpenSSL support).
        !           205:    
        !           206:           --authorized-users-path file
        !           207:                  path  to the configuration file containing authorized users cre-
        !           208:                  dentials to run iperf tests (if  built  with  OpenSSL  support).
        !           209:                  The  file  is  a  comma separated list of usernames and password
        !           210:                  hashes; more information on the structure of  the  file  can  be
        !           211:                  found in the EXAMPLES section.
        !           212:    
1.1       misho     213:    CLIENT SPECIFIC OPTIONS
1.1.1.2 ! misho     214:           -c, --client host
        !           215:                  run  in  client  mode,  connecting  to the specified server.  By
        !           216:                  default, a test consists of sending data from the client to  the
        !           217:                  server, unless the -R flag is specified.
        !           218:    
        !           219:           --sctp use SCTP rather than TCP (FreeBSD and Linux)
        !           220:    
        !           221:           -u, --udp
        !           222:                  use UDP rather than TCP
        !           223:    
        !           224:           --connect-timeout n
        !           225:                  set  timeout  for establishing the initial control connection to
        !           226:                  the server, in milliseconds.  The default behavior is the  oper-
        !           227:                  ating  system's  timeout for TCP connection establishment.  Pro-
        !           228:                  viding a shorter value may speed up detection of a  down  iperf3
        !           229:                  server.
        !           230:    
        !           231:           -b, --bitrate n[KM]
        !           232:                  set  target  bitrate  to n bits/sec (default 1 Mbit/sec for UDP,
        !           233:                  unlimited for TCP/SCTP).  If  there  are  multiple  streams  (-P
        !           234:                  flag),  the  throughput  limit  is  applied  separately  to each
        !           235:                  stream.  You can also add a '/' and  a  number  to  the  bitrate
        !           236:                  specifier.  This is called "burst mode".  It will send the given
        !           237:                  number of packets without  pausing,  even  if  that  temporarily
        !           238:                  exceeds  the  specified  throughput  limit.   Setting the target
        !           239:                  bitrate to 0 will disable bitrate  limits  (particularly  useful
        !           240:                  for UDP tests).  This throughput limit is implemented internally
        !           241:                  inside iperf3, and is available on all platforms.  Compare  with
        !           242:                  the  --fq-rate flag.  This option replaces the --bandwidth flag,
        !           243:                  which is now deprecated but (at least for now) still accepted.
        !           244:    
        !           245:           --pacing-timer n[KMG]
        !           246:                  set  pacing  timer  interval  in  microseconds   (default   1000
        !           247:                  microseconds,  or 1 ms).  This controls iperf3's internal pacing
        !           248:                  timer for the -b/--bitrate  option.   The  timer  fires  at  the
        !           249:                  interval  set  by  this parameter.  Smaller values of the pacing
        !           250:                  timer parameter smooth out the traffic emitted  by  iperf3,  but
        !           251:                  potentially  at  the  cost  of  performance due to more frequent
        !           252:                  timer processing.
        !           253:    
        !           254:           --fq-rate n[KM]
        !           255:                  Set a rate to be used with fair-queueing based socket-level pac-
        !           256:                  ing,  in bits per second.  This pacing (if specified) will be in
        !           257:                  addition to any pacing due to iperf3's internal throughput  pac-
        !           258:                  ing  (-b/--bitrate flag), and both can be specified for the same
        !           259:                  test.  Only available on platforms  supporting  the  SO_MAX_PAC-
        !           260:                  ING_RATE  socket  option (currently only Linux).  The default is
        !           261:                  no fair-queueing based pacing.
        !           262:    
        !           263:           --no-fq-socket-pacing
        !           264:                  This option is deprecated and will be removed.  It is equivalent
        !           265:                  to specifying --fq-rate=0.
        !           266:    
        !           267:           -t, --time n
        !           268:                  time in seconds to transmit for (default 10 secs)
        !           269:    
        !           270:           -n, --bytes n[KM]
        !           271:                  number of bytes to transmit (instead of -t)
        !           272:    
        !           273:           -k, --blockcount n[KM]
        !           274:                  number of blocks (packets) to transmit (instead of -t or -n)
        !           275:    
        !           276:           -l, --length n[KM]
        !           277:                  length  of  buffer to read or write.  For TCP tests, the default
        !           278:                  value is 128KB.  In the case of UDP, iperf3 tries to dynamically
        !           279:                  determine  a  reasonable  sending size based on the path MTU; if
        !           280:                  that cannot be determined it uses 1460 bytes as a sending  size.
        !           281:                  For SCTP tests, the default size is 64KB.
        !           282:    
        !           283:           --cport port
        !           284:                  bind  data  streams  to  a specific client port (for TCP and UDP
        !           285:                  only, default is to use an ephemeral port)
        !           286:    
        !           287:           -P, --parallel n
        !           288:                  number of parallel client streams to run. Note  that  iperf3  is
        !           289:                  single  threaded,  so  if you are CPU bound, this will not yield
        !           290:                  higher throughput.
        !           291:    
        !           292:           -R, --reverse
        !           293:                  reverse the direction of a test, so that the server  sends  data
        !           294:                  to the client
        !           295: 
        !           296:           --bidir
        !           297:                  bidirectional mode, server and client send and receive data.
        !           298:    
        !           299:           -w, --window n[KM]
        !           300:                  window  size  / socket buffer size (this gets sent to the server
        !           301:                  and used on that side too)
        !           302:    
        !           303:           -M, --set-mss n
        !           304:                  set TCP/SCTP maximum segment size (MTU - 40 bytes)
        !           305:    
        !           306:           -N, --no-delay
        !           307:                  set TCP/SCTP no delay, disabling Nagle's Algorithm
        !           308:    
        !           309:           -4, --version4
        !           310:                  only use IPv4
        !           311:    
        !           312:           -6, --version6
        !           313:                  only use IPv6
        !           314:    
        !           315:           -S, --tos n
        !           316:                  set the IP type of service. The usual prefixes for octal and hex
        !           317:                  can be used, i.e. 52, 064 and 0x34 all specify the same value.
        !           318:    
        !           319:           --dscp dscp
        !           320:                  set  the  IP  DSCP  bits.   Both numeric and symbolic values are
        !           321:                  accepted. Numeric values can be specified in decimal, octal  and
        !           322:                  hex (see --tos above).
        !           323:    
        !           324:           -L, --flowlabel n
        !           325:                  set the IPv6 flow label (currently only supported on Linux)
        !           326:    
        !           327:           -X, --xbind name
        !           328:                  Bind  SCTP  associations  to  a  specific  subset of links using
        !           329:                  sctp_bindx(3).  The --B flag will be ignored  if  this  flag  is
        !           330:                  specified.  Normally SCTP will include the protocol addresses of
        !           331:                  all active links on the local host when setting up  an  associa-
        !           332:                  tion.  Specifying at least one --X name will disable this behav-
        !           333:                  iour.  This flag must be specified for each link to be  included
        !           334:                  in  the association, and is supported for both iperf servers and
        !           335:                  clients (the latter are supported by passing the first --X argu-
        !           336:                  ment  to  bind(2)).  Hostnames are accepted as arguments and are
        !           337:                  resolved using getaddrinfo(3).  If the  --4  or  --6  flags  are
        !           338:                  specified,  names  which  do not resolve to addresses within the
        !           339:                  specified protocol family will be ignored.
        !           340:    
        !           341:           --nstreams n
        !           342:                  Set number of SCTP streams.
        !           343:    
        !           344:           -Z, --zerocopy
        !           345:                  Use a "zero copy" method of sending data, such  as  sendfile(2),
        !           346:                  instead of the usual write(2).
        !           347:    
        !           348:           -O, --omit n
        !           349:                  Omit the first n seconds of the test, to skip past the TCP slow-
        !           350:                  start period.
        !           351:    
        !           352:           -T, --title str
        !           353:                  Prefix every output line with this string.
        !           354:    
        !           355:           --extra-data str
        !           356:                  Specify an extra data string field to be included in  JSON  out-
        !           357:                  put.
        !           358:    
        !           359:           -C, --congestion algo
        !           360:                  Set  the  congestion control algorithm (Linux and FreeBSD only).
        !           361:                  An older --linux-congestion synonym for this  flag  is  accepted
        !           362:                  but is deprecated.
        !           363:    
        !           364:           --get-server-output
        !           365:                  Get the output from the server.  The output format is determined
        !           366:                  by the server (in particular, if the server was invoked with the
        !           367:                  --json  flag,  the  output  will be in JSON format, otherwise it
        !           368:                  will be in human-readable format).  If the client  is  run  with
        !           369:                  --json,  the  server output is included in a JSON object; other-
        !           370:                  wise it is appended at the bottom of the human-readable  output.
        !           371:    
        !           372:           --repeating-payload
        !           373:                  Use  repeating pattern in payload, instead of random bytes.  The
        !           374:                  same payload is used in iperf2  (ASCII  '0..9'  repeating).   It
        !           375:                  might  help  to test and reveal problems in networking gear with
        !           376:                  hardware compression (including some WiFi access points),  where
        !           377:                  iperf2  and  iperf3  perform  differently, just based on payload
        !           378:                  entropy.
        !           379:    
        !           380:           --username username
        !           381:                  username to use for authentication to the iperf server (if built
        !           382:                  with OpenSSL support).  The password will be prompted for inter-
        !           383:                  actively when the test is run.  Note, the password to use can
        !           384:                  also be specified via the IPERF3_PASSWORD environment variable.
        !           385:                  If this variable is present, the password prompt will be
        !           386:                  skipped.
        !           387: 
        !           388:           --rsa-public-key-path file
        !           389:                  path to the RSA public key used to encrypt  authentication  cre-
        !           390:                  dentials (if built with OpenSSL support)
        !           391:    
        !           392:    
        !           393:    EXAMPLES
        !           394:       Authentication - RSA Keypair
        !           395:           The  authentication  feature  of iperf3 requires an RSA public keypair.
        !           396:           The public key is used to encrypt the authentication  token  containing
        !           397:           the  user  credentials,  while  the  private key is used to decrypt the
        !           398:           authentication token.  An example of a set of  UNIX/Linux  commands  to
        !           399:           generate correct keypair follows:
        !           400:    
        !           401:                > openssl genrsa -des3 -out private.pem 2048
        !           402:                > openssl rsa -in private.pem -outform PEM -pubout -out public.pem
        !           403:                > openssl rsa -in private.pem -out private_not_protected.pem -out-
        !           404:                form PEM
        !           405:    
        !           406:           After these commands, the public key will be contained in the file pub-
        !           407:           lic.pem and the  private  key  will  be  contained  in  the  file  pri-
        !           408:           vate_not_protected.pem.
        !           409:    
        !           410:       Authentication - Authorized users configuration file
        !           411:           A  simple plaintext file must be provided to the iperf3 server in order
        !           412:           to specify the authorized user credentials.  The file is a simple  list
        !           413:           of  comma-separated  pairs  of  a username and a corresponding password
        !           414:           hash.  The password hash is a SHA256 hash of the string  "{$user}$pass-
        !           415:           word".   The file can also contain commented lines (starting with the #
        !           416:           character).  An example of commands to generate the password hash on  a
        !           417:           UNIX/Linux system is given below:
        !           418:    
        !           419:                > S_USER=mario S_PASSWD=rossi
        !           420:                > echo -n "{$S_USER}$S_PASSWD" | sha256sum | awk '{ print $1 }'
        !           421:    
        !           422:           An example of a password file (with an entry corresponding to the above
        !           423:           username and password) is given below:
        !           424:                > cat credentials.csv
        !           425:                # file format: username,sha256
        !           426:                mario,bf7a49a846d44b454a5d11e7acfaf13d138bbe0b7483aa3e050879700572709b
        !           427:    
        !           428:    
        !           429:    
1.1       misho     430:    AUTHORS
1.1.1.2 ! misho     431:           A list of the contributors to iperf3 can be found within the documenta-
        !           432:           tion located at https://software.es.net/iperf/dev.html#authors.
        !           433:    
        !           434:    
1.1       misho     435:    SEE ALSO
1.1.1.2 ! misho     436:           libiperf(3), https://software.es.net/iperf
        !           437:    
        !           438:    
        !           439:    
        !           440:    ESnet                              June 2018                         IPERF3(1)
1.1       misho     441: 
                    442: The iperf3 manual page will typically be installed in manual
                    443: section 1.
                    444: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>