网卡上的光模块兼容性:驱动白名单
在交换机上,模块策略是网络操作系统里的一行配置;在服务器上,这个决定由网卡驱动和固件来做,并且因厂商、操作系统和驱动版本而异。Intel 网卡是会拒绝未列入清单的模块的那一类;其他大多数厂商只要能解析就接受。本文按厂商和操作系统列出各自的行为、官方记录的绕过方式、决定 DAC 和光模块能否链路建立的 FEC/自动协商规则,以及编码身份在服务器端必须满足的条件。
各厂商的行为
| 厂商 / 驱动程序 | 检查 | 失败时 | 覆盖方式 | 说明 |
|---|---|---|---|---|
| Intel ixgbe(X520、X540、X550 SFP+) | Intel 认证 SFP+ 的厂商 OUI / PN 清单 | failed to load because an unsupported SFP+ or QSFP module type was detected,端口 down | 模块参数 allow_unsupported_sfp=1(Linux);重新加载驱动 | DAC 通常被接受;1G SFP 受限 |
| Intel i40e(X710、XXV710、XL710) | 固件层面对模块的认证 | dmesg 中出现 unsupported module,链路 down,或 ethtool 中显示 “module not qualified” | 较新版 i40e 支持 allow_unsupported_sfp=1;旧版本没有 | XXV710 的 25G 模块检查严格 |
| Intel ice(E810) | NVM/固件层面认证 | Possible mis-configuration of the Ethernet port detected / 模块未通过认证 | 取决于 NVM 和驱动版本;部分版本支持不受支持 SFP 的设置,另一些则拒绝——请查阅 Intel 发行说明 | 近期 NVM 中是 Intel 产品线里限制最宽松的 |
| Windows 上的 Intel(PROSet 驱动) | 同样的清单 | 设备显示 “Network cable unplugged”,事件日志出现警告 | 无官方记录的绕过方式 | 使用 Intel 清单内或 Intel 编码的模块 |
| VMware ESXi 上的 Intel(ixgben、i40en、icen) | 同样的清单 | 链路 down,vmkernel.log 出现 “unsupported module” | 在驱动暴露 allow_unsupported_sfp 的情况下,通过 esxcli system module parameters set 设置模块参数;并非所有版本都支持 | 生产环境中优先使用认证模块 |
| Nvidia / Mellanox mlx5(ConnectX) | 解析 EEPROM;以太网模式下无清单 | 链路 up;mlxlink 显示模块信息 | 不需要 | InfiniBand 模式下:fabric manager 会校验线缆/模块身份,可能标记或降级(IB 线缆) |
| Broadcom bnxt_en(NetXtreme-E) | 解析;多数型号无清单 | up | — | OEM 品牌(Dell、HPE)固件可能加入额外检查 |
| Marvell / QLogic qede | 解析 | up | — | — |
| AMD Solarflare sfc | 解析 | up | — | — |
| Chelsio cxgb4 | 解析 | up | — | — |
| Pensando ionic | 解析 | up | — | — |
| 服务器厂商 OEM 网卡(Dell、HPE、Lenovo、Cisco UCS VIC) | 可能加入各自的清单,Cisco VIC 尤其如此 | CIMC/UCSM 中出现 “unsupported transceiver” | 官方无绕过方式 | UCS VIC 接受 Cisco 编码的模块 |
行为会随驱动和固件(NVM)版本变化;请在具体的组合上验证(兼容性矩阵与固件)。
应用 Intel 的绕过设置(Linux)
# temporary (until reload)
modprobe -r ixgbe && modprobe ixgbe allow_unsupported_sfp=1
# persistent
echo "options ixgbe allow_unsupported_sfp=1" > /etc/modprobe.d/ixgbe.conf
echo "options i40e allow_unsupported_sfp=1" > /etc/modprobe.d/i40e.conf
dracut -f # or update-initramfs -u
# verify
cat /sys/module/ixgbe/parameters/allow_unsupported_sfp
dmesg | grep -iE 'sfp|module|unsupported'
ethtool -m eth0
对多端口网卡,部分驱动的该参数接受逗号分隔的列表(每个端口一个值)。这个设置不获 Intel 官方支持用于生产环境;它只是去掉了检查,并不能改变电气要求。
网卡上的 FEC 与自动协商
| 链路类型 | AN | FEC | 说明 |
|---|---|---|---|
| 25G DAC | 两端都开启(Clause 73) | 协商决定(按线缆等级为 RS 或 BASE-R) | 多数“DAC 不起链路”的情况是某一端 AN 关闭 |
| 25G SR / LR 光模块 | 关闭;强制 25000 | SR 必须用 RS-FEC,LR 用 RS 或不用——须与交换机一致 | ethtool --set-fec eth0 encoding rs |
| 100G DAC | 开启 | RS-FEC | — |
| 100G SR4 / CWDM4 / DR | 关闭 | 必须用 RS-FEC | — |
| 100G LR4 | 关闭 | 不用(部分平台用 RS) | 与交换机保持一致(FEC & AN) |
| 200G / 400G | 光模块关闭 | 始终使用 RS(544) KP4 | — |
| 10G | 关闭 | 不用 | — |
各操作系统的命令参见:NIC 工具与诊断;交换机侧参见:端口配置示例。
编码模块要满足网卡的哪些要求
| 目标 | 最低要求 |
|---|---|
| 未开启绕过的 Intel ixgbe/i40e | 来自 Intel 认证清单的厂商名和 PN(Intel 品牌的 E10GSFPSR/E10GSFPLR/E25GSFP28SR,或 Intel 转售的 OEM 型号),合规代码和校验和须一致 |
| 已开启绕过的 Intel,以及所有宽松厂商 | 有效的校验和与合规代码——不需要 OEM 编码 |
| Cisco UCS VIC | 与 Cisco 交换机相同的 Cisco 式身份信息(各 NOS 如何校验模块) |
| InfiniBand HCA | 符合 IBTA 及 fabric 厂商清单要求的正确线缆/模块身份 |
网卡侧的典型症状
| 症状 | 可能原因 | 检查 |
|---|---|---|
| 端口不存在,或 dmesg 中出现 “unsupported module” | 驱动白名单 | dmesg、ethtool -m,绕过设置或编码模块 |
| 链路 down,模块被识别,各项电平正常 | FEC/AN 不匹配,速率强制设置错误 | ethtool eth0、ethtool --show-fec eth0(速率与档位) |
| 链路 up 但速率不对 | 在双速率模块上自动选择了 10G | 强制设置速率 |
| 链路 up 但吞吐量低 | PCIe 宽度/速率问题 | lspci -vv(端口与 PCIe) |
| 模块发热,温度告警 | 网卡处于排风气流中 | 通过 ethtool -m 查看 DDM;移动网卡或改善通风 |
| 在 Linux 下正常,Windows/ESXi 下不行 | 驱动策略不同 | 为该操作系统使用认证模块 |
| InfiniBand 链路宽度/速率下降 | 线缆不在清单内或过长 | ibstat、mlxlink |
在 CodingBox 中
服务器端的拒绝,诊断所用的字节与交换机端相同。在 Check transceiver 中读取厂商名、PN、OUI、合规代码和校验和;对于纯 Intel 环境,code database 可以保存驱动接受的 Intel 身份信息。