ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

云主机业务网卡/管理网卡/存储网卡出现大量的历史dropped

2022-05-28 00:02:28  阅读:430  来源: 互联网

标签:Mini 4096 TX 主机 RX 网卡 dropped Jumbo Ring


一、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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有