ethtool -S 是什么
ethtool -S 输出网卡的驱动级计数器,是判断丢包与错误发生在网卡侧还是协议栈侧的关键证据。计数器名称与含义由驱动决定,同一类问题在不同网卡上可能叫完全不同的名字,因此第一步应当导出一次全量列表,再按需筛选关注项。
基本信息
| 全量导出 | ethtool -S eth0 |
|---|---|
| 筛选命令 | ethtool -S eth0 | grep -iE 'drop|err|miss|discard' |
| 观察方式 | 间隔采集两次,比较增量而不是总量 |
| 常见计数项 | rx_missed_errors、rx_no_buffer_count、tx_errors、tx_carrier_errors |
| 交叉对照 | ip -s link 的接口计数、协议栈的 snmp 计数 |
典型使用场景
- 收包丢失定位:区分是网卡缓冲不够还是上游根本没送到
- 链路质量核查:carrier 类错误增长通常指向线缆、光模块或对端端口
- 压测前后基线对比:确认压测是否引入了硬件侧错误
- 虚拟化排障:核对虚拟网卡统计与宿主物理口是否一致
- 变更验证:更换网线或模块后比较错误计数是否停止增长
筛选与对比
筛选与对比
ethtool -S eth0 | head -40 # 先看该驱动提供了哪些计数器
ethtool -S eth0 | grep -iE 'drop|err|miss|discard' # 只筛出与丢弃和错误相关的项
ethtool -S eth0 > /tmp/s1; sleep 60; ethtool -S eth0 > /tmp/s2 # 间隔采样
ip -s link show eth0 # 与接口层计数对照常见计数器指向
| 计数器示例 | 含义 | 指向 |
|---|---|---|
| rx_missed_errors | 因缓冲不足被丢弃的收包 | 网卡环缓冲或 CPU 处理不过来 |
| rx_no_buffer_count | 无可用描述符而丢包 | 环缓冲偏小或中断被延迟 |
| tx_errors | 发送错误总数 | 链路协商或驱动异常 |
| tx_carrier_errors | 载波异常导致的发送失败 | 线缆、光模块或对端端口 |
| pause 帧计数 | 流控暂停帧收发 | 属正常流控,不一定代表故障 |
判读顺序
- 先确认计数器名称属于哪一类:丢弃类、错误类还是流控类
- 再看增量:总量大但不再增长通常是历史遗留
- 然后对照 ip -s link 与协议栈计数,确认丢包发生在哪一层
- 最后与对端和交换机侧同类计数交叉验证,避免单侧归因
计数器命名因驱动而异,同一厂商不同型号也可能不同。保留一份全量导出作为基线,能避免在下一次排查时把新出现的计数项当成异常。
暂停帧等流控计数增长说明链路两端在协商流量节奏,属于机制正常工作,只有与丢包同时出现时才需要进一步分析。