用ethtool -i 可直接查看网卡驱动名和版本,输出中driver和version字段即为实际加载的驱动信息,比modinfo更可靠,需root权限且接口名须准确。

怎么用 ethtool -i 查网卡驱动版本
直接运行 ethtool -i <interface></interface> 是最准、最轻量的方式,它从内核驱动接口实时读取信息,不依赖模块文件或日志解析。输出里 driver 和 version 两行就是你要的答案。
常见误区是只看 modinfo 输出的 version 字段——有些驱动(如 r8169)在 modinfo 里显示的是内核编译时的版本号,而 ethtool -i 返回的是实际加载并运行的驱动版本,更可靠。
- 必须用 root 权限,否则可能报
Operation not permitted - 接口名要准确,
ip link show或ls /sys/class/net/可确认,别输成eth0:带冒号的 - 如果输出里
version为空,说明该驱动没显式声明版本号,此时可配合modinfo <driver_name></driver_name>看srcversion或vermagic辅助判断
ethtool 查链路状态和协商能力的关键参数
单纯执行 ethtool <interface></interface>(不带任何选项)就能看到当前速率、双工、自动协商开关和物理连接状态,这是排查“网卡 up 但不通”的第一反应动作。
重点看三行:Speed(实际协商结果)、Auto-negotiation(是否开启)、Link detected(PHY 层是否检出信号)。这三者不一致就容易出问题,比如交换机端关了 autoneg,本机却开着,就会卡在 Link detected: no。
-
Advertised link modes表示本机主动通告的能力,不是当前生效值 -
Supported link modes是硬件真实支持的速率/双工组合,由 PHY 芯片决定,驱动一般不干预 - 远程执行
ethtool -s <interface> autoneg off speed 1000 duplex full</interface>前,务必确认对端交换机端口也设为强制 1G 全双工,否则大概率断连
为什么 ethtool -S 统计值比 /proc/net/dev 更细
ethtool -S <interface></interface> 输出的是驱动层和网卡硬件寄存器里的原始计数器,包含丢包原因(如 rx_missed_errors、tx_aborted_errors)、DMA 错误、校验失败等;而 /proc/net/dev 只统计进内核协议栈前后的字节/包数,中间环节的问题它看不见。
典型使用场景:当 ifconfig 显示 RX errors 很高,但业务流量正常,就可以用 ethtool -S 定位是 ring buffer 溢出(rx_fifo_errors 上升)还是 CRC 校验失败(rx_crc_errors),前者调 -G,后者查线缆或对端 PHY。
- 不同驱动导出的字段名差异很大,
igb和e1000e都有rx_long_length_errors,但r8169可能压根不提供 - 部分统计项是只读寄存器,重启网卡或系统后清零;有些(如
tx_timeout_count)是驱动维护的软计数,不会自动归零 - 高频轮询
ethtool -S会触发大量 ioctl 调用,可能影响性能,监控场景建议用perf或 eBPF 替代
ethtool -g 和 ethtool -G 调环形缓冲区的实际效果
调整 RX/TX ring size 主要解决两类问题:高吞吐下丢包(ring 满导致 rx_missed_errors 上升)、小包低延迟场景(减小 ring 可降低中断延迟)。但效果高度依赖驱动支持程度。
执行 ethtool -g <interface></interface> 先看当前值和最大允许值。很多廉价网卡(如部分 Realtek)最大只支持 512,强行设 4096 会静默失败;而 Intel i40e 卡默认 512,最大可到 8192。
- 增大 ring size 会占用更多 DMA 内存,且需保证
vm.min_free_kbytes足够,否则内存紧张时 kernel 可能 OOM kill 进程 - 修改后不重启网卡立即生效,但旧 ring 中未处理完的 descriptor 仍会继续使用,新分配走新 ring
-
ethtool -G设置的值不一定被驱动完全采纳,最终以ethtool -g返回的Current hardware settings为准
ethtool 功能可能完全不同——比如 --show-eee 在老型号 PHY 上直接报 Operation not supported,而不是返回 off。











