NETDEV WATCHDOG 反复出现的网卡固件升级与 ethtool -r 重置

9次阅读

NETDEV WATCHDOG 超时本质是网卡驱动未在时限内收到硬件收发完成确认,主因是固件与驱动版本不匹配、硬件异常或DMA卡死;需严格按型号/驱动兼容矩阵升级固件至正确.bin文件并重载驱动,ethtool -r仅软复位无效于固件bug

NETDEV WATCHDOG 反复出现的网卡固件升级与 ethtool -r 重置

NETDEV WATCHDOG 超时错误的本质原因

这个错误不是内核网络的问题,而是网卡驱动在规定时间内没收到硬件完成数据包收发的确认信号。典型表现为 dmesg 里反复刷出类似这样的日志:eth0: tx queue timeout, resettingNETDEV WATCHDOG: eth0 (ixgbe): transmit queue 0 timed out。根本原因往往落在固件(firmware)与驱动版本不匹配、硬件状态异常、或 DMA 通道卡死——尤其是万兆及以上网卡(如 ixgbei40eice)。

固件升级必须匹配驱动和硬件型号

升级固件不是“越新越好”,必须严格对齐网卡型号、当前驱动版本、以及厂商发布的兼容矩阵:

  • 先查硬件信息:lspci -vv -s $(lspci | grep Ethernet | head -1 | cut -d' ' -f1),重点关注 SubsystemROM
  • 查当前固件版本:ethtool -i eth0 | grep firmware-version
  • 下载固件前务必核对 Intel/ Broadcom/ Mellanox 官方文档中的 “Firmware Release Notes”,例如 i40e 驱动 v2.19.x 要求固件 ≥ 7.40,低于该版本即使刷入也会被驱动拒绝加载
  • 固件文件通常为 .bin,需放入 /lib/firmware/updates/(而非默认 /lib/firmware/),否则 initramfs 可能无法识别
  • 升级后必须重启或至少重载驱动:modprobe -r i40e && modprobe i40e,仅靠 ethtool -r 不会生效

ethtool -r 不是万能重置,它只触发驱动层软复位

ethtool -r eth0 实际调用的是驱动的 reset 接口,等价于让驱动重新初始化队列、重配 mac 地址、重协商链路,但不会重载固件、不会重置 PHY、也不会恢复 PCIe 状态

  • 对因固件 bug 导致的 TX hang 无效(比如某些 ixgbe 固件在 LRO + TSO 同时开启时会丢弃 descriptor)
  • dmesg 中伴随 PCIe Bus ErrorHardware Unit Hang,说明已发生硬件级故障,ethtool -r 顶多临时恢复几秒
  • 虚拟化环境(SR-IOV VF)中执行 ethtool -r 可能被 PF 驱动拦截,返回 Operation not supported
  • 更彻底的替代操作是:echo 1 > /sys/class/net/eth0/device/reset(需驱动支持),或物理拔插网卡(仅限可热插拔场景)

真正有效的排查链条:从日志到固件回滚

不要一看到 WATCHDOG 就急着升级固件。多数生产环境问题出在配置漂移或小版本不兼容:

  • 检查是否启用了高风险 offload:ethtool -k eth0 | grep on,临时关闭 tx offloadlro 看是否消失
  • 查看 ring buffer 是否过载:ethtool -g eth0rx 值低于 4096 在高吞吐下极易触发 watchdog
  • 对比升级前后 /proc/interrupts 中对应网卡 IRQ 的分布,若全部集中在一个 CPU 核,可能引发 softirq 积压
  • 如果升级固件后问题反而加剧,立刻回退:删掉 /lib/firmware/updates/ 下新固件,清理 initramfs(update-initramfs -u),再重启
  • 最容易被忽略的一点:某些主板 bios 中的 “PCIe ASPM” 或 “SR-IOV Enable” 设置,与网卡固件存在隐式冲突,BIOS 回退一个版本有时比换固件更管用
text=ZqhQzanResources