網卡上的光模組兼容性:驅動程式白名單
在交換機上,模組策略是網絡作業系統裏的一行配置;在伺服器上,這個決定由網卡驅動和固件來做,並且因廠商、作業系統和驅動版本而異。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 身份資訊。