代码改变世界

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]

要传输的块(数据包)数。(而不是 -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

省略测试的前 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/