其他分享
首页 > 其他分享> > 云主机业务网卡/管理网卡/存储网卡出现大量的历史dropped

云主机业务网卡/管理网卡/存储网卡出现大量的历史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