首页/网络/抓包与流量分析速查/网卡环形缓冲与丢包
丢包与时延定位60 条

网卡环形缓冲与丢包

驱动环形缓冲满会丢包:ethtool -g 查看大小、-S 看 miss/drop 计数;突发流量下缓冲不足是常见根因。

环形缓冲与溢出

网卡驱动用一组环形缓冲承载刚到达的报文:硬件把报文写进描述符环,内核再逐个取走处理。当缓冲已满而处理速度跟不上时,新到的报文只能被丢弃。这类丢包的证据在驱动统计里,缓冲大小可以直接查看,丢弃与未命中计数则反映溢出的规模。突发流量是最常见的诱因,但扩大缓冲只是缓解手段——处理能力本身不足时,缓冲迟早还会满。

基本信息

适用平台Linux(网卡驱动统计与配置,需对应驱动支持)
命令ethtool -g 查看缓冲大小,ethtool -S 查看计数
观察点接收与发送方向的缓冲配置与丢弃计数
相关因素中断分布、单核处理能力、突发流量形态

典型使用场景

  • 突发流量后出现丢包,确认是否为缓冲溢出
  • 压测时吞吐上不去,区分是缓冲还是处理能力限制
  • 对比调整缓冲前后的丢弃计数变化
  • 上云或虚拟化环境中确认虚拟网卡的缓冲配置
  • 为中断与队列优化提供数据依据
  • 长期观察缓冲溢出趋势,提前扩容

速查命令

速查命令
ethtool -g eth0                             # 查看收发环形缓冲大小
ethtool -S eth0 | grep -Ei 'drop|miss|fifo'  # 溢出相关计数
# 突发后计数增长 → 考虑扩大 ring,但要评估内存与中断影响
# 扩大后仍持续增长 → 瓶颈在处理能力,需看中断与队列
ip -s link show eth0                         # 接口层统计辅助对照

输出逐项读法

输出项含义正常与异常
RX / TX接收与发送方向两个方向要分别判断
当前缓冲大小驱动实际生效值偏小说明可调整空间大
最大可设值硬件支持上限接近上限时只能靠处理能力优化
丢弃计数溢出导致的丢弃随时间持续增长即为异常
未命中或队列计数描述符未就绪导致的丢弃突发时段增长指向处理不及时
扩大缓冲是缓解而非根治:处理能力不足时缓冲只是把溢出推迟到流量更大的时刻。
虚拟机内看到的网卡参数与宿主物理卡不同,排查要按层级进行,避免拿虚拟机数值推断物理链路。

易错点

  • 只扩缓冲不查处理能力:溢出会推迟出现而不是消失,问题在流量高峰时复发
  • 忽略调整的副作用:缓冲加大影响内存占用与中断行为,属于需要验证的变更
  • 在虚拟机内直接推断物理网卡:两者参数与统计含义不同,需分层排查
  • 只看总计数不看方向:接收与发送侧溢出的原因与处置方式不同,需要分开统计

数据来源与参考

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