1IPERF(1) User Manuals IPERF(1)
2
3
4
6 iperf - perform network traffic tests using network sockets. Metrics
7 include throughput and latency or link capacity and responsiveness.
8
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
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
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
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
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
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
857 Note: The environment variable option settings haven't been maintained
858 well. See the source code if these are of interest.
859
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
1069 Use ./configure --enable-thread-debug and then compile from source to
1070 enable both asserts and advanced debugging of the tool itself.
1071
1073 See https://sourceforge.net/p/iperf2/tickets/
1074
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
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)