环形缓冲与溢出
网卡驱动用一组环形缓冲承载刚到达的报文:硬件把报文写进描述符环,内核再逐个取走处理。当缓冲已满而处理速度跟不上时,新到的报文只能被丢弃。这类丢包的证据在驱动统计里,缓冲大小可以直接查看,丢弃与未命中计数则反映溢出的规模。突发流量是最常见的诱因,但扩大缓冲只是缓解手段——处理能力本身不足时,缓冲迟早还会满。
基本信息
| 适用平台 | Linux(网卡驱动统计与配置,需对应驱动支持) |
|---|---|
| 命令 | ethtool -g 查看缓冲大小,ethtool -S 查看计数 |
| 观察点 | 接收与发送方向的缓冲配置与丢弃计数 |
| 相关因素 | 中断分布、单核处理能力、突发流量形态 |
典型使用场景
- 突发流量后出现丢包,确认是否为缓冲溢出
- 压测时吞吐上不去,区分是缓冲还是处理能力限制
- 对比调整缓冲前后的丢弃计数变化
- 上云或虚拟化环境中确认虚拟网卡的缓冲配置
- 为中断与队列优化提供数据依据
- 长期观察缓冲溢出趋势,提前扩容
速查命令
速查命令
ethtool -g eth0 # 查看收发环形缓冲大小
ethtool -S eth0 | grep -Ei 'drop|miss|fifo' # 溢出相关计数
# 突发后计数增长 → 考虑扩大 ring,但要评估内存与中断影响
# 扩大后仍持续增长 → 瓶颈在处理能力,需看中断与队列
ip -s link show eth0 # 接口层统计辅助对照输出逐项读法
| 输出项 | 含义 | 正常与异常 |
|---|---|---|
| RX / TX | 接收与发送方向 | 两个方向要分别判断 |
| 当前缓冲大小 | 驱动实际生效值 | 偏小说明可调整空间大 |
| 最大可设值 | 硬件支持上限 | 接近上限时只能靠处理能力优化 |
| 丢弃计数 | 溢出导致的丢弃 | 随时间持续增长即为异常 |
| 未命中或队列计数 | 描述符未就绪导致的丢弃 | 突发时段增长指向处理不及时 |
扩大缓冲是缓解而非根治:处理能力不足时缓冲只是把溢出推迟到流量更大的时刻。
虚拟机内看到的网卡参数与宿主物理卡不同,排查要按层级进行,避免拿虚拟机数值推断物理链路。