云主机业务网卡/管理网卡/存储网卡出现大量的历史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
标签:Mini,4096,TX,主机,RX,网卡,dropped,Jumbo,Ring 来源: https://www.cnblogs.com/gkhost/p/16319496.html