ConnectX-4 MCX456A-ECAT 在 100GBASE-LR4 上连不上 Cisco NCS,而两端各自环回测试都能通过
我们有一对机柜,对接一台面向运营商的 Cisco NCS,其中一条 100G 服务器上联口自建成以来就没起来过。把服务器挪到另一个机柜、换一个配线架之后结果一样,所以我不再把它当成个例看待。
- Supermicro 服务器,NVIDIA/Mellanox ConnectX-4 MCX456A-ECAT,两个端口都是空的
- 通用的 100GBASE-LR4 QSFP28,单模,10 公里传输距离,两端各一个
- 对端是 Cisco NCS,两个机房之间是暗光纤
真正卡住我的地方是:每个模块单独在自己的设备上做环回都能通过。把光纤直接环回插到同一个 QSFP28 上,网卡报告一条干净的 100G 链路,NCS 那边自环也是一样。把真正的这段链路接上去,就什么都没有了。
# module looped back on the NIC itself
Speed: 100000Mb/s
Link detected: yes
# same module, real span to the NCS
Speed: Unknown!
Link detected: no
我们已经试过:
- 把两个模块都换成同一批的备用件,没有变化
- 挪动服务器,换了一个配线架重新接线
- 找网卡厂商开了工单,得到的答复是指向固件发行说明里的已验证收发器列表,但这解释不了为什么环回是通的
ConnectX-4 上的 LR4 是不是有什么特性,会导致本地环回能通、跨真实链路却始终不通?还是说我一直在追错方向?
Comments 3
这看起来像是链路本身脏了,不是兼容性问题。
你目前换过的所有东西,都在已经测试通过的那一侧,这就是为什么什么都没变——唯一没动过的就是这段链路本身。所以该查的是这条路径:
厂商指给你的那份已验证收发器列表值得看一眼,但一个能在环回里干净起链路的模块,说明网卡本身已经在正确驱动它了。兼容性列表能解释的是那些直接被拒绝的模块,解释不了本地能通、跨链路就断的模块。
如果清洁之后还不行,下一步就是在这条暗光纤上用光源加功率计测一下,如果能借到 OTDR 就更好,总比再买一块网卡或者再买一对光模块划算。
环回只能证明一个端口能听到自己——激光器、接收器、速率设置都没问题。它说明不了你两个机房之间那段玻璃纤维的状况,而那恰恰是你还没测过的那一段。所以在再次怪罪网卡之前,先在接上真实链路的情况下从两端读数字:NCS 端口的 Rx 功率是多少,网卡那边又是多少?接上真实链路后 Rx 低于 Low Warn 阈值,是典型的指向对端或路径本身、而不是本地端口的信号。Linux 那边用
ethtool -m应该能拿到同样的读数,如果返回的是Cannot get module EEPROM information: Input/output error,不要把这理解成模块坏了——在 mlx5 上这通常是固件侧的模块访问问题,依次执行mst start、mst cable add,再用mlxcables照样能拿到数值。答案就是清洁。我们用显微镜看了端面,两个模块加两根跳线全都有污染;跨机房配线架那根跳线情况更严重。把路径上的所有东西都清洁了一遍,重新插好,到 NCS 的 100G 链路第一次尝试就起来了,一直保持到现在。
有点懊恼自己在兼容性这个方向上花了那么长时间,而环回结果其实一直在告诉我模块没问题、问题出在路径上。给后来遇到这个问题的人提个醒:环回证明的是端口,不是光纤。