iperf3带宽压测工具使用
- 安装
- 下载地址:[下载入口](https://iperf.fr/iperf-download.php)
- 测试结果:
- 时长测试(压测使用):
- 并行测试
- 反向测试
- UDP 带宽测试
iPerf3 是用于主动测试 IP 网络上最大可用带宽的工具
安装
下载地址:下载入口
windows安装:
linux安装:
install -y iperf3
默认端口号5201
测试:
服务端(linux):iperf3 -s
客户端(windows):移动到iperf3.exe所在位置,执行iperf3 -c 目的IP
进阶:
如果需要指定端口运行,使用 -p 参数带上端口号,在这种情况下客户端也必须指定相同端口:
iperf3 -s -p 8801 # server
iperf3 -c 192.168.200.138 -p 8801 # client
测试结果:
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.09 GBytes 939 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 1.09 GBytes 937 Mbits/sec receiver
Interval
: 程序的运行时间
Transferf
: 传输的数据总量
Bitrate
: 测试出的带宽比特率(在 3.1.3 版本中称之为 Bandwidth)
Retr
: 重新传输的 TCP 数据包
时长测试(压测使用):
默认情况下 iPerf3 只进行 10 秒的测试,如果需要进行长时间的运行可以通过 -t 参数指定测试时长,单位为秒。
iperf3 -c 192.168.200.138 -t 60
-c
客户端运行并指定服务端的 IP 地址
-t
以秒为单位的传输时间(默认 10 秒)
并行测试
可以在客户端设置多个并行数据流进行测试,验证多个数据流同时发送的性能,并计算总带宽。
iperf3 -c 192.168.200.138 -P 3
-P, --parallel
大写的 P,要运行的并行客户端流的数量
测试结果:
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 371 MBytes 311 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 366 MBytes 307 Mbits/sec receiver
[ 7] 0.00-10.00 sec 373 MBytes 313 Mbits/sec 0 sender
[ 7] 0.00-10.00 sec 366 MBytes 307 Mbits/sec receiver
[ 9] 0.00-10.00 sec 373 MBytes 313 Mbits/sec 0 sender
[ 9] 0.00-10.00 sec 366 MBytes 307 Mbits/sec receiver
[SUM] 0.00-10.00 sec 1.09 GBytes 937 Mbits/sec 0 sender
[SUM] 0.00-10.00 sec 1.07 GBytes 922 Mbits/sec receiver
通过 ID 区分不同的客户端流,最后结果在 [SUM] 体现。并行测试时总带宽并不会发生改变,速率与非并行测试的结果一致
反向测试
反向测试可以理解为是在做「下行带宽」测试,由服务端发送数据,客户端接收,测试服务端到客户端的网络带宽与性能。
iperf3 -c 192.168.200.138 -R
-R, --reverse
大写的 R,以反向模式运行(服务器发送,客户端接收)
这个测试有意思的地方在于,上下行的速率并不总是一致的,以我们的服务器与客户端的测试为例:
客户端往服务器发送的速率是 3.17 Gbits/sec
而服务器往客户端发送速率是 1.27 Gbits/sec
速率差异与网络配置有关
UDP 带宽测试
使用 UDP 协议进行测试
iperf3 -c 192.168.200.138 -u
使用 UDP 协议进行测试,同时设置测试带宽,因为 UDP 默认使用 1Mbits/sec,可以根据需要设置测试带宽,比如 1000M,同时使用 -t 参数配置测试时间为 60 秒。
iperf3 -c 192.168.200.138 -u -b 1000M -t 60
测试结果:
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-60.00 sec 6.68 GBytes 956 Mbits/sec 0.000 ms 0/4949773 (0%) sender
[ 5] 0.00-60.00 sec 1.72 GBytes 246 Mbits/sec 0.047 ms 4285962/4946689 (87%) receiver
Interval
: 程序的运行时间
Transferf
: 传输的数据总量
Bitrate
: 测试出的带宽比特率(在 3.1.3 版本中称之为 Bandwidth)
Jitter
: 抖动
Lost/Total Datagrams
: 丢包率
使用大包进行测试时,客户端往服务器发送的速率为 956 Mbits/sec,无延时抖动,无丢包;A客户端数据接收的速率为 246 Mbits/sec,抖动 0.047 ms,丢包 13%。
需要下调测试带宽,比如 200M。
iperf3 -c 192.168.200.138 -u -b 200M -t 60
测试结果:
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-60.00 sec 1.40 GBytes 200 Mbits/sec 0.000 ms 0/1035910 (0%) sender
[ 5] 0.00-60.00 sec 1.40 GBytes 200 Mbits/sec 0.005 ms 0/1035910 (0%) receiver
反向测试,从服务端往客户端发送,同时忽略掉前 10 秒的测试
iperf3 -c 192.168.200.138 -u -b 200M -t 60 -R -O 10
UDP 的测试有点神奇,当完成了上一个的测试之后再开始新的 UDP 测试时,前段部分的数据可信度不高,建议使用 -O 参数忽略掉。
iPerf3 命令说明
用法:
Client 端参数
iperf3 [-s|-c host] [options]
参数 | 说明 | 备注 |
---|---|---|
-p, --port # | 要侦听/连接的服务器端口 | |
-f, --format [kmgtKMGT] | 报告格式:Kbits, Mbits, Gbits, Tbits | |
-i, --interval # | 每次报告的间隔,单位为秒 | |
-F, --file name | 测试所用文件的文件名。如果在 Client 端使用,发送该文件用作测试;如果使用在 Server 端,则是将数据写入该文件 | |
-A, --affinity n/n,m | 设置 CPU 亲和力 | |
-B, --bind | 绑定指定的网卡接口 | |
-V, --verbose | vebose 模式,运行时输出最详细的日志信息 | |
-J, --json | 运行时以 JSON 格式输出结果 | |
–logfile f | 输出到文件 | |
–forceflush | 强制刷新每次间隔的日志信息 | 3.7 版本+ |
-d, --debug | 以 debug 模式输出结果 | |
-v, --version | 显示版本信息并退出 | |
-h, --help | 显示帮助信息并退出 |
Server 端参数
参数 | 说明 | 备注 |
---|---|---|
-s, --server | 以 Server 模式运行 | |
-D, --daemon | 在后台以守护进程运行 | |
-I, --pidfile file | 指定 pid 文件 | |
-1, --one-off | 只接受 1 次来自 Client 端的测试,然后退出 | |
–rsa-private-key-path | 用于解密身份验证凭据的RSA私钥的路径 | 3.7 版本+ |
–authorized-users-path | 包含用户凭据的配置文件的路径 | 3.7 版本+ |
Client 端参数 | ||
-c, --client | 以 Client 模式运行,并指定 Server 端的地址 | |
–sctp | 使用 SCTP 协议进行测试 | 3.7 版本+ |
-X, --xbind 将 SCTP 关联绑定到链接 | 3.7 版本+ | |
–nstreams # | SCTP流的数量 | 3.7 版本+ |
-u, --udp | 以 UDP 协议进行测试 | |
–connect-timeout # | 控制连接设置超时(毫秒) | 3.7 版本+ |
-b, --bitrate #[KMG][/#] | 限制测试带宽。UDP 默认为 1Mbit/秒,TCP 默认无限制 | |
–pacing-timer #[KMG] | 设置起搏时间,单位为微秒(默认值为1000) | 3.7 版本+ |
–fq-rate #[KMG] | 以位/秒为单位启用基于公平排队的套接字调步(仅限Linux) | 3.7 版本+ |
-t, --time # | 以时间为测试结束条件进行测试,默认为 10 秒 | |
-n, --bytes #[KMG] | 以数据传输大小为测试结束条件进行测试(代替-t) | |
-k, --blockcount #[KMG] | 以传输数据包数量为测试结束条件进行测试(代替-n或-t) | |
-l, --length #[KMG] | 读写缓冲区的长度,TCP 默认为 128K;UDP 默认为 8K,在 3.7 版本之后,UDP 默认使用动态分配或 1460 字节。 | |
–cport | 指定 Client 端运行所使用的 TCP 或 UDP 端口,默认为临时端口 | |
-P, --parallel # | 测试数据流并发数量 | |
-R, --reverse | 反向模式运行(Server 端发送,Client 端接收) | |
–bidir | 以双向模式运行。客户端和服务器发送和接收数据。 | 3.7 版本+ |
-w, --window #[KMG] | 设置套接字缓冲区大小,TCP 模式下为窗口大小 | |
-C, --congestion | 设置 TCP 拥塞控制算法(仅支持 Linux 和 FreeBSD ) | |
-M, --set-mss # | 设置 TCP/SCTP 最大分段长度(MSS,MTU - 40 字节) | |
-N, --no-delay | 设置 TCP/SCTP no delay,屏蔽 Nagle 算法 | |
-4, --version4 | 仅使用 IPv4 | |
-6, --version6 | 仅使用 IPv6 | |
-S, --tos N | 设置 IP 服务类型(TOS,Type Of Service),0-255。可以使用八进制和十六进制的常用前缀,即 52,064 和 0x34 都指定相同的值。 | |
–dscp N or --dscp val | 设置 IP dscp 值,0-63 或符号。数值可以用十进制、八进制和十六进制指定(请参阅上面的–tos)。 | 3.7 版本+ |
-L, --flowlabel N | 设置 IPv6 流标签(仅支持 Linux) | |
-Z, --zerocopy | 使用「zero copy」(零拷贝)方法发送数据 | |
-O, --omit N | 忽略前 n 秒的测试 | |
-T, --title str | 设置每行测试结果的前缀 | |
–extra-data str | 要包含在客户端和服务器 JSON 中的数据字符串 | 3.7 版本+ |
–get-server-output | 从 Server 端获取测试结果 | |
–udp-counters-64bit | 在 UDP 测试包中使用 64 位计数器(防止计数器溢出) | |
–repeating-payload | 在有效载荷中使用重复模式,而不是随机化的有效载荷(如iperf2) | 3.7 版本+ |
–username | 身份验证用户名 | 3.7 版本+ |
–rsa-public-key-path | 用于加密身份验证凭据的 RSA 公钥的路径 | 3.7 版本+ |