网卡故障诊断需分四步:先查驱动匹配性,再用iperf测吞吐量,接着抓取ethtool错误计数,最后验证中断绑定与NUMA亲和性;任一环节异常均指向驱动、固件、硬件或系统调度问题。

当你发现网络传输速度远低于标称带宽、大文件传输频繁卡顿或ping值忽高忽低时,不能仅靠“感觉”下结论——必须用性能测试数据验证网卡是否真有问题。单纯跑个iperf看到900Mbps就断定千兆网卡正常,可能漏掉关键硬件异常。
第一步:确认网卡基础状态和驱动匹配度
打开终端,依次执行:
lspci -k | grep -A3 -i ethernet → 查看当前网卡型号及绑定的内核模块;
ethtool eth0 | grep -E "Speed|Link|Driver" → 确认协商速率、链路状态与驱动名称。
若显示Driver: r8169但网卡实为RTL8125B,【说明系统正在用错误的通用驱动强行兼容,性能必然受限】;若Speed显示1000Mb/s但网卡是2.5G型号,这就是典型驱动不匹配,后续所有性能测试结果都不可信。
第二步:用iperf3做基础吞吐量测试
方法一(直连双机):
服务端:iperf3 -s
客户端:iperf3 -c 192.168.1.100 -t 60 -i 10
要求两台机器用同品牌网线直连,关闭防火墙,IP设为同一网段静态地址。
方法二(绕过交换机干扰):
若只有单机,启用环回测试:sudo ip link add name veth0 type veth peer name veth1 → sudo ip link set veth1 up → sudo ip addr add 10.0.0.1/24 dev veth0 → sudo ip addr add 10.0.0.2/24 dev veth1 → iperf3 -c 10.0.0.2 -t 30
这能排除物理链路和交换机问题,纯粹测网卡协议栈与驱动效率。
注意:测试中若持续出现“Connection reset by peer”或吞吐量在300Mbps以下剧烈抖动,【大概率是网卡固件异常或DMA通道故障】,不是换线或调MTU能解决的。
第三步:抓取硬件级错误计数
第一步:运行 sudo ethtool -S eth0 | grep -E "(rx|tx)_errors|drop|fifo|overrun"
重点关注 rx_errors、rx_fifo_errors、tx_aborted_errors 这三项数值。
第二步:对比基线 —— 正常空闲状态下这些值应长期为0;若在iperf满载测试后 rx_errors > 10 或 rx_fifo_errors > 0,说明网卡接收缓冲区溢出或PCIe总线响应超时,已超出软件调优范畴。
第三步:检查 dmesg | grep -i "eth0\|firmware\|pci",若出现“eth0: tx timeout”或“firmware request failed”,【直接指向网卡硬件失效或固件加载失败】,此时性能测试数据只是表象,根源在物理层。
第四步:强制中断绑定与NUMA亲和性验证
① 查网卡所在NUMA节点:cat /sys/class/net/eth0/device/numa_node
② 查该节点可用CPU列表:cat /sys/devices/system/node/node0/cpulist
③ 绑定中断到本地CPU:echo 3 > /proc/irq/$(cat /proc/interrupts | grep eth0 | awk '{print $1}' | sed 's/:$//')/smp_affinity_list
④ 重启网络服务:systemctl restart systemd-networkd
完成绑定后重跑iperf,若吞吐量从400Mbps跃升至950Mbps,说明原先因跨NUMA访问导致延迟堆积——这不是网卡坏了,而是系统调度失当。但若绑定后仍卡在300Mbps且ethtool -S持续报错,则【可判定为网卡PCIe控制器或PHY芯片硬件损伤】。


















