ethtool 是什么
ethtool 用来读取和设置网卡的物理层参数:链路速率、双工模式、自动协商状态、驱动与固件版本,以及各类硬件统计计数。排查丢包、乱序、时通时断这类问题时,它比 ip 命令更能说明物理链路质量:-S 输出里的 rx_errors、rx_dropped、rx_missed 等计数若持续增长,通常指向线缆、光模块、交换机端口或队列配置,而不是应用代码。
基本信息
| 适用平台 | GNU/Linux(多数发行版默认安装) |
|---|---|
| 语法 | ethtool [选项] 接口名 |
| 常用选项 | -i 驱动信息 -S 统计计数 -s 设置速率与双工 -k 特性开关 -a 自协商与暂停帧 |
| 只读操作 | -i、-S 普通用户通常可执行,改设置需要 root |
| 虚拟网卡 | virtio 类多不支持速率与 serdes 设置 |
| 接口名 | 使用主机侧名字,如 eth0、ens192 |
典型使用场景
- 确认链路协商结果:是否按预期跑在千兆或万兆全双工,有没有意外降速。
- 排查间歇性丢包:观察错误与丢弃计数是否持续增长。
- 记录驱动与固件版本,作为性能问题上报与版本核对的凭据。
- 更换线缆或光模块前后对比统计计数,验证问题是否解决。
- 临时开关网卡卸载特性,做兼容性对照测试。
常用写法
常用写法
ethtool eth0 # 速率、双工与链路状态
ethtool -i eth0 # 驱动与固件版本
ethtool -S eth0 | grep -iE 'err|drop|miss|discard' # 只关注异常计数
ethtool -k eth0 | grep -iE 'offload|checksum' # 查看卸载特性当前状态
ethtool -a eth0 # 自协商与暂停帧状态
ethtool -S eth0 > s1; sleep 10; ethtool -S eth0 > s2; diff s1 s2 # 两次采样做差
ethtool -s eth0 speed 1000 duplex full autoneg on # 锁定千兆全双工(会短暂断链)选项与输出读法
| 选项或字段 | 含义 | 判断要点 |
|---|---|---|
| -i | 驱动与固件信息 | driver 与 version 用于版本核对与上报 |
| -S | 硬件统计计数 | rx_errors、rx_dropped、rx_missed 是关键指标 |
| -s | 设置速率与双工 | 对端不匹配会直接断链,慎用 |
| -k | 特性开关 | 校验和、TSO、GSO 等卸载能力状态 |
| -a | 自协商与暂停帧 | 确认流控协商结果是否一致 |
| Speed 与 Duplex | 协商结果 | 与交换机端口配置不一致是常见丢包根因 |
-S 的计数名称随驱动而异:除通用的 rx_errors、tx_errors 外还有队列级计数,不同网卡甚至同厂商不同型号都不一样。先全量输出看一遍,再决定筛选哪些字段。
虚拟网卡的 virtio 驱动多数不支持速率、serdes 这类物理层设置,-s 会直接报不支持;云主机上应该关注统计计数与队列状态,而不是协商参数。
统计计数是累计值,单次读取几乎没有意义。要在固定间隔读取两次做差(或间隔采样对比),才能判断问题是否仍在发生、是否与某次网络变更相关。