6.2. 使用 iperf3 测试 UDP 吞吐量
iperf3 工具提供了服务器和客户端模式,来在两个主机之间执行网络吞吐量测试。
应用程序的吞吐量取决于许多因素,如应用程序使用的缓冲区大小。因此,使用测试工具(如 iperf 3)测量的结果可能与生产工作负载下服务器上应用程序测量的结果有很大不同。
先决条件
-
iperf3软件包已安装在客户端和服务器上。 - 两个主机上没有其他服务导致严重影响测试结果的网络流量。
- 可选:您在服务器和客户端上增加了最大 UDP 套接字大小。详情请查看 增加系统范围的 UDP 套接字缓冲区。
流程
可选:显示服务器和客户端上网络接口控制器(NIC)的最大网络速度:
# ethtool enp1s0 | grep "Speed" Speed: 10000Mb/s在服务器上:
显示最大 UDP 套接字读缓冲区大小,并记录此值:
# sysctl net.core.rmem_max net.core.rmem_max = 16777216显示的值以字节为单位。
在
firewalld服务中临时打开默认的iperf3端口 5201 :# firewall-cmd --add-port=5201/tcp --add-port=5201/udp请注意,
iperf3只在服务器上打开一个 TCP 套接字。如果客户端希望使用 UDP,它首先连接到此 TCP 端口,然后服务器在同一端口号上打开一个 UDP 套接字,以执行 UDP 流量吞吐量测试。因此,您必须在本地防火墙中为 TCP 和 UDP 协议打开端口 5201。在服务器模式下启动
iperf3:# iperf3 --server服务现在等待传入的客户端连接。
在客户端中:
显示客户端将用来连接到服务器的接口的最大传输单元(MTU),并记录此值:
# ip link show enp1s0 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 ...显示最大 UDP 套接字写缓冲区大小,并记录此值:
# sysctl net.core.wmem_max net.core.wmem_max = 16777216显示的值以字节为单位。
开始测量吞吐量:
# iperf3 --udp --time 60 --window 16777216 --length 1472 --bitrate 2G --client 192.0.2.1-
--udp:使用 UDP 协议进行测试。 -
--time <seconds>:定义客户端停止传输时的时间(以秒为单位)。 -
--window <size>:设置 UDP 套接字缓冲区大小。理想情况下,客户端和服务器上的大小都一样。如果不一样,则将此参数设置为较小的值:客户端上的net.core.wmem_max或服务器上的net.core.rmem_max。 -
--length <size>:设置要读和写的缓冲区的长度。将这个选项设置为最大未碎片的有效负载。按如下所示计算理想的值:MTU - IP 标头(20 字节用于 IPv4 ,40 字节用于 IPv6) - 8 字节 UDP 标头。 --bitrate <rate>:将比特率限制为指定的值,单位是比特每秒。您可以指定单位,如2G代表 2 Gbps。将此参数设置为您希望工作的值,并在稍后的测量中增加它。如果客户端以比传输路径上的设备快的速度,或者比服务器可以处理数据包快的速度发送数据包,则数据包可以丢弃。
-
--client <server>:启用客户端模式,并设置运行iperf3服务器的服务器的 IP 地址或名称。
-
等待
iperf3完成测试。服务器和客户端都显示每秒的统计信息,并在结尾显示总结。例如,以下是客户端上显示的总结:[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams [ 5] 0.00-60.00 sec 14.0 GBytes 2.00 Gbits/sec 0.000 ms 0/10190216 (0%) sender [ 5] 0.00-60.04 sec 14.0 GBytes 2.00 Gbits/sec 0.002 ms 0/10190216 (0%) receiver在这个示例中,平均波特率为 2 Gbps,没有数据包丢失。
在服务器上:
-
按 Ctrl+C 停止
iperf3服务器。 关闭
firewalld中的端口 5201 :# firewall-cmd --remove-port=5201/tcp --remove-port=5201/udp
-
按 Ctrl+C 停止