云主机业务网卡/管理网卡/存储网卡出现大量的历史dropped
一、ring buffer原理:
ring buffer是内存分配的一个网络数据流的环形缓存空间。
多CPU的ring buffer处理原理:分配给 Ring Buffer 的空间是有限的,当收到的数据包速率大于单个 CPU 处理速度的时候 Ring Buffer 可能被占满,占满之后再来的新数据包会被自动丢弃(记录在网卡配置dropped中)。
二、网卡驱动BUG
云主机或宿主机出现Ring Buffer问题,咨询厂商判断网卡驱动是否存在BUG。
查看网卡驱动(driver、version)
ethtool -i enp1s0f1
三、网卡Ring Buffer缓存空间不足
i.查看网卡error、dropped
ifconfig | grep error
ifconfig | grep enp1s0f1
ethtool -S enp1s0f1|grep -iE "drop|error"
四、故障原因:
管理卡bond0(rx/tx值为256)、业务卡bond1(rx/tx值为512)、存储卡bond2(rx/tx值为512),从当前dropped的情况来看,可能ring buffer值无法满足当前网络流的rx/tx存放需求,导致网络数据包丢失dropped,建议将rx值逐步调整为1024、2048、4096,观察复现情况。
五、网卡处理网络数据流程图:
图中虚线步骤的解释:
1、DMA 将 NIC 接收的数据包逐个写入 sk_buff ,一个数据包可能占用多个 sk_buff , sk_buff 读写顺序遵循FIFO(先入先出)原则。
2、DMA 读完数据之后,NIC 会通过 NIC Interrupt Handler 触发 IRQ (中断请求)。
3、NIC driver 注册 poll 函数。
4、poll 函数对数据进行检查,例如将几个 sk_buff 合并,因为可能同一个数据可能被分散放在多个 sk_buff 中。
5、poll 函数将 sk_buff 交付上层网络栈处理。
完整流程:
1、系统启动时 NIC (network interface card) 进行初始化,系统分配内存空间给 Ring Buffer 。
2、初始状态下,Ring Buffer 队列每个槽中存放的 Packet Descriptor 指向 sk_buff ,状态均为 ready。
3、DMA 将 NIC 接收的数据包逐个写入 sk_buff ,一个数据包可能占用多个 sk_buff ,sk_buff 读写顺序遵循FIFO(先入先出)原则。
4、被写入数据的 sk_buff 变为 used 状态。
5、DMA 读完数据之后,NIC 会通过 NIC Interrupt Handler 触发 IRQ (中断请求)。
6、NIC driver 注册 poll 函数。
7、poll 函数对数据进行检查,例如将几个 sk_buff 合并,因为可能同一个数据可能被分散放在多个 sk_buff 中。
8、poll 函数将 sk_buff 交付上层网络栈处理。
9、poll 函数清理 sk_buff,清理 Ring Buffer 上的 Descriptor 将其指向新分配的 sk_buff 并将状态设置为 ready。
六、解决方案:(修改bond1和bond2的rx/tx ring buffer值)
1、查看网卡RX/TX ring buffer大小
i.管理卡bond0(物理卡:enp33s0f0和enp33s0f1)
[root@localhost ~]$ ethtool -g enp33s0f0
Ring parameters for enp33s0f0:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 256#初始设置为:256,范围:0~4096
RX Mini: 0
RX Jumbo: 0
TX: 256
[root@localhost ~]$ ethtool -g enp33s0f1
Ring parameters for enp33s0f1:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 256
RX Mini: 0
RX Jumbo: 0
TX: 256
ii.业务卡bond1(物理卡:enp1s0f0和enp3s0f0)
[root@localhost ~]$ ethtool -g enp1s0f0
Ring parameters for enp1s0f0:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 512
RX Mini: 0
RX Jumbo: 0
TX: 512
[root@localhost ~]$ ethtool -g enp3s0f0
Ring parameters for enp3s0f0:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 512
RX Mini: 0
RX Jumbo: 0
TX: 512
[root@localhost ~]$ ethtool -g enp1s0f1
Ring parameters for enp1s0f1:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 512
RX Mini: 0
RX Jumbo: 0
TX: 512
[root@localhost ~]$ ethtool -g enp3s0f1
Ring parameters for enp3s0f1:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 512
RX Mini: 0
RX Jumbo: 0
TX: 512
2、配置rx ring buffer缓存空间优化
(建议将rx值逐步调整为1024、2048、4096,观察复现情况)
i.管理卡bond0(物理卡:enp33s0f0和enp33s0f1)
[root@localhost ~]$ ethtool -G enp33s0f0 rx 1024
Ring parameters for enp33s0f0:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 1024#初始设置为:256,范围:0~4096
RX Mini: 0
RX Jumbo: 0
TX: 256
[root@localhost ~]$ ethtool -G enp33s0f1 rx 1024
Ring parameters for enp33s0f1:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 1024
RX Mini: 0
RX Jumbo: 0
TX: 256
ii.业务卡bond1(物理卡:enp1s0f0和enp3s0f0)
[root@localhost ~]$ ethtool -G enp1s0f0 rx 1024
Ring parameters for enp1s0f0:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 1024
RX Mini: 0
RX Jumbo: 0
TX: 512
[root@localhost ~]$ ethtool -G enp3s0f0 rx 1024
Ring parameters for enp3s0f0:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 1024
RX Mini: 0
RX Jumbo: 0
TX: 512
iii.存储卡bond2(物理卡:enp1s0f1和enp3s0f1)
[root@localhost ~]$ ethtool -G enp1s0f1 rx 1024
Ring parameters for enp1s0f1:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 1024
RX Mini: 0
RX Jumbo: 0
TX: 512
[root@localhost ~]$ ethtool -G enp3s0f1 rx 1024
Ring parameters for enp3s0f1:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 1024
RX Mini: 0
RX Jumbo: 0
TX: 512
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异