运行 iperf3 测试 VMware ESXi 盒和 TrueNAS Core 盒之间的 100G 连接时,我在 ESXi 盒上看到以下内容:
- 每个间隔都会出现消息“iperf3:getsockopt - 未实现函数”
- 第一个和最后一个间隔报告了大量重传,但摘要统计中没有报告
这两个都可以忽略吗?还是它们表明存在实际问题?
以下是详细信息...
服务器设置:
Supermicro H12SSL-NT, EPYC 7262, 128GB RAM
TrueNAS 13.0 U3
Mellanox ConnectX-5 100G
iperf3 v3.10.1
客户端设置:
Supermicro X9SRE-F, E5-1650 v2, 16GB RAM
ESXi 6.7.0 P08
Mellanox ConnectX-5 100G
iperf3 v3.1.6
服务器命令:
iperf3 -s -B 192.168.25.5 -p 5101
客户端命令和输出:
[root@esxi:/usr/lib/vmware/vsan/bin] ./iperf3.copy -B 192.168.25.6 -c 192.168.25.5 -i 1 -p 5101 -f g -t 10
Connecting to host 192.168.25.5, port 5101
[ 4] local 192.168.25.6 port 27617 connected to 192.168.25.5 port 5101
iperf3: getsockopt - Function not implemented
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 3.08 GBytes 26.4 Gbits/sec 8638800 0.00 Bytes
iperf3: getsockopt - Function not implemented
[ 4] 1.00-2.00 sec 3.03 GBytes 26.0 Gbits/sec 0 0.00 Bytes
iperf3: getsockopt - Function not implemented
[ 4] 2.00-3.00 sec 3.11 GBytes 26.7 Gbits/sec 0 0.00 Bytes
iperf3: getsockopt - Function not implemented
[ 4] 3.00-4.00 sec 2.91 GBytes 25.0 Gbits/sec 0 0.00 Bytes
iperf3: getsockopt - Function not implemented
[ 4] 4.00-5.00 sec 3.01 GBytes 25.9 Gbits/sec 0 0.00 Bytes
iperf3: getsockopt - Function not implemented
[ 4] 5.00-6.00 sec 3.04 GBytes 26.1 Gbits/sec 0 0.00 Bytes
iperf3: getsockopt - Function not implemented
[ 4] 6.00-7.00 sec 883 MBytes 7.41 Gbits/sec 0 0.00 Bytes
iperf3: getsockopt - Function not implemented
[ 4] 7.00-8.00 sec 2.99 GBytes 25.7 Gbits/sec 0 0.00 Bytes
iperf3: getsockopt - Function not implemented
[ 4] 8.00-9.00 sec 1.27 GBytes 10.9 Gbits/sec 0 0.00 Bytes
iperf3: getsockopt - Function not implemented
[ 4] 9.00-10.00 sec 2.75 GBytes 23.7 Gbits/sec 4286328496 0.00 Bytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 26.0 GBytes 22.4 Gbits/sec 0 sender
[ 4] 0.00-10.00 sec 26.0 GBytes 22.4 Gbits/sec receiver
iperf Done.
答案1
产生此错误消息的原因是“ESXi 的 Linux”上的 TCP 统计信息不符合预期的结构。
iperf 中的功能检查只是“它是否是 Linux”(https://github.com/esnet/iperf/blob/a2ce47a97acfad3acee91a6cb4da28f9f50c19df/src/tcp_info.c#L63),并期望通过 getsockopt 调用特定结构中的 TCP_INFO 来找到数据。
由于测试运行不依赖于间隔比较功能,因此测试运行的总体统计数据仍然有效。
例如,FreeBSD 的情况有所不同,它与 Linux 内核相比,返回的数据结构不同。请参阅https://github.com/esnet/iperf/pull/244了解详情。
调用 save_tcpinfo 来保存每个间隔周期的信息,但似乎 iperf 和 ESXi 的 Linux 版本在间隔统计方面不能很好地协同运行。
戴尔在主线生产中也遇到此问题的一个例子如下: https://www.dell.com/support/kbdoc/en-uk/000187640/dell-emc-vxrail-vsan-hosts-network-performance-test-does-not-exceed-10-000mb-s-bandwidth-on-25gb-or-higher-network-infrastructure。
上述戴尔文章也可能为您提供一些关于如何操纵 iperf 来获得您所期望的带宽的指示......