1IPERF(1)                         User Manuals                         IPERF(1)
2
3
4

NAME

6       iperf  -  perform  network traffic tests using network sockets. Metrics
7       include throughput and latency or link capacity and responsiveness.
8

SYNOPSIS

10       iperf -s [options]
11
12       iperf -c server [options]
13
14       iperf -u -s [options]
15
16       iperf -u -c server [options]
17
18

DESCRIPTION

20       iperf 2 is a testing tool which performs network  traffic  measurements
21       using  network  sockets.  The  performance  metrics  supported  include
22       throughput and latency (or link capacity and  responsiveness.)  Latency
23       measurements  include  both  one  way  delay (OWD) and round trip times
24       (RTTs.) Iperf can use both TCP and UDP sockets (or protocols.) It  sup‐
25       ports unidirectional, full duplex (same socket) and bidirectional traf‐
26       fic, and supports multiple, simultaneous traffic streams.  It  supports
27       multicast  traffic including source specific multicast (SSM) joins. Its
28       multi-threaded design allows for peak  performance.  Metrics  displayed
29       help  to characterize host to host network performance. Setting the en‐
30       hanced (-e) option provides all available metrics.  Note:  the  metrics
31       are at the socket level reads and writes. They do not include the over‐
32       head associated with lower level protocol layer headers.
33
34       The user must establish both a server (to receive traffic) and a client
35       (to  generate  and  send  traffic) for a test to occur.  The client and
36       server typically are on different hosts or computers but need not be.
37

GENERAL OPTIONS

39       -b, --bandwidth
40              set the target bandwidth and  optional  standard  deviation  per
41              <mean>,[<stdev>] (See NOTES for suffixes)
42
43       -e, --enhanced
44              Display  enhanced  output in reports otherwise use legacy report
45              (ver 2.0.5) formatting (see NOTES)
46
47       -f, --format [abkmgBKMG]
48              format to report: adaptive, bits, Bytes,  Kbits,  Mbits,  Gbits,
49              KBytes, MBytes, GBytes (see NOTES for more)
50
51       -h, --help
52              print a help synopsis
53
54           --hide-ips
55              obscure  ip  addresses in output (useful when wanting to publish
56              results and not display the full ip addresses. v4 only)
57
58       -i, --interval < t | f >
59              sample or display interval reports every t seconds (default)  or
60              every  frame  or burst, i.e. if f is used then the interval will
61              be each frame or burst. The frame interval reporting is  experi‐
62              mental.   Also suggest a compile with fast-sampling, i.e. ./con‐
63              figure --enable-fastsampling
64
65       -l, --len n[kmKM]
66              set read/write buffer size (TCP) or length (UDP) to n  (TCP  de‐
67              fault 128K, UDP default 1470)
68
69           --l2checks
70              perform  layer 2 length checks on received UDP packets (requires
71              systems that support packet sockets, e.g. Linux)
72
73       -m, --print_mss
74              print TCP maximum segment size
75
76           --NUM_REPORT_STRUCTS <count>
77              Override the default shared  memory  size  between  the  traffic
78              thread(s)  and  reporter  thread in order to mitigate mutex lock
79              contentions. The default value of 5000 should be sufficient  for
80              1Gb/s networks. Increase this upon seeing the Warning message of
81              reporter thread too slow. If the  Warning  message  isn't  seen,
82              then  increasing  this  won't have any significant effect (other
83              than to use some additional memory.)
84
85       -o, --output filename
86              output the report or error message to this specified file
87
88           --permit-key [=<value>]
89              Set a key value that must match for the server to accept traffic
90              on  a  connection. If the option is given without a value on the
91              server a key value will be autogenerated and  displayed  in  its
92              initial  settings  report.  The lifetime of the key is set using
93              --permit-key-timeout and defaults to twenty seconds.  The  value
94              is  required  on clients. The value will also be used as part of
95              the transfer id in reports. The option set on the client but not
96              the  server  will  also  cause the server to reject the client's
97              traffic. TCP only, no UDP support.
98
99       -p, --port m[-n]
100              set client or server port(s) to send or listen on per m (default
101              5001)  w/optional  port  range  per m-n (e.g. -p 6002-6008) (see
102              NOTES)
103
104           --sum-dstip
105              sum traffic threads based upon the destination IP  address  (de‐
106              fault is source ip address)
107
108           --sum-only
109              set  the output to sum reports only. Useful for -P at large val‐
110              ues
111
112       -t, --time n
113              time in seconds to listen for new traffic  connections,  receive
114              traffic or send traffic
115
116       -u, --udp
117              use UDP rather than TCP
118
119           --utc
120              use  coordinated universal time (UTC) when outputting time (oth‐
121              erwise use local time)
122
123       -w, --window n[kmKM]
124              TCP window size (socket buffer size)
125
126       -z, --realtime
127              Request real-time scheduler, if supported.
128
129       -B, --bind host[:port][%dev]
130              bind to host, ip address or multicast address, optional port  or
131              device (see NOTES)
132
133       -C, --compatibility
134              for use with older versions does not sent extra msgs
135
136       -M, --mss n
137              set TCP maximum segment size using TCP_MAXSEG
138
139       -N, --nodelay
140              set TCP no delay, disabling Nagle's Algorithm
141
142       -v, --version
143              print version information and quit
144
145       -x, --reportexclude [CDMSV]
146              exclude C(connection) D(data) M(multicast) S(settings) V(server)
147              reports
148
149       -y, --reportstyle C|c
150              if set to C or c report results as CSV (comma separated values)
151
152       -Z, --tcp-congestion
153              Set the default congestion-control algorithm to be used for  new
154              connections. Platforms must support setsockopt's TCP_CONGESTION.
155              (Notes: See sysctl and tcp_allowed_congestion_control for avail‐
156              able options. May require root privileges.)
157

SERVER SPECIFIC OPTIONS

159       -1, --singleclient
160              set the server to process only one client at a time
161
162       -b, --bandwidth n[kmgKMG]
163              set target read rate to n bits/sec. TCP only for the server.
164
165       -s, --server
166              run in server mode
167
168           --histograms[=binwidth[u],bincount,[lowerci],[upperci]]
169              enable  latency  histograms for udp packets (-u), for tcp writes
170              (with --trip-times), or for either udp or tcp with --isochronous
171              clients,  or  for --bounceback. The binning can be modified. Bin
172              widths (default 1 millisecond, append u for microseconds, m  for
173              milliseconds)  bincount is total bins (default 1000), ci is con‐
174              fidence interval between 0-100% (default lower 5%, upper 95%,  3
175              stdev 99.7%)
176
177           --jitter-histograms[=<binwidth>]
178              enable jitter histograms for udp packets (-u). Optional value is
179              the bin width where units are microseconds and defaults  to  100
180              usecs
181
182           --permit-key [=<value>]
183              Set a key value that must match for the server to accept traffic
184              from a client (also set  with  --permit-key.)  The  server  will
185              auto-generate  a  globally  unique  key when the option is given
186              without a value. This value will be displayed  in  the  server's
187              initial  settings  report.  The lifetime of the key is set using
188              --permit-key-timeout and defaults to twenty seconds.  TCP  only,
189              no UDP support.
190
191           --permit-key-timeout <value>
192              Set  the  lifetime  of the permit key in seconds. Defaults to 20
193              seconds if not set. A value of zero will disable the timer.
194
195           --tap-dev <dev>
196              Set the receive interface to the TAP device as specified.
197
198           --tcp-rx-window-clamp n[kmKM]
199              Set the socket option of TCP_WINDOW_CLAMP, units is bytes.
200
201       -t, --time n
202              time in seconds to listen for new traffic connections and/or re‐
203              ceive traffic (defaults to infinite)
204
205           --tos-override <val>
206              set  the  socket's IP_TOS value for reverse or full duplex traf‐
207              fic. Supported in versions 2.1.5 or greater.  Previous  versions
208              won't set IP_TOS on reverse traffic. See NOTES for values.
209
210       -B, --bind ip | ip%device
211              bind src ip addr and optional src device for receiving
212
213       -D, --daemon
214              run  the server as a daemon. On Windows this will run the speci‐
215              fied command-line under the IPerfService, installing the service
216              if  necessary.  Note the service is not configured to auto-start
217              or restart - if you need a self-starting service you  will  need
218              to create an init script or use Windows "sc" commands.
219
220       -H, --ssm-host host
221              Set  the  source host (ip addr) per SSM multicast, i.e. the S of
222              the S,G
223
224       -R, --remove
225              remove the IPerfService (Windows only).
226
227       -U, --single_udp
228              run in single threaded UDP mode
229
230       -V, --ipv6_domain
231              Enable IPv6 reception  by  setting  the  domain  and  socket  to
232              AF_INET6 (Can receive on both IPv4 and IPv6)
233

CLIENT SPECIFIC OPTIONS

235       -b, --bandwidth n[kmgKMG][,n[kmgKMG]] | n[kmgKMG]pps
236              set  target  bandwidth  to  n bits/sec (default 1 Mbit/sec) or n
237              packets per sec. This may be used with TCP or  UDP.  Optionally,
238              for variable loads, use format of  mean,standard deviation
239
240           --bounceback[=n]
241              run  a TCP bounceback or rps test with optional number writes in
242              a burst per value of n. The default is ten writes  every  period
243              and  the default period is one second (Note: set size with -l or
244              --len which defaults to 100 bytes)
245
246           --bounceback-hold n
247              request the server to insert a delay of n  milliseconds  between
248              its read and write (default is no delay)
249
250           --bounceback-period[=n]
251              request the client schedule its send(s) every n seconds (default
252              is one second, use zero value for immediate or  continuous  back
253              to back)
254
255           --bounceback-no-quickack
256              request  the server not set the TCP_QUICKACK socket option (dis‐
257              abling TCP ACK delays) during a bounceback test (see NOTES)
258
259           --bounceback-txdelay n
260              request the client to delay n seconds between the start  of  the
261              working load and the bounceback traffic (default is no delay)
262
263           --burst-period n
264              Set  the burst period in seconds. Defaults to one second. (Note:
265              assumed use case is low duty cycle traffic bursts)
266
267           --burst-size n
268              Set the burst size in bytes. Defaults  to  1M  if  no  value  is
269              given.  -c, --client host | host%device run in client mode, con‐
270              necting to host  where the optional  %dev  will  SO_BINDTODEVICE
271              that output interface (requires root and see NOTES)
272
273
274           --connect-only[=n]
275              only  perform a TCP connect (or 3WHS) without any data transfer,
276              useful to measure TCP connect() times. Optional value  of  n  is
277              the  total  number of connects to do (zero is run forever.) Note
278              that -i will rate limit the connects where -P will create bursts
279              and -t will end the client and hence end its connect attempts.
280
281           --connect-retries[= n]
282              number of times to retry a TCP connect at the application level.
283              See operating system information on the details of  TCP  connect
284              related settings.
285
286       -d, --dualtest
287              Do  a  bidirectional  test simultaneous test using two unidirec‐
288              tional sockets
289
290           --fq-rate n[kmgKMG]
291              Set a rate to be used with fair-queuing based socket-level  pac‐
292              ing,  in  bytes  or bits per second. Only available on platforms
293              supporting the SO_MAX_PACING_RATE socket option. (Note: Here the
294              suffixes  indicate bytes/sec or bits/sec per use of uppercase or
295              lowercase, respectively)
296
297           --full-duplex
298              run a full duplex test, i.e. traffic in both  transmit  and  re‐
299              ceive directions using the same socket
300
301           --histograms[=binwidth[u],bincount,[lowerci],[upperci]]
302              enable  select()/write()  histograms  with  --tcp-write-times or
303              --bounceback (these options are mutually exclusive.) The binning
304              can  be modified. Bin widths (default 100 microseconds, append u
305              for microseconds, m for milliseconds)  bincount  is  total  bins
306              (default  10000),  ci is confidence interval between 0-100% (de‐
307              fault lower 5%, upper 95%, 3 stdev 99.7%)
308
309           --incr-dstip
310              increment the destination ip address  when  using  the  parallel
311              (-P) or port range option
312
313           --incr-dstport
314              increment  the  destination port when using the parallel (-P) or
315              port range option
316
317           --incr-srcip
318              increment the source ip address when using the parallel (-P)  or
319              port range option
320
321           --incr-srcport
322              increment  the source ip address when using the parallel (-P) or
323              port range option, requires -B to set the src port
324
325           --ipg n
326              set the inter-packet gap to n (units of seconds) for packets  or
327              within a frame/burst when --isochronous is set
328
329           --isochronous[=fps:mean,stdev]
330              send  isochronous  traffic  with frequency frames per second and
331              load defined by mean and standard deviation using a  log  normal
332              distribution, defaults to 60:20m,0. (Note: Here the suffixes in‐
333              dicate bytes/sec or bits/sec per use of uppercase or  lowercase,
334              respectively.  Also  the  p suffix is supported to set the burst
335              size in packets, e.g. isochronous=2:25p will send two 25  packet
336              bursts every second, or one 25 packet burst every 0.5 seconds.)
337
338           --local-only[=1|0]
339              Set  1  to  limit traffic to the local network only (through the
340              use of SO_DONTROUTE) set to zero otherwise with  optional  over‐
341              ride of compile time default (see configure --default-localonly)
342
343           --near-congestion[=n]
344              Enable TCP write rate limiting per the sampled RTT. The delay is
345              applied after the -l number of bytes  have  completed.  The  op‐
346              tional  value  is the multiplier to the RTT and defines the time
347              delay. This value defaults to 0.5 if it is not set. Values  less
348              than  1  are supported but the value cannot be negative. This is
349              an experimental feature. It is not likely stable  on  live  net‐
350              works. Suggested use is over controlled test networks.
351
352           --no-connect-sync
353              By  default,  parallel  traffic  threads (per -P greater than 1)
354              will synchronize after their TCP  connects  and  prior  to  each
355              sending  traffic, i.e. all the threads first complete (or error)
356              the TCP 3WHS before any traffic thread will start sending.  This
357              option  disables  that  synchronization  such  that each traffic
358              thread will start sending immediately after completing its  suc‐
359              cessful connect.
360
361           --no-udp-fin
362              Don't  perform  the  UDP  final  server to client exchange which
363              means there won't be a final  server  report  displayed  on  the
364              client.  All packets per the test will be from the client to the
365              server and no packets should be sent  in  the  other  direction.
366              It's  highly  suggested that -t be set on the server if this op‐
367              tion is being used.  This is because  there  will  be  only  one
368              trigger  ending  packet  sent  from client to server and if it's
369              lost then the server will continue to run. (Requires ver  2.0.14
370              or better)
371
372       -n, --num n[kmKM]
373              number of bytes to transmit (instead of -t)
374
375           --permit-key [=<value>]
376              Set  a  key  value  that must match the server's value (also set
377              with --permit-key) in order for the  server  to  accept  traffic
378              from the client. TCP only, no UDP support.
379
380       -r, --tradeoff
381              Do  a  bidirectional  test individually - client-to-server, fol‐
382              lowed by a reversed test, server-to-client
383
384           --tcp-quickack
385              Set TCP_QUICKACK on the socket
386
387           --tcp-write-prefetch n[kmKM]
388              Set TCP_NOTSENT_LOWAT on the socket and use event  based  writes
389              per select() on the socket.
390
391           --tcp-write-times
392              Measure the socket write times
393
394       -t, --time n|0
395              time  in seconds to transmit traffic, use zero for infinite (de‐
396              fault is 10 secs)
397
398           --trip-times
399              enable the measurement of end to end  write  to  read  latencies
400              (client and server clocks must be synchronized.) See notes about
401              tcp-write-prefetch being enabled.
402
403           --txdelay-time
404              time in seconds to hold back or delay after the TCP connect  and
405              prior  to  the socket writes. For UDP it's the delay between the
406              traffic thread starting and the first write.
407
408           --txstart-time n.n
409              set the txstart-time to n.n using  unix  or  epoch  time  format
410              (supports  microsecond resolution, e.g 1536014418.123456) An ex‐
411              ample to delay one second using command substitution is iperf -c
412              192.168.1.10 --txstart-time $(expr $(date +%s) + 1).$(date +%N)
413
414       -B, --bind ip | ip:port | ipv6 -V | [ipv6]:port -V
415              bind src ip addr and optional port as the source of traffic (see
416              NOTES)
417
418       -F, --fileinput name
419              input the data to be transmitted from a file
420
421       -I, --stdin
422              input the data to be transmitted from stdin
423
424       -L, --listenport n
425              port to receive bidirectional tests back on
426
427       -P, --parallel n
428              number of parallel client threads to run
429
430       -R, --reverse
431              reverse the traffic flow (useful for testing through  firewalls,
432              see NOTES)
433
434       -S, --tos <val>
435              set  the  socket's  IP_TOS value. Versions 2.1.5 or greater will
436              reflect this tos setting back with  --reverse  or  --full-duplex
437              option.  (Previous  versions  won't set tos on the reverse traf‐
438              fic.) Note: use server  side  --tos-override  to  override.  See
439              NOTES for values.
440
441       -T, --ttl n
442              time-to-live, for multicast (default 1)
443
444           --working-load[=up|down|bidir][,n]
445              request  a concurrent working load, currently TCP stream(s), de‐
446              faults to full duplex (or bidir) unless the up or down option is
447              provided.  The  number  of  TCP streams defaults to 1 and can be
448              changed via the n value,  e.g.  --working-load=down,4  will  use
449              four  TCP streams from server to the client as the working load.
450              The IP ToS will be BE (0x0) for working load traffic.
451
452       -V, --ipv6_domain
453              Set the domain to IPv6 (send packets over IPv6)
454
455       -X, --peerdetect
456              run peer version detection prior to traffic.
457
458       -Z, --linux-congestion algo
459              set TCP congestion control algorithm (Linux only)
460

EXAMPLES

462       TCP tests (client)
463
464       iperf -c <host> -e -i 1
465       ------------------------------------------------------------
466       Client connecting to <host>, TCP port 5001 with pid 5149
467       Write buffer size:  128 KByte
468       TCP window size:  340 KByte (default)
469       ------------------------------------------------------------
470       [  3] local 45.56.85.133 port 49960 connected  with  45.33.58.123  port
471       5001 (ct=3.23 ms)
472       [  ID]  Interval         Transfer     Bandwidth        Write/Err   Rtry
473       Cwnd/RTT        NetPwr
474       [  3] 0.00-1.00 sec   126 MBytes   1.05  Gbits/sec   1006/0           0
475       56K/626 us  210636.47
476       [   3]  1.00-2.00  sec    138 MBytes  1.15 Gbits/sec  1100/0        299
477       483K/3884 us  37121.32
478       [  3] 2.00-3.00 sec   137 MBytes   1.15  Gbits/sec   1093/0          24
479       657K/5087 us  28162.31
480       [   3]  3.00-4.00  sec    126 MBytes  1.06 Gbits/sec  1010/0        284
481       294K/2528 us  52366.58
482       [  3] 4.00-5.00 sec   117  MBytes    980  Mbits/sec   935/0         373
483       487K/2025 us  60519.66
484       [   3]  5.00-6.00  sec    144 MBytes  1.20 Gbits/sec  1149/0          2
485       644K/3570 us  42185.36
486       [  3] 6.00-7.00 sec   126 MBytes   1.06  Gbits/sec   1011/0         112
487       582K/5281 us  25092.56
488       [   3]  7.00-8.00  sec    110  MBytes   922 Mbits/sec  879/0         56
489       279K/1957 us  58871.89
490       [  3] 8.00-9.00 sec   127 MBytes   1.06  Gbits/sec   1014/0          46
491       483K/3372 us  39414.89
492       [   3]  9.00-10.00  sec   132 MBytes  1.11 Gbits/sec  1054/0          0
493       654K/3380 us  40872.75
494       [  3] 0.00-10.00 sec  1.25 GBytes  1.07 Gbits/sec   10251/0        1196
495       -1K/3170 us  42382.03
496
497
498       where (per -e,)
499              ct= TCP connect time (or three way handshake time 3WHS)
500              Write/Err Total number of successful socket writes. Total number
501              of non-fatal socket write errors
502              Rtry Total number of TCP retries
503              Cwnd/RTT (*nix only) TCP congestion window and round  trip  time
504              (sampled where NA indicates no value)
505              NetPwr (*nix only) Network power defined as (throughput / RTT)
506
507
508       iperf  -c host.doamin.com -i 1 --bounceback --permit-key=mytest --hide-
509       ips
510       ------------------------------------------------------------
511       Client connecting to (**hidden**), TCP port 5001
512       Bursting:  100 Byte writes 10 times every 1.00 second(s)
513       Bounce-back test (size= 100 Byte) (server hold req=0 usecs)
514       TCP window size: 16.0 KByte (default)
515       ------------------------------------------------------------
516       [mytest(1)] local *.*.*.96 port 38044  connected  with  *.*.*.123  port
517       5001 (bb len/hold=100/0) (icwnd/mss/irtt=14/1448/10605)
518       [     ID]     Interval           Transfer       Bandwidth            BB
519       cnt=avg/min/max/stdev         Rtry  Cwnd/RTT    RPS
520       [mytest(1)]   0.00-1.00    sec     1.95    KBytes     16.0    Kbits/sec
521       10=11.949/9.662/19.597/3.127 ms    0   14K/10930 us    83 rps
522       [mytest(1)]    1.00-2.00    sec     1.95    KBytes     16.0   Kbits/sec
523       10=10.004/9.651/10.322/0.232 ms    0   14K/10244 us    99 rps
524       [mytest(1)]   2.00-3.00    sec     1.95    KBytes     16.0    Kbits/sec
525       10=10.582/9.720/14.831/1.573 ms    0   14K/10352 us    94 rps
526       [mytest(1)]    3.00-4.00    sec     1.95    KBytes     16.0   Kbits/sec
527       10=11.303/9.940/15.114/2.026 ms    0   14K/10832 us    88 rps
528       [mytest(1)]   4.00-5.00    sec     1.95    KBytes     16.0    Kbits/sec
529       10=11.148/9.671/14.803/1.837 ms    0   14K/10858 us    89 rps
530       [mytest(1)]    5.00-6.00    sec     1.95    KBytes     16.0   Kbits/sec
531       10=10.207/9.695/10.729/0.356 ms    0   14K/10390 us    97 rps
532       [mytest(1)]   6.00-7.00    sec     1.95    KBytes     16.0    Kbits/sec
533       10=10.871/9.770/14.387/1.547 ms    0   14K/10660 us    91 rps
534       [mytest(1)]    7.00-8.00    sec     1.95    KBytes     16.0   Kbits/sec
535       10=11.224/9.760/14.993/1.837 ms    0   14K/11027 us    89 rps
536       [mytest(1)]   8.00-9.00    sec     1.95    KBytes     16.0    Kbits/sec
537       10=10.719/9.887/14.553/1.455 ms    0   14K/10620 us    93 rps
538       [mytest(1)]    9.00-10.00    sec     1.95    KBytes    16.0   Kbits/sec
539       10=10.775/9.689/14.746/1.562 ms    0   14K/10596 us    92 rps
540       [mytest(1)]   0.00-10.02   sec     19.5    KBytes     16.0    Kbits/sec
541       100=10.878/9.651/19.597/1.743 ms    0   14K/11676 us    91 rps
542       [            1]           0.00-10.02           sec          BB8(f)-PDF:
543       bin(w=100us):cnt(100)=97:5,98:8,99:10,100:8,101:12,102:10,103:6,104:7,105:2,106:2,107:3,108:3,109:2,110:1,114:1,115:1,118:1,120:2,121:1,124:1,125:1,128:1,140:1,143:1,144:1,146:2,148:1,149:2,150:1,151:1,152:1,196:1
544       (5.00/95.00/99.7%=97/149/196,Outliers=0,obl/obu=0/0)
545
546
547       where  BB  cnt=avg/min/max/stdev  Count  of  bouncebacks, average time,
548              minimum time, maximum time, standard deviation units of ms
549              Rtry Total number of TCP retries
550              Cwnd/RTT (*nix only) TCP congestion window and round  trip  time
551              (sampled where NA indicates no value)
552              RPS Responses per second
553
554
555       TCP tests (server)
556
557       iperf -s -e -i 1 -l 8K
558       ------------------------------------------------------------
559       Server listening on TCP port 5001 with pid 13430
560       Read buffer size: 8.00 KByte
561       TCP window size: 85.3 KByte (default)
562       ------------------------------------------------------------
563       [   4]  local  45.33.58.123  port 5001 connected with 45.56.85.133 port
564       49960
565       [    ID]    Interval           Transfer       Bandwidth           Reads
566       Dist(bin=1.0K)
567       [    4]   0.00-1.00   sec     124   MBytes    1.04   Gbits/sec    22249
568       798:2637:2061:767:2165:1563:589:11669
569       [    4]   1.00-2.00   sec     136   MBytes    1.14   Gbits/sec    24780
570       946:3227:2227:790:2427:1888:641:12634
571       [    4]   2.00-3.00   sec     137   MBytes    1.15   Gbits/sec    24484
572       1047:2686:2218:810:2195:1819:728:12981
573       [    4]   3.00-4.00   sec     126   MBytes    1.06   Gbits/sec    20812
574       863:1353:1546:614:1712:1298:547:12879
575       [    4]   4.00-5.00   sec     117   MBytes     984   Mbits/sec    20266
576       769:1886:1828:589:1866:1350:476:11502
577       [    4]   5.00-6.00   sec     143   MBytes    1.20   Gbits/sec    24603
578       1066:1925:2139:822:2237:1827:744:13843
579       [    4]   6.00-7.00   sec     126   MBytes    1.06   Gbits/sec    22635
580       834:2464:2249:724:2269:1646:608:11841
581       [    4]   7.00-8.00   sec     110   MBytes     921   Mbits/sec    21107
582       842:2437:2747:592:2871:1903:496:9219
583       [    4]   8.00-9.00   sec     126   MBytes    1.06   Gbits/sec    22804
584       1038:1784:2639:656:2738:1927:573:11449
585       [   4]   9.00-10.00   sec     133   MBytes    1.11   Gbits/sec    23091
586       1088:1654:2105:710:2333:1928:723:12550
587       [    4]   0.00-10.02   sec    1.25   GBytes    1.07  Gbits/sec   227306
588       9316:22088:21792:7096:22893:17193:6138:120790
589
590       where (per -e,)
591              Reads Total number of socket reads
592              Dist(bin=size) Eight bin histogram of the socket reads  returned
593              byte  count.  Bin width is set per size. Bins are separated by a
594              colon. In the example, the bins are 0-1K, 1K-2K, .., 7K-8K.
595
596
597       TCP tests (server with --trip-times on client) iperf -s -i 1 -w 4M
598       ------------------------------------------------------------
599       Server listening on TCP port 5001
600       TCP window size: 8.00 MByte (WARNING: requested 4.00 MByte)
601       ------------------------------------------------------------
602       [  4] local 192.168.1.4%eth0 port 5001 connected with 192.168.1.7  port
603       44798 (trip-times) (MSS=1448) (peer 2.0.14-alpha)
604       [   ID]   Interval          Transfer      Bandwidth      Burst  Latency
605       avg/min/max/stdev (cnt/size) inP NetPwr  Reads=Dist
606       [     4]    0.00-1.00    sec     19.0    MBytes       159     Mbits/sec
607       52.314/10.238/117.155/19.779   ms   (151/131717)   1.05   MByte  380.19
608       781=306:253:129:48:18:15:8:4
609       [     4]    1.00-2.00    sec     20.0    MBytes       168     Mbits/sec
610       53.863/21.264/79.252/12.277   ms   (160/131080)   1.08   MByte   389.38
611       771=294:236:126:60:18:24:10:3
612       [     4]    2.00-3.00    sec     18.2    MBytes       153     Mbits/sec
613       58.718/22.000/137.944/20.397   ms   (146/130964)   1.06   MByte  325.64
614       732=299:231:98:52:18:19:10:5
615       [   4]  3.00-4.00   sec    19.7   MBytes     165   Mbits/sec    50.448/
616       8.921/82.728/14.627     ms     (158/130588)      997    KByte    409.00
617       780=300:255:121:58:15:18:7:6
618       [     4]    4.00-5.00    sec     18.8    MBytes       158     Mbits/sec
619       53.826/11.169/115.316/15.541   ms   (150/131420)   1.02   MByte  366.24
620       761=302:226:134:52:22:17:7:1
621       [     4]    5.00-6.00    sec     19.5    MBytes       164     Mbits/sec
622       50.943/11.922/76.134/14.053   ms   (156/131276)   1.03   MByte   402.00
623       759=273:246:149:45:16:18:4:8
624       [     4]    6.00-7.00    sec     18.5    MBytes       155     Mbits/sec
625       57.643/10.039/127.850/18.950   ms   (148/130926)   1.05   MByte  336.16
626       710=262:228:133:37:16:20:8:6
627       [     4]    7.00-8.00    sec     19.6    MBytes       165     Mbits/sec
628       52.498/12.900/77.045/12.979   ms   (157/131003)   1.00   MByte   391.78
629       742=288:200:135:68:16:23:4:8
630       [   4]  8.00-9.00   sec    18.0   MBytes     151   Mbits/sec    58.370/
631       8.026/150.243/21.445     ms     (144/131255)    1.06    MByte    323.81
632       716=268:241:108:51:20:17:8:3
633       [     4]    9.00-10.00    sec     18.4    MBytes      154     Mbits/sec
634       56.112/12.419/79.790/13.668   ms   (147/131194)   1.05   MByte   343.70
635       822=330:303:120:26:16:14:9:4
636       [     4]    10.00-10.06    sec     1.03    MBytes      146    Mbits/sec
637       69.880/45.175/78.754/10.823    ms    (9/119632)   1.74   MByte   260.40
638       62=26:30:5:1:0:0:0:0
639       [   4]  0.00-10.06  sec     191   MBytes     159   Mbits/sec    54.183/
640       8.026/150.243/16.781     ms    (1526/131072)    1.03    MByte    366.98
641       7636=2948:2449:1258:498:175:185:75:48
642
643       where (per -e,)
644              Burst Latency One way TCP write() to read() latency in mean/min‐
645              imum/maximum/standard   deviation  format  (Note:  requires  the
646              client's and server's system clocks to be synchronized to a com‐
647              mon  reference,  e.g.  using  precision time protocol PTP. A GPS
648              disciplined OCXO is a recommended reference.)
649              cnt Number of completed bursts received and used for  the  burst
650              latency calculations
651              size  Average burst size in bytes (computed average and estimate
652              only)
653              inP inP, short for in progress, is the average number  of  bytes
654              in  progress  or  in  flight. This is taken from the application
655              level write to read perspective. Note this is a mean value.  The
656              parenthesis value is the standard deviation from the mean.  (Re‐
657              quires --trip-times on client. See Little's law in NOTES.)
658              NetPwr Network power defined as (throughput / one way latency)
659
660
661       TCP tests (with one way delay sync check -X  and  --trip-times  on  the
662       client)
663
664       iperf -c 192.168.1.4 -X -e --trip-times -i 1 -t 2
665       ------------------------------------------------------------
666       Client  connecting  to  192.168.1.4,  TCP  port  5001 with pid 16762 (1
667       flows)
668       Write buffer size: 131072 Byte
669       TCP window size: 85.0 KByte (default)
670       ------------------------------------------------------------
671       [   1]   Clock   sync   check   (ms):    RTT/Half=(3.361/1.680)    OWD-
672       send/ack/asym=(2.246/1.115/1.131)
673       [   1] local 192.168.1.1%ap0 port 47466 connected with 192.168.1.4 port
674       5001 (MSS=1448) (trip-times) (sock=3) (peer 2.1.4-master)
675       [  ID]  Interval         Transfer     Bandwidth        Write/Err   Rtry
676       Cwnd/RTT        NetPwr
677       [   1]  0.00-1.00  sec   9.50  MBytes   79.7 Mbits/sec  77/0          0
678       2309K/113914 us  87
679       [  1] 1.00-2.00 sec   7.12  MBytes   59.8  Mbits/sec   57/0           0
680       2492K/126113 us  59
681       [   1]  2.00-2.42  sec    128  KBytes   2.47  Mbits/sec  2/0          0
682       2492K/126113 us  2
683       [  1] 0.00-2.42 sec  16.8  MBytes   58.0  Mbits/sec   136/0           0
684       2492K/126113 us  57
685
686
687       UDP tests (client)
688
689       iperf -c <host> -e -i 1 -u -b 10m
690       ------------------------------------------------------------
691       Client connecting to <host>, UDP port 5001 with pid 5169
692       Sending 1470 byte datagrams, IPG target: 1176.00 us (kalman adjust)
693       UDP buffer size:  208 KByte (default)
694       ------------------------------------------------------------
695       [   3]  local  45.56.85.133 port 32943 connected with 45.33.58.123 port
696       5001
697       [ ID] Interval        Transfer     Bandwidth      Write/Err  PPS
698       [  3] 0.00-1.00 sec  1.19 MBytes  10.0 Mbits/sec  852/0      851 pps
699       [  3] 1.00-2.00 sec  1.19 MBytes  10.0 Mbits/sec  850/0      850 pps
700       [  3] 2.00-3.00 sec  1.19 MBytes  10.0 Mbits/sec  850/0      850 pps
701       [  3] 3.00-4.00 sec  1.19 MBytes  10.0 Mbits/sec  851/0      850 pps
702       [  3] 4.00-5.00 sec  1.19 MBytes  10.0 Mbits/sec  850/0      850 pps
703       [  3] 5.00-6.00 sec  1.19 MBytes  10.0 Mbits/sec  850/0      850 pps
704       [  3] 6.00-7.00 sec  1.19 MBytes  10.0 Mbits/sec  851/0      850 pps
705       [  3] 7.00-8.00 sec  1.19 MBytes  10.0 Mbits/sec  850/0      850 pps
706       [  3] 8.00-9.00 sec  1.19 MBytes  10.0 Mbits/sec  851/0      850 pps
707       [  3] 0.00-10.00 sec  11.9 MBytes  10.0 Mbits/sec  8504/0      850 pps
708       [  3] Sent 8504 datagrams
709       [  3] Server Report:
710       [  3] 0.00-10.00 sec  11.9 MBytes  10.0 Mbits/sec   0.047 ms    0/ 8504
711       (0%)  0.537/ 0.392/23.657/ 0.497 ms  850 pps  2329.37
712
713       where (per -e,)
714              Write/Err Total number of successful socket writes. Total number
715              of non-fatal socket write errors
716              PPS Transmit packet rate in packets per second
717
718
719       UDP tests (server) iperf -s -i 1 -w 4M -u
720       ------------------------------------------------------------
721       Server listening on UDP port 5001
722       Receiving 1470 byte datagrams
723       UDP buffer size: 8.00 MByte (WARNING: requested 4.00 MByte)
724       ------------------------------------------------------------
725       [  3] local 192.168.1.4 port 5001 connected with 192.168.1.1 port 60027
726       (WARN:  winsize=8.00  MByte  req=4.00  MByte)  (trip-times) (0.0) (peer
727       2.0.14-alpha)
728       [ ID] Interval        Transfer     Bandwidth        Jitter   Lost/Total
729       Latency avg/min/max/stdev PPS  inP NetPwr
730       [  3] 0.00-1.00 sec  44.5 MBytes   373 Mbits/sec   0.071 ms 52198/83938
731       (62%) 75.185/ 2.367/85.189/14.430 ms 31854 pps 3.64 MByte 620.58
732       [   3]  1.00-2.00  sec   44.8  MBytes    376   Mbits/sec     0.015   ms
733       59549/143701  (41%) 79.609/75.603/85.757/ 1.454 ms 31954 pps 3.56 MByte
734       590.04
735       [   3]  2.00-3.00  sec   44.5  MBytes    373   Mbits/sec     0.017   ms
736       59494/202975  (29%) 80.006/75.951/88.198/ 1.638 ms 31733 pps 3.56 MByte
737       583.07
738       [   3]  3.00-4.00  sec   44.5  MBytes    373   Mbits/sec     0.019   ms
739       59586/262562  (23%) 79.939/75.667/83.857/ 1.145 ms 31767 pps 3.56 MByte
740       583.57
741       [   3]  4.00-5.00  sec   44.5  MBytes    373   Mbits/sec     0.081   ms
742       59612/322196  (19%) 79.882/75.400/86.618/ 1.666 ms 31755 pps 3.55 MByte
743       584.40
744       [   3]  5.00-6.00  sec   44.7  MBytes    375   Mbits/sec     0.064   ms
745       59571/381918  (16%) 79.767/75.571/85.339/ 1.556 ms 31879 pps 3.56 MByte
746       588.02
747       [   3]  6.00-7.00  sec   44.6  MBytes    374   Mbits/sec     0.041   ms
748       58990/440820  (13%) 79.722/75.662/85.938/ 1.087 ms 31820 pps 3.58 MByte
749       586.73
750       [   3]  7.00-8.00  sec   44.7  MBytes    375   Mbits/sec     0.027   ms
751       59679/500548  (12%) 79.745/75.704/84.731/ 1.094 ms 31869 pps 3.55 MByte
752       587.46
753       [   3]  8.00-9.00  sec   44.3  MBytes    371   Mbits/sec     0.078   ms
754       59230/559499  (11%) 80.346/75.514/94.293/ 2.858 ms 31590 pps 3.58 MByte
755       577.97
756       [   3]  9.00-10.00  sec   44.4  MBytes    373  Mbits/sec     0.073   ms
757       58782/618394 (9.5%) 79.125/75.511/93.638/ 1.643 ms 31702 pps 3.55 MByte
758       588.99
759       [   3]  10.00-10.08  sec   3.53  MBytes    367  Mbits/sec    0.129   ms
760       6026/595236  (1%)  94.967/80.709/99.685/  3.560 ms 31107 pps 3.58 MByte
761       483.12
762       [   3]  0.00-10.08  sec    449  MBytes    374  Mbits/sec     0.129   ms
763       592717/913046  (65%)  79.453/  2.367/99.685/  5.200 ms 31776 pps (null)
764       587.91
765
766
767       where (per -e,)
768              Latency End to end latency in mean/minimum/maximum/standard  de‐
769              viation  format (Note: requires the client's and server's system
770              clocks to be synchronized to a common reference, e.g. using pre‐
771              cision  time  protocol  PTP.  A GPS disciplined OCXO is a recom‐
772              mended reference.)
773              PPS Received packet rate in packets per second
774              inP inP, short for in progress, is the average number  of  bytes
775              in  progress  or  in  flight.  This is taken from an application
776              write to read perspective. (Requires --trip-times on client. See
777              Little's law in NOTES.)
778              NetPwr Network power defined as (throughput / latency)
779
780
781       Isochronous UDP tests (client)
782
783       iperf -c 192.168.100.33 -u -e -i 1 --isochronous=60:100m,10m --realtime
784       ------------------------------------------------------------
785       Client connecting to 192.168.100.33, UDP port 5001 with pid 14971
786       UDP  isochronous:  60  frames/sec mean= 100 Mbit/s, stddev=10.0 Mbit/s,
787       Period/IPG=16.67/0.005 ms
788       UDP buffer size:  208 KByte (default)
789       ------------------------------------------------------------
790       [  3] local 192.168.100.76 port  42928  connected  with  192.168.100.33
791       port 5001
792       [   ID]  Interval         Transfer      Bandwidth       Write/Err   PPS
793       frames:tx/missed/slips
794       [  3] 0.00-1.00 sec  12.0 MBytes   101 Mbits/sec  8615/0      8493  pps
795       62/0/0
796       [   3]  1.00-2.00 sec  12.0 MBytes   100 Mbits/sec  8556/0     8557 pps
797       60/0/0
798       [  3] 2.00-3.00 sec  12.0 MBytes   101 Mbits/sec  8586/0      8586  pps
799       60/0/0
800       [   3]  3.00-4.00 sec  12.1 MBytes   102 Mbits/sec  8687/0     8687 pps
801       60/0/0
802       [  3] 4.00-5.00 sec  11.8 MBytes  99.2 Mbits/sec  8468/0      8468  pps
803       60/0/0
804       [   3]  5.00-6.00 sec  11.9 MBytes  99.8 Mbits/sec  8519/0     8520 pps
805       60/0/0
806       [  3] 6.00-7.00 sec  12.1 MBytes   102 Mbits/sec  8694/0      8694  pps
807       60/0/0
808       [   3]  7.00-8.00 sec  12.1 MBytes   102 Mbits/sec  8692/0     8692 pps
809       60/0/0
810       [  3] 8.00-9.00 sec  11.9 MBytes   100 Mbits/sec  8537/0      8537  pps
811       60/0/0
812       [   3] 9.00-10.00 sec  11.8 MBytes  99.0 Mbits/sec  8450/0     8450 pps
813       60/0/0
814       [  3] 0.00-10.01 sec   120 MBytes   100 Mbits/sec  85867/0     8574 pps
815       602/0/0
816       [  3] Sent 85867 datagrams
817       [  3] Server Report:
818       [   3] 0.00-9.98 sec   120 MBytes   101 Mbits/sec   0.009 ms  196/85867
819       (0.23%)  0.665/ 0.083/ 1.318/ 0.174 ms 8605 pps  18903.85
820
821       where (per -e,)
822              frames:tx/missed/slips Total number  of  isochronous  frames  or
823              bursts.  Total  number  of  frame  ids not sent. Total number of
824              frame slips
825
826
827       Isochronous UDP tests (server)
828
829       iperf -s -e -u --udp-histogram=100u,2000 --realtime
830       ------------------------------------------------------------
831       Server listening on UDP port 5001 with pid 5175
832       Receiving 1470 byte datagrams
833       UDP buffer size:  208 KByte (default)
834       ------------------------------------------------------------
835       [  3] local 192.168.100.33 port 5001 connected with 192.168.100.76 port
836       42928 isoch (peer 2.0.13-alpha)
837       [ ID] Interval        Transfer     Bandwidth        Jitter   Lost/Total
838       Latency avg/min/max/stdev PPS  NetPwr  Frames/Lost
839       [  3] 0.00-9.98 sec   120 MBytes   101 Mbits/sec   0.010 ms   196/85867
840       (0.23%)  0.665/ 0.083/ 1.318/ 0.284 ms 8585 pps  18903.85  601/1
841       [             3]           0.00-9.98           sec           T8(f)-PDF:
842       bin(w=100us):cnt(85671)=1:2,2:844,3:10034,4:8493,5:8967,6:8733,7:8823,8:9023,9:8901,10:8816,11:7730,12:4563,13:741,14:1
843       (5.00/95.00%=3/12,Outliers=0,obl/obu=0/0)
844       [             3]           0.00-9.98           sec           F8(f)-PDF:
845       bin(w=100us):cnt(598)=15:2,16:1,17:27,18:68,19:125,20:136,21:103,22:83,23:22,24:23,25:5,26:3
846       (5.00/95.00%=17/24,Outliers=0,obl/obu=0/0)
847
848
849       where, Frames/lost  Total  number of frames (or bursts) received. Total
850              number of bursts lost or error-ed
851              T8-PDF(f) Latency histogram for packets
852              F8-PDF(f) Latency histogram for frames
853
854
855

ENVIRONMENT

857       Note:  The environment variable option settings haven't been maintained
858              well.  See the source code if these are of interest.
859

NOTES

861       Numeric  options:  Some  numeric  options support format characters per
862       '<value>c' (e.g. 10M) where the c format  characters  are  k,m,g,K,M,G.
863       Lowercase format characters are 10^3 based and uppercase are 2^n based,
864       e.g. 1k = 1000, 1K = 1024, 1m = 1,000,000 and 1M = 1,048,576
865
866       Rate limiting: The -b option supports read and write rate  limiting  at
867       the application level.  The -b option on the client also supports vari‐
868       able offered loads through the <mean>,<standard deviation> format, e.g.
869       -b  100m,10m.  The  distribution  used  is  log normal. Similar for the
870       isochronous option. The -b on the server rate limits the reads.  Socket
871       based  pacing  is  also supported using the --fq-rate long option. This
872       will work with the --reverse and --full-duplex options as well.
873
874       IP tos: Specifies the type-of-service or DSCP  class  for  connections.
875       Accepted  values  are  af11,  af12, af13, af21, af22, af23, af31, af32,
876       af33, af41, af42, af43, cs0, cs1, cs2, cs3, cs4, cs5, cs6, cs7, ef, le,
877       nqb,  nqb2, ac_be, ac_bk, ac_vi, ac_vo, lowdelay, throughput, reliabil‐
878       ity, a numeric value, or none to use the operating system default.  The
879       ac_xx  values  are the four access categories defined in WMM for Wi-Fi,
880       and they are aliases for DSCP values that will be mapped to the  corre‐
881       sponding  ACs  under the assumption that the device uses the DSCP-to-UP
882       mapping table specified in IETF RFC 8325.
883
884       --trip-times The --trip-times option enables many one way  delay  (OWD)
885       metrics.  Also  note that using --trip-times on a TCP client will cause
886       --tcp-write-prefetch to be set to a small value  if  tcp-write-prefetch
887       hasn't hasn't also been set. This is done to reduce send side bloat la‐
888       tency (which is unrelated to network induced latency.) Set --tcp-write-
889       prefetch to zero to disable this (which will disable TCP_NOTSENT_LOWAT)
890       and will allow for send side bloat.
891
892       Synchronized  clocks:  The  --trip-times  option  indicates  that   the
893       client's  and  server's  clocks are synchronized to a common reference.
894       Network Time Protocol (NTP) or Precision Time Protocol (PTP)  are  com‐
895       monly  used for this. The reference clock(s) error and the synchroniza‐
896       tion protocols will affect the accuracy of any end to end latency  mea‐
897       surements.
898
899       Histograms  and non-parametric statistics: The --histograms option pro‐
900       vides the raw data where nothing is averaged. This is useful  for  non-
901       parametric  distributions,  e.g.  latency. The standard output does use
902       the central limit theorem to  produce  average,  minimum,  maximum  and
903       variation.  This loses information when the underlining distribution is
904       not Gaussian.  Histograms are supported so  this  information  is  made
905       available.
906
907       Histogram  output  interpretation:  Below is an example bounceback his‐
908       togram and how to interpret it
909
910       [  1] 0.00-5.10 sec BB8-PDF:
911       bin(w=100us):cnt(50)=35:1,37:1,39:1,40:3,41:4,42:1,43:1,52:1,57:1,65:1,68:1,69:1,70:1,72:2,74:1,75:5,78:1,79:2,80:4,81:3,82:1,83:1,88:2,90:2,92:1,94:1,117:1,126:1,369:1,1000:1,1922:1,3710:1
912       (5.00/95.00/99.7%=39/1000/3710,Outliers=4,obl/obu=0/0)
913
914       where, [ 1] The traffic thread number
915              0.00-5.10 sec The time interval of the histogram
916              BB8-PDF  BB8  is the histogram name and the PDF indicates a his‐
917              togram raw output
918              bin(w=100us) provides the bin width. The bin width of this  his‐
919              togram is 100 microseconds
920              cnt(50)  provides  the total number of samples in the histogram.
921              There are 50 samples in this histogram
922              35:1 provides the bin no then the number of samples in that bin.
923              Bin 35 with bin width 100us is 3.4 ms - 3.5 ms and there was one
924              sample that landed there
925              5.00/95.00/99.7%=39/1000/3710 provides the bin confidence inter‐
926              vals  (per  the integrated cumulative distribution function.) 5%
927              landed in 3.9 ms or better (recall bin number multiplies by  bin
928              width.)  95%  landed in 10 ms or better. 99.7% or 3 standards of
929              deviation landed in 37.1 ms or better
930              Outliers=4 provides the outlier count, similar to 3IQR (3  times
931              the inter quartile range) but uses 10% and 90% for inner & outer
932              fence post, then 3 times that for outlier detection.
933              obl/obu=0/0 out of bounds lower and out of bands upper, provides
934              the number of samples that could not be binned because the value
935              landed outside of all possible bins
936
937
938       Binding is done at the logical level of port and ip address  (or  layer
939       3)  using  the  -B option and a colon as the separator between port and
940       the ip addr. Binding at the device (or layer 2) level requires the per‐
941       cent (%) as the delimiter (for both the client and the server.)  An ex‐
942       ample for src port and ip address is -B 192.168.1.1:6001. To  bind  the
943       src port only and let the operating system choose the source ip address
944       use 0.0.0.0, e.g.  -B 0.0.0.0:6001. On the client, the  -B  option  af‐
945       fects  the  bind(2) system call, and will set the source ip address and
946       the source port, e.g. iperf -c <host> -B 192.168.100.2:6002. This  con‐
947       trols the packet's source values but not routing.  These can be confus‐
948       ing in that a route or device lookup may not be that of the device with
949       the  configured  source IP.  So, for example, if the IP address of eth0
950       is used for -B and the routing table for the destination IP address re‐
951       solves  the  output  interface  to be eth1, then the host will send the
952       packet out device eth1 while using the source IP address of eth0 in the
953       packet.   To affect the physical output interface (e.g. dual homed sys‐
954       tems) either use -c <host>%<dev> (requires root)  which  bypasses  this
955       host route table lookup, or configure policy routing per each -B source
956       address and set  the  output  interface  appropriately  in  the  policy
957       routes.  On  the  server or receive, only packets destined to -B IP ad‐
958       dress will be received. It's also useful for  multicast.  For  example,
959       iperf  -s  -B 224.0.0.1%eth0 will only accept ip multicast packets with
960       dest ip 224.0.0.1 that are received on the eth0 interface, while  iperf
961       -s  -B  224.0.0.1 will receive those packets on any interface, Finally,
962       the  device  specifier  is  required  for  v6   link-local,   e.g.   -c
963       [v6addr]%<dev> -V, to select the output interface.
964
965       Reverse,  full-duplex,  dualtest  (-d) and tradeoff (-r): The --reverse
966       (-R) and --full-duplex options can be confusing when  compared  to  the
967       older options of --dualtest (-d) and --tradeoff (-r). The newer options
968       of --reverse and --full-duplex only open one socket and read and  write
969       to the same socket descriptor, i.e. use the socket in full duplex mode.
970       The older -d and -r open second sockets in the opposite  direction  and
971       do  not use a socket in full duplex mode. Note that full duplex applies
972       to the socket and not to the network devices and that full duplex sock‐
973       ets  are supported by the operating systems regardless if an underlying
974       network supports full duplex transmission  and  reception.   It's  sug‐
975       gested  to use --reverse if you want to test through a NAT firewall (or
976       -R on non-windows systems). This applies role reversal of the test  af‐
977       ter  opening  the  full duplex socket.  (Note: Firewall piercing may be
978       required to use -d and -r if a NAT gateway is in the path.)
979
980       Also, the --reverse -b <rate> setting behaves differently for  TCP  and
981       UDP.  For  TCP  it will rate limit the read side, i.e. the iperf client
982       (role reversed to act as a server) reading from the full duplex socket.
983       This  will  in  turn  flow control the reverse traffic per standard TCP
984       congestion control. The --reverse -b <rate> will be applied on transmit
985       (i.e.  the server role reversed to act as a client) for UDP since there
986       is no flow control with UDP. There is no option to directly rate  limit
987       the writes with TCP testing when using --reverse.
988
989       Bounceback  The  bounceback  test allows one to measure network respon‐
990       siveness (which, in this test, is an inverse of  latency.)   The  units
991       are  responses  per  second or rps. Latency is merely delay in units of
992       time. Latency metrics require one to know the  delay  of  what's  being
993       measured.  For bounceback it's a client write to a server read followed
994       by a server write and then the  client  read.  The  original  write  is
995       bounce backed. Iperf 2 sets up the socket with TCP_NODELAY and possibly
996       TCP_QUICKACK (unless disabled). The client sends a small  write  (which
997       defaults  to  100 bytes unless -l is set) and issues a read waiting for
998       the "bounceback" from the server. The server waits for a read and  then
999       optionally  delays  before sending the payload back. This repeats until
1000       the traffic ends. Results are shown in units of rps and time delays.
1001
1002       The TCP_QUICKACK socket option will be enabled during bounceback  tests
1003       when  the bounceback-hold is set to a non-zero value. The socket option
1004       is applied after every read() on the server and before the  hold  delay
1005       call.  It's also applied on the client. Use --bounceback-no-quickack to
1006       have TCP run in default mode per  the  socket  (which  is  most  likely
1007       TCP_QUICKACK being off.)
1008
1009       TCP Connect times: The TCP connect time (or three way handshake) can be
1010       seen on the iperf client when the -e (--enhanced) option is  set.  Look
1011       for  the  ct=<value>  in  the  connected  message,  e.g.in  '[ 3] local
1012       192.168.1.4 port 48736 connected with 192.168.1.1  port  5001  (ct=1.84
1013       ms)' shows the 3WHS took 1.84 milliseconds.
1014
1015       Port-range  Port  ranges  are supported using the hyphen notation, e.g.
1016       6001-6009. This will cause multiple threads, one per  port,  on  either
1017       the listener/server or the client. The user needs to take care that the
1018       ports in the port range are available and not already in  use  per  the
1019       operating  system.  The -P is supported on the client and will apply to
1020       each destination port within the port range.  Finally, this can be used
1021       for a workaround for Windows UDP and -P > 1 as Windows doesn't dispatch
1022       UDP per a server's connect and the quintuple.
1023
1024       Packet per second (pps) calculation The packets per second  calculation
1025       is  done  as  a derivative, i.e. number of packets divided by time. The
1026       time is taken from the previous last packet to the current last packet.
1027       It is not the sample interval time. The last packet can land at differ‐
1028       ent times within an interval.  This means that pps  does  not  have  to
1029       match rx bytes divided by the sample interval.  Also, with --trip-times
1030       set, the packet time on receive is set by the sender's  write  time  so
1031       pps indicates the end to end pps with --trip-times. The RX pps calcula‐
1032       tion is receive side only when -e is set and --trip-times is not set.
1033
1034       Little's Law in queuing theory is a theorem that determines the average
1035       number of items (L) in a stationary queuing system based on the average
1036       waiting time (W) of an item within a system and the average  number  of
1037       items arriving at the system per unit of time (lambda). Mathematically,
1038       it's L = lambda * W. As used here, the units  are  bytes.  The  arrival
1039       rate is taken from the writes.
1040
1041       Network  power: The network power (NetPwr) metric is experimental. It's
1042       a convenience function defined as throughput/delay.  For TCP transmits,
1043       the delay is the sampled RTT times.  For TCP receives, the delay is the
1044       write to read latency.  For UDP  the  delay  is  the  end/end  latency.
1045       Don't  confuse  this  with  the  physics definition of power (delta en‐
1046       ergy/delta time) but more of a measure of a desirable property  divided
1047       by  an  undesirable  property. Also note, one must use -i interval with
1048       TCP to get this as that's what sets the RTT sampling rate.  The  metric
1049       is scaled to assist with human readability.
1050
1051       Multicast:  Iperf 2 supports multicast with a couple of caveats. First,
1052       multicast streams cannot take advantage of the -P  option.  The  server
1053       will serialize multicast streams. Also, it's highly encouraged to use a
1054       -t on a server that will be used for multicast clients. That is because
1055       the  single  end  of  traffic packet sent from client to server may get
1056       lost and there are no redundant end of traffic packets.  Setting -t  on
1057       the  server will kill the server thread in the event this packet is in‐
1058       deed lost.
1059
1060       TCP_QUICKACK: The TCP_QUICKACK socket option will be applied after  ev‐
1061       ery  read()  on  the  server  such  that TCP acks are sent immediately,
1062       rather than possibly delayed.
1063
1064       Fast Sampling: Use ./configure --enable-fastsampling and  then  compile
1065       from  source  to  enable four digit (e.g. 1.0000) precision in reports'
1066       timestamps. Useful for sub-millisecond sampling.
1067

DIAGNOSTICS

1069       Use ./configure --enable-thread-debug and then compile from  source  to
1070       enable both asserts and advanced debugging of the tool itself.
1071

BUGS

1073       See https://sourceforge.net/p/iperf2/tickets/
1074

AUTHORS

1076       Iperf2,  based  from  iperf  (originally written by Mark Gates and Alex
1077       Warshavsky), has a goal of maintenance with some  feature  enhancement.
1078       Other contributions from Ajay Tirumala, Jim Ferguson, Jon Dugan <jdugan
1079       at x1024 dot net>, Feng Qin, Kevin Gibbs, John Estabrook  <jestabro  at
1080       ncsa.uiuc.edu>,  Andrew  Gallatin <gallatin at gmail.com>, Stephen Hem‐
1081       minger <shemminger at linux-foundation.org>, Tim Auckland <tim.auckland
1082       at gmail.com>, Robert J. McMahon <rjmcmahon at rjmcmahon.com>
1083

SEE ALSO

1085       accept(2),bind(2),close(2),connect(2),fcntl(2),getpeername(2),getsock‐
1086       name(2),getsockopt(2),listen(2),read(2),recv(2),select(2),send(2),set‐
1087       sockopt(2),shutdown(2),write(2),ip(7),socket(7),tcp(7),udp(7)
1088
1089       Source code at http://sourceforge.net/projects/iperf2/
1090
1091       "Unix  Network  Programming,  Volume 1: The Sockets Networking API (3rd
1092       Edition) 3rd Edition" by W. Richard Stevens (Author), Bill Fenner  (Au‐
1093       thor), Andrew M. Rudoff (Author)
1094
1095
1096
1097NLANR/DAST                       February 2023                        IPERF(1)
Impressum