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

     

     

  • 相关阅读:
    Colocate Join :ClickHouse的一种高性能分布式join查询模型
    Spring Cache设计之美,你品,你细品…
    Java反射机制清空字符串导致业务异常分析
    带你了解TensorFlow pb模型常用处理方法
    代码检查工具 好的程序员都应该进行代码检查
    docker启动consul
    SpringCloud的主要功能
    docker容器相关
    模型函空运左快
    docker使用nacos
  • 原文地址:https://www.cnblogs.com/gkhost/p/16319496.html
Copyright © 2020-2023  润新知