从 TrueNAS Core 迁移到 SCALE 24.10 之后,X520-DA2 的一个端口在 iperf3 里只能跑 1 Gbit/s
这台存储设备从 Core 13.0-U6.7 升到了 SCALE 24.04,后来又升到 24.10,从那之后,一个端口就一直跑得很慢,而同一块网卡上的另一个端口完全正常。25G 的那块网卡也是同样的表现,这让我开始怀疑是不是自己眼花了。
- Intel X520-DA2,配 Intel 多模 SFP+ 光模块,10G 接到交换机
- Intel XXV710-DA2,配 Intel SFP28 光模块,25G 接到同一台交换机
- NAS 上跑的是 TrueNAS SCALE 24.10(之前是 Core 13.0-U6.7,然后是 24.04)
- 用 iperf3 在 NAS 和一个客户端之间做基准测试
那个慢端口的链路状态看起来完全正常:
$ ethtool enp1s0f0 | grep -E 'Speed|Duplex|Link detected'
Speed: 10000Mb/s
Duplex: Full
Link detected: yes
$ iperf3 -c 192.168.3.2
# parks itself around 1 Gbit/s for the whole run
# the second port of the same card does line rate against its own client
已经做过的:
- 把两个端口的光模块互换;慢的那个端口还是慢,快的那个还是快
- 对比了两端的 sysctl net.ipv4.tcp_congestion_control,数值一样
- 两端都重新插拔,清洁了插芯端面
链路层能测到的一切都显示是 10G 和 25G 全双工,实际传输却还是卡在大约千兆左右。是模块在衰退,网卡快坏了,还是我根本查错了层面?
Comments 3
你自己其实已经排除了光模块的可能:你把它们在端口之间互换了,慢是跟着端口走的,不是跟着模块走的。所以先别管模块了,把链路层的数据和吞吐量数字分开看,因为它们回答的根本不是同一个问题。
通常同一块网卡上一个快端口和一个慢端口之间有两处不同,放在一起看:
如果一个是 MTU 1500,另一个是 9014,而且它们又在不同的 VLAN 里,那你这个慢速测试根本没有走「网卡出去再回来」这条路径,而是走了主机的路由路径。找一个和慢端口在同一个 VLAN、同一个子网的客户端,对它跑 iperf3 -c。这样路径上没有路由器,没有 MTU 不匹配,没什么好争的了。
如果同一 VLAN 内的测试能跑满线速,那端口和收发器都没问题,你实际测到的其实是主机上跨 VLAN 路由的性能,而这恰恰是相当一部分 Core 迁移到 SCALE 之后会遇到的情况:跨 VLAN 转发的性能明显比 Core 时代差。
这只是诊断出问题所在,不算真正的解决办法。想把性能大部分找回来,要么把大流量都控制在一个 VLAN 内,要么把路由这活儿交给交换机而不是 NAS 来做。至少这能让你不至于把两个完全正常的 SFP+ 模块退回去。
在有人开始拆光模块之前:交换机对这两个端口是怎么说的?协商速率、双工模式,以及两边的错误计数器。还有,慢速测试里 iperf3 服务端跑在哪一端——把方向反过来,从另一侧往这边推流量,那个上限还在不在?
然后把慢端口和快端口的 MTU、VLAN 并排贴出来。一个协商到 10G、实际负载却只能跑一个 Gbit 的端口,几乎总是转发或路径的问题,不是光学层面的问题。如果这两个端口不在同一个 VLAN 里,iperf3 测的就是你的路由器,不是你的链路。
硬件不一样,情况很像。两台设备用 X520-DA 网卡通过一根 SFP+ DAC 背靠背连接,一边是 Hyper-V Server Core 2012 R2,另一边是一台 NAS4Free 9.1 存储设备。直连的时候,这一对读写都能跑到 8-9 Gbit/s。一旦把这个端口绑定到一个 Hyper-V 虚拟交换机上,速度就掉到大约 500 Mbit/s,后来在 Windows Server 2012 R2 和 Windows 8.1 下重新测试这些网卡,结果毫无变化。
最终也没有真正查明原因。我收到的唯一一条回复问的是每一端后面挂的是什么硬盘、什么 RAID 级别,这其实是个合理的问题,因为存储本身很可能远在 10G 这条路径之前就已经是瓶颈了。我从这次经历里养成的习惯是:同一条链路,分别在加上那一层额外组件和去掉它的情况下各测一次,条件允许的话再对着一个内存盘测一次。那次问题同样也不在线缆或网卡上。