iPerf 3:网络性能测试工具使用指南
2023-02-21 09:29 guesters 阅读(11949) 评论(0) 收藏 举报iPerf 3:网络性能测试工具使用指南
1、iPerf 3简介
iPerf 是一个网络性能测试工具。iPerf可以测试最大TCP和UDP带宽性能,具有多种参数和UDP特性,可以根据需要调整,可以报告带宽、延迟抖动和数据包丢失。
iPerf 3 是一种用于主动测量 IP 网络上最大可达到带宽的工具。 它支持调整与时序、缓冲区和协议相关的各种参数(TCP、UDP、SCTP 与 IPv4 和 IPv6)。 对于每个测试,它都会报告带宽、损耗和其他参数。
它不与原始 iPerf 共享任何代码,并且也不向后兼容。
它是在三条款的BSD许可证下发布的。
2、iPerf 3安装
1)windows安装
官网直接下载安装包,下载完成后解压,在DOS命令符下,运行 → cmd终端界面,cd到解压路径,dir可以找到iPerf3.exe程序即可正常使用。
iperf3 -h 是查看帮助命令。如果显示出使用帮助,表示安装成功。
2)linux安装
yum install -y iperf3 或者 官网下载离线安装包
3)Android/iPhone/iPad移动设备
官网下载 或者 App Store应用商店下载安装
3、iPerf 3 用户文档
命令参数如下
|
一般选项 |
|
|
命令行选项 |
描述 |
|
-p, --port n |
服务器要侦听和客户端连接的服务器端口 自。这在客户端和服务器中应该相同。默认值为 5201。 |
|
--cport n |
用于指定客户端端口的选项。(iPerf 3.1 中的新功能) |
|
-f, --format [kmKM] |
指定用于打印带宽数字的格式的字母。 支持的格式是 自适应格式根据需要在千和兆之间进行选择。 'k' = Kbits/sec 'K' = KBytes/sec 'm' = Mbits/sec 'M' = MBytes/sec |
|
-i, --interval n |
设置周期带宽、抖动、 和损失报告。如果非零值,则自上次报告以来每隔几秒的带宽进行一次报告。如果为零,则无周期性 打印报告。默认值为零。 |
|
-F, --file name |
客户端:从文件中读取并写入网络,而不是使用随机数据; |
|
-A,--affinity n/n,m-F |
如果可能的话,设置 CPU 关联(仅限 Linux 和 FreeBSD)。在客户端和服务器上,您可以通过以下方式设置本地相关性 使用此参数的 n 形式(其中 n 是 CPU 编号)。此外,在客户端,您可以覆盖服务器的 仅对那一个测试的亲和力,使用 n,m 形式的参数。请注意,使用此功能时,进程只会绑定 到单个 CPU(与包含潜在多个 CPU 的集合相反)。 |
|
-B, --bind host |
绑定到主机,这是此计算机的地址之一。对于客户 这将设置出站接口。对于服务器,这将设置传入 接口。这仅在具有多个多宿主主机上有用 网络接口。 |
|
-V, --verbose |
提供更详细的输出 |
|
-J, --json |
JSON格式的输出 |
|
--logfile file |
将输出发送到日志文件。(iPerf 3.1 中的新功能) |
|
-d, --debug |
发出调试输出。主要(也许完全)用于开发人员。 |
|
-v, --version |
显示版本信息并退出。 |
|
-h, --help |
显示帮助概要并退出。 |
|
服务器特定选项 |
|
|
命令行选项 |
描述 |
|
-s,--server |
在服务器模式下运行 iPerf。(这将一次只允许一个 iPerf 连接) |
|
-D,--daemon |
在后台将服务器作为守护程序运行。 |
|
-I,--pidfilefile |
使用进程 ID 编写文件,这在作为守护程序运行时最有用。(iPerf 3.1 中的新功能) |
|
客户端特定选项 |
|
|
命令行选项 |
描述 |
|
-c, --client host |
在客户端模式下运行 iPerf,连接到主机上运行的 iPerf 服务器。 |
|
--sctp |
使用SCTP而不是TCP(Linux,FreeBSD和Solaris)。(iPerf 3.1 中的新功能) |
|
-u, --udp |
使用 UDP 而不是 TCP。另请参见 -b 选项。 |
|
-b, --bandwidth n[KM] |
将目标带宽设置为 n 位/秒(UDP 默认为 1 Mbit/秒,TCP 默认为无限制)。如果有多个流(-P 标志), 带宽限制单独应用于每个流。您还可以在带宽说明符中添加“/”和数字。 这称为“突发模式”。它将在不暂停的情况下发送给定数量的数据包,即使暂时超过指定的带宽限制也是如此。 |
|
-t, --time n |
要传输的时间(以秒为单位)。iPerf 通常通过重复发送一个 len 字节数组来工作,以获得时间秒。 默认值为 10 秒。另请参见 -l、-k 和 -n 选项。 |
|
-n, --num n[KM] |
要传输的缓冲区数。通常,iPerf 发送 10 秒。-n 选项会覆盖它并发送一个 len 字节数组的次数,无论这需要多长时间。另请参见 -l、-k 和 -t 选项。 |
|
-k, --blockcount n[KM] |
|
|
-l, --length n[KM] |
要读取或写入的缓冲区的长度。iPerf 通过编写 len 字节数组多次。TCP 的默认值为 128 KB,UDP 的默认值为 8 KB。 另请参见 -n、-k 和 -t 选项。 |
|
-P, --parallel n |
要与服务器同时建立的连接数。默认值为 1。 |
|
-R, --reverse |
以反向模式运行(服务器发送,客户端接收)。 |
|
-w, --window n[KM] |
将套接字缓冲区大小设置为指定值。对于 TCP,这 设置 TCP 窗口大小。(这被发送到服务器并在该侧使用) |
|
-M, --set-mss n |
尝试设置 TCP 最大段大小 (MSS)。MSS 通常是 MTU - 40 字节用于 TCP/IP 标头。 对于以太网,MSS 为 1460 字节(1500 字节 MTU)。 |
|
-N, --no-delay |
设置 TCP 无延迟选项,禁用 Nagle 算法。 通常,这只对 telnet 等交互式应用程序禁用。 |
|
-4, --version4 |
仅使用 IPv4。 |
|
-6, --version4 |
仅使用 IPv6。 |
|
-S, --tos n |
传出数据包的服务类型。(许多路由器忽略 TOS 字段。您可以在十六进制中指定带有“0x”前缀的值,在八进制中指定值 前缀为“0”,或十进制。样例如,“0x10”十六进制 = “020” 八进制 = “16” 十进制。RFC 1349 中指定的 TOS 编号为: IPTOS_LOWDELAY minimize delay 0x10 IPTOS_THROUGHPUT maximize throughput 0x08 IPTOS_RELIABILITY maximize reliability 0x04 IPTOS_LOWCOST minimize cost 0x02 |
|
-L, --flowlabel n |
设置 IPv6 流标签(目前仅在 Linux 上受支持)。 |
|
-Z, --zerocopy |
使用“零拷贝”方法来发送数据,样例如 sendfile(2),而不是通常的 write(2)。这使用更少的 CPU。 |
|
-o, --omit n |
省略测试的前 n 秒,以跳过 TCP TCP 慢启动周期。 |
|
-T, --title str |
在每个输出行前面加上此字符串的前缀。 |
|
-C, --linux-congestion algo |
设置拥塞控制算法(Linux 仅适用于 iPerf 3.0,Linux 和 FreeBSD 仅适用于 iPerf 3.1)。 |
另请参阅 https://github.com/esnet/iPerf
4、使用样例
网络拓扑图
根据测试需求,Server端可以部署在外部,Client端部署在内部。测试A、B两地之间的网络性能参数。
Windows下载软件后不要直接运行iperf.exe,把它放入C盘根目录,用CMD调用,在DOS命令行下运行它。
1)、运行iPerf3在服务器端,默认端口号为5201
样例:iperf3 -s
如果需要指定的端口号加上-p port
样例:iperf3 -s -p 8888
注意操作系统的防火墙放通此程序和端口
2)、运行iPerf3在客户端,开始带宽测试命令
iPerf3 -c服务器的IP地址
样例:iperf3 -c 1.1.1.1
结果参考如下,A、B两地之间的带宽是23.8Mb/s
C:\Users>iperf3 -c 1.1.1.1
Connecting to host 1.1.1.1, port 5201
[ 4] local 1.1.1.3 port 62505 connected to 1.1.1.1 port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.01 sec 2.88 MBytes 23.9 Mbits/sec
[ 4] 1.01-2.01 sec 1.25 MBytes 10.5 Mbits/sec
[ 4] 2.01-3.00 sec 3.62 MBytes 30.6 Mbits/sec
[ 4] 3.00-4.00 sec 3.88 MBytes 32.5 Mbits/sec
[ 4] 4.00-5.01 sec 3.38 MBytes 28.1 Mbits/sec
[ 4] 5.01-6.02 sec 2.75 MBytes 22.8 Mbits/sec
[ 4] 6.02-7.01 sec 2.75 MBytes 23.4 Mbits/sec
[ 4] 7.01-8.01 sec 2.75 MBytes 23.1 Mbits/sec
[ 4] 8.01-9.01 sec 2.75 MBytes 23.0 Mbits/sec
[ 4] 9.01-10.01 sec 2.38 MBytes 19.9 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-10.01 sec 28.4 MBytes 23.8 Mbits/sec sender
[ 4] 0.00-10.01 sec 28.3 MBytes 23.8 Mbits/sec receiver
iPerf3 -c服务器的IP地址和端口号5201
样例:iperf3 -c 1.1.1.1 -p 5201
运行iPerf3在客户端,反向测试(服务器端发送数据到客户端,测试下行带宽)
iPerf3 -c ServerIP -R
样例:iperf3 -c 1.1.1.1 -R
结果参考如下, A、B两地之间的带宽是80.5Mb/s
C:\Users>iperf3 -c 1.1.1.1 -R
Connecting to host 1.1.1.1, port 5201
Reverse mode, remote host 1.1.1.1 is sending
[ 4] local 1.1.1.3 port 62791 connected to 1.1.1.1 port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 10.3 MBytes 85.9 Mbits/sec
[ 4] 1.00-2.00 sec 11.1 MBytes 93.1 Mbits/sec
[ 4] 2.00-3.00 sec 9.95 MBytes 83.9 Mbits/sec
[ 4] 3.00-4.00 sec 7.50 MBytes 62.8 Mbits/sec
[ 4] 4.00-5.00 sec 7.62 MBytes 64.0 Mbits/sec
[ 4] 5.00-6.00 sec 9.42 MBytes 78.7 Mbits/sec
[ 4] 6.00-7.00 sec 11.7 MBytes 98.8 Mbits/sec
[ 4] 7.00-8.00 sec 10.5 MBytes 87.5 Mbits/sec
[ 4] 8.00-9.00 sec 8.32 MBytes 69.9 Mbits/sec
[ 4] 9.00-10.00 sec 9.50 MBytes 79.6 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-10.00 sec 96.0 MBytes 80.5 Mbits/sec sender
[ 4] 0.00-10.00 sec 96.0 MBytes 80.5 Mbits/sec receiver
运行iPerf3在客户端,设置测试传输的时间为60秒,同时建立的连接数为6个
样例:iperf3 -c 1.1.1.1 -t 60 -P 6
结果参考如下,A、B两地之间的带宽是24.2Mb/s
C:\Users>iperf3 -c 1.1.1.1 -t 60 -P 6
Connecting to host 1.1.1.1, port 5201
[ 4] local 1.1.1.3 port 62863 connected to 1.1.1.1 port 5201
[ 6] local 1.1.1.3 port 62864 connected to 1.1.1.1 port 5201
[ 8] local 1.1.1.3 port 62865 connected to 1.1.1.1 port 5201
[ 10] local 1.1.1.3 port 62866 connected to 1.1.1.1 port 5201
[ 12] local 1.1.1.3 port 62867 connected to 1.1.1.1 port 5201
[ 14] local 1.1.1.3 port 62868 connected to 1.1.1.1 port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.02 sec 1.00 MBytes 8.26 Mbits/sec
[ 6] 0.00-1.02 sec 896 KBytes 7.23 Mbits/sec
[ 8] 0.00-1.02 sec 1.12 MBytes 9.29 Mbits/sec
[ 10] 0.00-1.02 sec 768 KBytes 6.19 Mbits/sec
[ 12] 0.00-1.02 sec 1.00 MBytes 8.26 Mbits/sec
[ 14] 0.00-1.02 sec 768 KBytes 6.19 Mbits/sec
[SUM] 0.00-1.02 sec 5.50 MBytes 45.4 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-60.00 sec 31.5 MBytes 4.40 Mbits/sec sender
[ 4] 0.00-60.00 sec 31.5 MBytes 4.40 Mbits/sec receiver
[ 6] 0.00-60.00 sec 23.5 MBytes 3.29 Mbits/sec sender
[ 6] 0.00-60.00 sec 23.4 MBytes 3.27 Mbits/sec receiver
[ 8] 0.00-60.00 sec 28.0 MBytes 3.91 Mbits/sec sender
[ 8] 0.00-60.00 sec 27.8 MBytes 3.89 Mbits/sec receiver
[ 10] 0.00-60.00 sec 30.9 MBytes 4.32 Mbits/sec sender
[ 10] 0.00-60.00 sec 30.9 MBytes 4.32 Mbits/sec receiver
[ 12] 0.00-60.00 sec 29.9 MBytes 4.18 Mbits/sec sender
[ 12] 0.00-60.00 sec 29.8 MBytes 4.17 Mbits/sec receiver
[ 14] 0.00-60.00 sec 29.4 MBytes 4.11 Mbits/sec sender
[ 14] 0.00-60.00 sec 29.4 MBytes 4.11 Mbits/sec receiver
[SUM] 0.00-60.00 sec 173 MBytes 24.2 Mbits/sec sender
[SUM] 0.00-60.00 sec 173 MBytes 24.2 Mbits/sec receiver
关于参数 -P,指定客户端与服务端之间使用的线程数。默认是1个线程,需要客户端与服务器端同时使用此参数。数值的大小主要参考CPU的性能,通过使用多线程,可以在一定程度上增加网络的吞吐量。
使用多线程后,测试丢包率会下降。如果我们小区就只有一个大门,10个住户进大门就需要排队,但是小区如果开了10个大门,10个住户进大门就不用排队。
运行iPerf3在客户端,使用UDP协议,并设置使用的测试带宽为10M,测试时间为60秒
iperf3 -c ServerIP -u -b 10M -t 60 -d
-c 为客户端运行并要指定服务端的IP地址
-p 指定端口号
-u 使用 UDP 而不是 TCP。
-b 表示使用的测试带宽
-t 表示以时间为测试结束条件进行测试,默认为 10 秒;
-d 打印出更详细的debug调试信息
样例:iperf3 -c 1.1.1.1 -p 5201 -u -b 10M -t 60
结果参考如下
C:\Users>iperf3 -c 1.1.1.1 -u -b 10M -t 60
Connecting to host 1.1.1.1, port 5201
[ 4] local 1.1.1.3 port 56536 connected to 1.1.1.1 port 5201
[ ID] Interval Transfer Bandwidth Total Datagrams
[ 4] 57.00-58.01 sec 1.20 MBytes 9.96 Mbits/sec 153
[ 4] 58.01-59.00 sec 1.18 MBytes 9.96 Mbits/sec 151
[ 4] 59.00-60.01 sec 1.21 MBytes 10.1 Mbits/sec 155
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 4] 0.00-60.01 sec 71.4 MBytes 9.99 Mbits/sec 4.223 ms 0/9144 (0%)
[ 4] Sent 9144 datagrams
传输1G的数据包的测试命令
iperf3 -c 1.1.1.1 -n 1G
[ 4] 153.01-156.01 sec 14.0 MBytes 39.1 Mbits/sec
[ 4] 156.01-159.00 sec 15.6 MBytes 43.8 Mbits/sec
[ 4] 159.00-159.84 sec 5.38 MBytes 54.0 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-159.84 sec 1.00 GBytes 53.7 Mbits/sec sender
[ 4] 0.00-159.84 sec 1024 MBytes 53.7 Mbits/sec receiver
请关注 SUM 行,其中 sender 表示发送数据量,receiver 表示接受数据量。
Interval:程序的测试运行时间
Transfer:传输的数据总量
Bandwidth:测试出的带宽
Jitter:网路抖动
Lost/Total Datagrams:丢包数/总数据包数(丢包率)
终止或者退出测试,快捷键Ctrl + c
5、高级操作参考
1)Tuning a TCP connection
iPerf的主要目标是帮助调整特定路径上的TCP连接。
TCP最基本的调整问题是TCP窗口大小,它控制网络中任何一点的数据量。
如果它太小,发送器有时会闲置,性能会很差。TCP窗口大小的理论值是带宽延迟的乘积
2)TCP测试的主要功能:
可以测试网络带宽。
可以支持多线程,当P线程或Win32线程可用时,在客户端与服务端支持多重连接。
可以报告MSS/MTU值的大小。
可以支持TCP窗口值自定义并可通过套接字缓冲。
C:\Users>iperf3 -c 1.1.1.1 -w 1M
Connecting to host 1.1.1.1, port 5201
[ 4] local 1.1.1.3 port 63612 connected to 1.1.1.1 port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 2.50 MBytes 20.9 Mbits/sec
[ 4] 1.00-2.01 sec 3.62 MBytes 30.1 Mbits/sec
[ 4] 2.01-3.01 sec 3.00 MBytes 25.3 Mbits/sec
[ 4] 3.01-4.01 sec 3.62 MBytes 30.3 Mbits/sec
[ 4] 4.01-5.01 sec 3.88 MBytes 32.5 Mbits/sec
[ 4] 5.01-6.00 sec 4.75 MBytes 40.2 Mbits/sec
[ 4] 6.00-7.02 sec 3.75 MBytes 30.8 Mbits/sec
[ 4] 7.02-8.00 sec 4.00 MBytes 34.2 Mbits/sec
[ 4] 8.00-9.01 sec 4.00 MBytes 33.4 Mbits/sec
[ 4] 9.01-10.01 sec 4.12 MBytes 34.7 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-10.01 sec 37.2 MBytes 31.2 Mbits/sec sender
[ 4] 0.00-10.01 sec 36.7 MBytes 30.8 Mbits/sec receiver
2)Tuning a UDP connection
iPerf创建恒定比特率UDP流。这是一种非常人工的流,类似于语音通信,但没有太多其他内容。您需要将数据报大小(-l)调整为应用程序使用的大小。
服务器通过数据报中的ID号检测UDP数据报丢失。通常一个UDP数据报变成几个IP数据包。丢失单个IP数据包将丢失整个数据报。
要测量数据包丢失而不是数据报丢失,请使用-l选项使数据报足够小以适合单个数据包。默认大小1470字节适用于以太网。
由于TCP不会向用户报告丢失,我发现UDP测试有助于查看路径上的数据包丢失。
2)UDP测试的主要功能:
UDP协议是一个非面向连接的轻量级传输协议,并且不提供可靠的数据传输服务,因此对UDP应用的关注点不是传输数据有多快,而是它的丢包率和延时指标。
可以设置指定带宽的UDP数据流
可以测试网络丢包数
可以测试网络延时、抖动值
可以支持多播测试
可以支持多线程,当P线程或Win32线程可用时,在客户端与服务端支持多重连接。
C:\Users>iperf3 -c 1.1.1.1 -u -b 100M -l 32K -w 128k
Connecting to host 1.1.1.1, port 5201
[ 4] local 1.1.1.3 port 55389 connected to 1.1.1.1 port 5201
[ ID] Interval Transfer Bandwidth Total Datagrams
[ 4] 0.00-1.04 sec 3.34 MBytes 27.1 Mbits/sec 107
[ 4] 1.04-2.01 sec 3.06 MBytes 26.5 Mbits/sec 98
[ 4] 2.01-3.00 sec 2.47 MBytes 20.8 Mbits/sec 79
[ 4] 3.00-4.00 sec 3.03 MBytes 25.4 Mbits/sec 97
[ 4] 4.00-5.00 sec 3.12 MBytes 26.2 Mbits/sec 100
[ 4] 5.00-6.00 sec 3.09 MBytes 25.9 Mbits/sec 99
[ 4] 6.00-7.01 sec 3.22 MBytes 26.8 Mbits/sec 103
[ 4] 7.01-8.00 sec 3.66 MBytes 31.0 Mbits/sec 117
[ 4] 8.00-9.02 sec 3.88 MBytes 31.8 Mbits/sec 124
[ 4] 9.02-10.00 sec 2.75 MBytes 23.6 Mbits/sec 88
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 4] 0.00-10.00 sec 31.6 MBytes 26.5 Mbits/sec 9.262 ms 0/1010 (0%)
[ 4] Sent 1010 datagrams
Iperf 还有一个图形界面程序叫做Jperf的Windwows GUI版本
6、常见问题
iPerf3是一个基于Server - Client模式的网络测试工具,推荐使用两台相同配置的服务器进行测试,避免性能测试结果出现偏差。其中一台作为服务器端机,另一台作为客户端机。
1)UDP性能:在ESnet 100G测试台上,iPerf3在高UDP速率(高于10Gbps)时发现了一些问题。症状是,在任何特定的 iPerf3 运行中,无论客户端使用什么“-b”选项,接收器报告的损失率约为 20%。此问题似乎不是特定于 iPerf3 的,可能是由于 iPerf3 进程在 CPU 上的位置及其与入站 NIC 的关系。在某些情况下,可以通过适当使用 CPU 关联 (“-A”) 选项来缓解此问题。
2)高损耗网络的间隔报告:按照 iPerf3 当前实现的方式,发送方写入命令将阻塞,直到写入整个块。这意味着,如果网络具有高损耗,则发送完整块可能需要几秒钟,并且间隔报告的间隔时间将有很大差异。正在讨论解决方案,但与此同时,解决方法是尝试使用较小的块大小,样例如“-l 4K”。
3)“-Z”标志有时会导致 iPerf3 客户端在 OSX 上挂起。在 Linux 上使用“-w”标志指定 TCP 缓冲区大小时,Linux 内核会自动将传入的值加倍以补偿开销。
4)发包测试需要分为UDP测试与TCP测试,其中服务端可用-u命令去区分监听协议。
5)TCP协议测试不能计算出时延、丢包率,不能指定发送的带宽。
6)重复测试几次,就能得出稳定的实际带宽。因为在网络上发生的实际业务不同(忙时闲时),每个时刻测试得到的网络性能参数也都不相同。
7)其它问题,也可以参考相关软件Mikrotik Bandwidth Test和NetIQ Chariot
版权声明,文档参考网络整理,原文链接网站
https://iPerf.fr/
http://software.es.net/iPerf/
https://github.com/esnet/iPerf
https://baike.baidu.com/item/iperf/
浙公网安备 33010602011771号