首页/系统/Linux 内核与性能调优速查/ethtool 环缓冲查看与调整
网络栈调优98 条

ethtool 环缓冲查看与调整

网卡环形缓冲过小会丢突发流量, 过大会增加排队延迟; 用 -g 查看, -G 调整且立即生效。

环缓冲是什么

环形缓冲决定驱动能暂存多少个收发描述符。缓冲过小,在突发流量下驱动来不及处理就直接丢包,表现为 rx_missed_errors 或 rx_no_buffer_count 增长;缓冲过大,则报文在网卡侧排队更久,抬高延迟并占用更多内存。ethtool -g 查看当前值与上限,-G 调整且立即生效。

基本信息

查看命令ethtool -g eth0
调整命令ethtool -G eth0 rx 4096 tx 4096
取值上限输出中的 Maximums 行,不能超过
生效方式立即生效,重启后需重新应用或用网络配置持久化
观察配套rx_missed_errors、rx_no_buffer_count 是否仍在增长

典型使用场景

  • 突发流量丢包:收包缓冲不足导致 miss 计数持续增长
  • 虚拟化环境瞬时丢包:虚拟网卡缓冲偏小,突发时丢包
  • 低延迟业务评估:确认增大缓冲是否会带来额外排队延迟
  • 压测前固化配置,保证多轮测试的网卡参数一致
  • 核对驱动默认值是否被前序脚本改动过

查看与调整

查看与调整
ethtool -g eth0                     # 查看 Current 与 Maximums
ethtool -G eth0 rx 4096 tx 4096     # 调整接收与发送环缓冲
ethtool -g eth0                     # 复核是否已按新值生效
ethtool -S eth0 | grep -iE 'missed|no_buffer'   # 观察对应计数是否停止增长
ip -s link show eth0                # 对照接口层的丢弃计数

输出逐项读法

输出项含义判读
Pre-set maximums驱动支持的最大环缓冲调大时不能超过该值
Current hardware settings当前生效值实际影响丢包与延迟的就是它
RX / TX 分区接收与发送方向分别设置收包丢包关注 RX,发送异常关注 TX
提示不支持驱动未暴露该接口虚拟网卡上较常见,需换思路处理

判断依据与回退

  • 只有 miss 或 no_buffer 类计数持续增长时才考虑增大缓冲
  • 每次调整后对照延迟指标,确认没有把延迟推高到不可接受
  • 记录调整前的原值,便于回退到驱动默认配置
  • 调整需持久化,避免重启后悄悄退回默认值
环形缓冲只是链路侧的一道缓冲:如果丢包发生在上游链路或对端,扩大本端缓冲不会改善结果,反而会把问题掩盖成延迟升高。
增大环缓冲会占用更多内核内存,且在高并发场景下可能让排队时间变长;收包延迟敏感的服务应当先压测,再决定是否调整。

易错点

  • 没看 miss 类计数就直接调大环缓冲,凭感觉调参
  • 把环缓冲当作丢包问题的通用解,忽略上游链路与协议栈层的原因
  • 调整后不记录原值,延迟变差时无法快速回到基线
  • 在驱动不暴露该接口的虚拟网卡上反复尝试,浪费时间且配置无效

数据来源与参考

  • man ethtool
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌