网卡工具与诊断:从服务器读取模块信息
服务器上没有 show interface transceiver,但底下一层有同样的信息:网卡驱动读取模块 EEPROM,并通过 ethtool、厂商工具,以及在 Windows 和 ESXi 上通过各自的命令暴露出来。本文按操作系统和厂商列出这些工具、各自能看到什么(身份信息、DDM、FEC 计数器、链路状态、PCIe),以及在链路 down 或错误累积时如何解读输出。
| 命令 | 显示内容 |
|---|
ethtool eth0 | 链路状态、速率、双工、自动协商、支持/宣告的模式、端口类型(FIBRE/DA) |
ethtool -m eth0(--module-info) | 解码后的 EEPROM:标识符、厂商、PN、SN、日期、合规代码、波长、长度;若模块支持 DDM,则包括温度、Vcc、偏置电流、Tx/Rx 光功率、阈值、告警标志 |
ethtool -m eth0 raw on hex on | 原始 A0h(及 A2h)转储,用于逐字节比较(存储器映射) |
ethtool -m eth0 page 0x11 …(较新版本) | 400G 以上模块的 CMIS 页 |
ethtool -i eth0 | 驱动、版本、固件/NVM 版本、总线地址 |
ethtool -S eth0 | 统计信息,包括 CRC 错误;部分驱动还有 FEC 已纠正/未纠正计数 |
ethtool --show-fec eth0 / --set-fec eth0 encoding rs | 已配置和当前生效的 FEC 模式 |
ethtool -s eth0 speed 25000 duplex full autoneg off | 强制设置速率 |
ethtool -p eth0 5 | 闪烁端口 LED 以识别端口 |
ethtool --show-priv-flags eth0 | 驱动特有的标志(例如 link-down-on-close) |
其他 Linux 信息来源:按 sfp、module、link 过滤的 dmesg(驱动关于模块认证的消息)、lspci -vv -s <addr>(LnkSta 下的 PCIe 链路宽度/速率)、 ip -s link show eth0(计数器)、/sys/class/net/eth0/(载波、速率)。
厂商工具
| 厂商 | 工具 | 主要用途 |
|---|
| Nvidia / Mellanox | mlxlink -d <pci> -m -e -c | 模块信息和 DDM(-m)、眼图/BER 和 FEC(-e、-c)、链路对端;mlxlink … --fec_override、--speeds |
| Nvidia / Mellanox | mlxconfig -d <pci> q / set | 端口类型(IB/ETH)、链路类型、KEEP_ETH_LINK_UP、FEC 覆盖、拆分 |
| Nvidia / Mellanox | mst status、mlxfwmanager | 设备列表、固件 |
| Nvidia / Mellanox | ibstat、ibportstate、iblinkinfo | InfiniBand 端口状态、宽度、速率(IB 组网) |
| Intel | ethtool -m | 主要工具;Intel 没有专用的模块转储工具 |
| Intel | nvmupdate64e、epct64e | NVM 固件更新;端口配置(E810 端口选项,例如 2×100G 与 4×25G 之间切换) |
| Intel | dmesg | ixgbe/i40e/ice: unsupported module 一类消息(光模块兼容性) |
| Broadcom | bnxtnvm、niccli | NVM、端口设置、FEC/AN、光模块信息 |
| Marvell | qedctl | — |
| AMD Solarflare | sfupdate、sfboot | 固件、端口模式 |
| Chelsio | cxgbtool | — |
Windows
| 命令 | 显示内容 |
|---|
Get-NetAdapter | 链路状态、速率 |
Get-NetAdapterAdvancedProperty -Name "Ethernet 2" | 速率/双工、FEC 模式、jumbo——可用 Set-NetAdapterAdvancedProperty 设置 |
Get-NetAdapterHardwareInfo | PCIe 插槽、链路宽度/速率 |
Get-NetAdapterStatistics | 计数器 |
Intel PROSet:Get-IntelNetAdapter、Get-IntelNetAdapterSetting | Intel 特有设置;模块信息在设备管理器 → Link Speed 选项卡 |
Nvidia WinOF-2:mlx5cmd -Stat、mlxlink(Windows 版本) | 模块信息和链路诊断 |
| 事件查看器 → System | 驱动关于不受支持模块的消息 |
Windows 驱动很少暴露 DDM;请使用厂商工具,或在工作台上直接读取模块。
VMware ESXi
| 命令 | 显示内容 |
|---|
esxcli network nic list / get -n vmnic0 | 链路、速率、驱动、固件 |
esxcli network nic stats get -n vmnic0 | 计数器 |
esxcli system module parameters list -m ixgben / set -m ixgben -p "…" | 驱动参数(在驱动支持的情况下) |
esxcli intnet …(Intel 插件)、esxcli mellanox … / mlxlink(Nvidia 插件) | 厂商诊断,包括模块信息 |
vmkernel.log | “unsupported module”、链路抖动 |
esxcli hardware pci list | PCIe 链路状态 |
解读输出
| 现象 | 含义 | 下一步 |
|---|
ethtool -m:“Cannot get module EEPROM information: Operation not supported” | 驱动未暴露该功能、端口没有模块,或模块的 I²C 无响应 | 检查 dmesg,重新插拔,换个端口试试(读写错误) |
身份可读,Link detected: no,Rx 光功率正常 | 速率/FEC/AN 不匹配 | ethtool --show-fec,与交换机对比(FEC & AN) |
| Rx 光功率 −40 dBm / “-inf” | 无光 | 光纤、远端、极性(无链路) |
| 偏置电流和 Tx 光功率正常,Rx 临界 | 连接器脏污、链路过长 | 清洁、核对预算(Rx 功率与预算) |
| FEC 不可纠正计数上升 | 链路处于临界状态 | DDM 各项指标、线缆等级、温度(VDM 与 FEC 指标) |
| 1U 服务器中温度 > 70 °C | 气流 | 调整位置,或改用 OCP 插槽(端口与 PCIe) |
2×100G 网卡上出现 LnkSta: Speed 8GT/s, Width x8 | PCIe 瓶颈 | 插槽/bifurcation 设置 |
dmesg 中出现 unsupported module | 驱动白名单 | 网卡上的光模块兼容性 |
从服务器进行监测
ethtool -m 的输出可解析;用 cron 任务,或带 ethtool 采集器的 node exporter,把 DDM 导出到 Prometheus 风格的监测系统(监测)。- Nvidia
mlxlink 的 JSON 输出(--json)和 Intel ethtool -S 的 FEC 计数器,都是不错的故障前兆信号(链路可靠性与监测)。 - 30–60 秒的轮询间隔已经足够;DDM 本身最快也就每秒更新一次。
在 CodingBox 中
ethtool -m raw on hex on 和 CodingBox 读取的是同样的字节:当一个模块在网卡上和在工作台上表现不同时,把两份转储逐字段对比——不改写任何内容的驱动会显示完全相同的数据,任何差异都指向模块自身的动态页,或是读取错误(Check transceiver、 用工具读取 DDM)。