iPerf 3:网络性能测试工具使用指南
1、iPerf 3简介 iPerf 是一个网络性能测试工具。iPerf可以测试最大TCP和UDP带宽性能,具有多种参数和UDP特性,可以根据需要调整,可以报告带宽、延迟抖动和数据包丢失。 iPerf 3 是一种用于主动测量 IP 网络上最大可达到带宽的工具。 它支持调整与时序、缓冲区和协议相关的各种参数(TCP、UDP、SCTP 与 IPv4 和 IPv6)。 对于每个测试,它都会报告带宽、损耗和其他参数。 它不与原始 iPerf 共享任何代码,并且也不向后兼容。
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] | 要传输的块(数据包)数。(而不是 -t 或 -n) 另请参见 - t、 -l 和 -n 选项。 | -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 | | -T, --titlestr | 在每个输出行前面加上此字符串的前缀。 | -C, --linux-congestion algo | 设置 拥塞控制算法(Linux 仅适用于 iPerf 3.0,Linux 和 FreeBSD 仅适用于 iPerf 3.1)。 |
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
|