ethtool 命令详解
更新时间:2026-09-17。本文是「一个命令一个文档」系列,聚焦
ethtool(ethernet tool,以太网工具)——属于网络与远程命令族,是深入到网卡硬件/驱动层的那把尺子。ip 看的是内核网络栈视角,ethtool 看的是 NIC(网卡)本身:协商速率、双工、硬件丢包计数、ring buffer、offload。
ethtool 直接通过驱动查询/设置网卡参数。性能排查里它最重要的用途不是改配置,而是用 ethtool -S 读网卡级硬件统计——当 ss/tcpdump 看不出问题、但机器确实在丢包时,硬件计数能告诉你包是丢在网卡还是内核。
一、基本用法
ethtool eth0 # 链路状态:速率、双工、是否检测到载波
ethtool -i eth0 # 驱动名/版本/固件(排障报 bug、确认驱动已知问题)
ethtool -S eth0 # 网卡硬件统计计数器(最常用,排丢包)
ethtool -g eth0 # 查看 ring buffer 大小
ethtool -k eth0 # 查看 offload(tso/gso/gro/lro/rx-checksumming)
ethtool -l eth0 # 查看队列数与 RSS 组合
ethtool -a eth0 # 暂停帧(pause)参数基础输出重点看三行:
Speed: 10000Mb/s(协商速率)、Duplex: Full(应全双工,半双工基本意味着协商异常)、Link detected: yes。千兆卡在百兆速率、或本该万兆协商成千兆,往往是光模块/网线/对端端口问题。
二、ethtool -S:定位"包到底丢在哪"
ethtool -S eth0 | grep -Ei 'drop|miss|err|discard|fifo|crc' | grep -v ': 0$'
# rx_dropped: 0
# rx_missed_errors: 18234 # 网卡收到了但来不及交给主机(ring 满)
# rx_fifo_errors: 18234
# rx_crc_errors: 0 # 0 = 线缆/物理层基本干净这是高并发收包场景的关键判据:
rx_missed_errors/rx_fifo_errors涨:网卡收到了帧,但主机来不及从 ring buffer 取走(软中断处理不过来),属于主机侧瓶颈——要查软中断分布、调大 ring、上 RSS/多队列/RPS。rx_crc_errors/rx_errors涨:物理层问题(网线、光模块、双工不匹配、端口故障),不是内核的锅。 对比 ip-s link的dropped(内核/驱动层)与 ethtool 的硬件计数,能区分丢包发生在网卡还是协议栈。高并发收包优化见内核网络参数调优。
三、常用调优项(改前先记录原值)
ethtool -g eth0 # 先看当前/最大 ring
ethtool -G eth0 rx 4096 tx 4096 # 调大接收 ring,抗突发、降 missed
ethtool -L eth0 combined 8 # 开 8 个收发队列,配合 RSS 摊到多核
ethtool -K eth0 gro on tso on # 开启卸载;某些虚拟网卡/隧道下要关 tso/gso
ethtool -C eth0 rx-usecs 50 # 中断合并(interrupt coalescing),降中断频率调 ring buffer 是应对
rx_missed_errors的第一手段:ring 是网卡和内核之间的待取帧队列,太小则突发时直接丢。但 ring 加大会增加延迟,低延迟交易场景反而要权衡。任何ethtool -G/-L/-K/-C的修改重启后失效,持久化要写/etc/network/interfaces、NetworkManager dispatcher 或发行版的 network 配置。
四、offload 的两面性
ethtool -k 列出的硬件卸载(TSO/GSO/GRO/LRO、checksum offload)默认开启通常是好事——把分段、校验和交给网卡,省 CPU。但在虚拟网卡、virtio、隧道封装(VXLAN/GRE)、抓包排障时,offload 可能导致 tcpdump 看到的是未分段的大包、或校验和显示错误(实际由网卡补算):
ethtool -K eth0 tso off gso off gro off # 抓包/隧道异常时临时关闭验证
# 宿主机对虚拟机/容器网卡也常用:docker0、cni0 关闭 offload 修 checksum 假性报错看到 tcpdump 报大量 "incorrect checksum" 但业务正常,先怀疑 checksum offload,而不是链路坏——这是最经典的误报。
五、和 ip / ss / lspci 的分工
| 命令 | 视角 |
|---|---|
ethtool eth0 / -S | 网卡硬件/驱动:速率双工、硬件丢包、ring、offload |
ip -s link | 内核网卡接口:RX/TX 字节、errors/dropped |
ss -s / -i | 套接字/连接层:连接数、RTT、重传 |
lspci -vv / lshw | 网卡型号、PCIe 链路宽度(万兆卡跑在 x1 也会限速) |
网络"时快时慢/偶发丢包"的下钻顺序:ping/mtr 看链路 →
ip -s link看接口计数 →ethtool -S看硬件计数区分物理层 vs 主机处理不过来 → 必要时ethtool -g/-l调 ring/队列。弱网与队列调度(qdisc)则是 tc 的领域。
相关命令
内核接口统计用 ip,连接用 ss,抓包用 tcpdump,流量控制/弱网模拟用 tc,多队列收包见RSS 与软中断与内核网络调优。
总结
ethtool = 网卡硬件/驱动层的查询与设置工具:基础看速率/双工/Link,排障核心是 ethtool -S 的硬件计数——rx_missed/fifo 涨是主机来不及收(调大 ring、开 RSS),rx_crc 涨是物理层问题;-G 调 ring、-L 队列、-K offload、-C 中断合并且改动重启失效,抓包 checksum 误报多由 checksum offload 引起。