系统调优

网络性能调优

目的

本次测试网卡采用以太网标卡-25GE(Hi1822)-四端口-SFP+,以该网卡为例对网卡配置参数进行优化以达到最佳性能。

方法

优化方法主要包含调节网卡参数和中断绑核(即将网卡中断绑定到网卡所在物理CPU上),具体优化项如表1所示:

表1 网卡参数配置

参数名称

参数含义

优化建议

irqbalance

系统中断均衡服务,会自动将网卡软中断分配到相对空闲的CPU上。

默认值:active

现象:开启状态下系统会自动将网卡软中断分配到相对空闲的CPU上

修改建议:

  • 关闭irqbalance,将该参数设置为“inactive”
    1
    systemctl stop irqbalance
    
  • 通过设置为重启服务器后默认关闭。
    1
    systemctl disable irqbalance
    

rx_buff

“rx_buff”接收缓冲区,用于临时存储从网卡硬件接收的数据包,聚合较大的网络报文需要多篇不连续的内存空间,内存利用率低,增大该项可以提高内存利用率。

默认值:2

现象:默认值为2时中断会消耗较多的CPU资源

修改建议:通过加载参数的方式,配置“rx_buff”的大小,减少不连续的内存,提高内存利用率,提高性能,调整为“8”。具体操作见表后。

ring_buffer

“ring_buffer”环形缓冲区,网卡硬件和驱动之间的队列,存储待处理的数据包描述符,通过增加网卡buffer大小可以增加吞吐量。

默认值:1024

现象:通过ethtool -g <网卡名称> 查看

修改建议:将“ring_buffer”队列大小调整为4096。具体操作见表后。

lro

Large Receive Offload,打开后会将多个小包聚合为一个大包以提高效率。

默认值:off

现象:打开后最大吞吐量明显上升

修改建议:打开“large-receive-offload”功能,调高网络包收发效率。具体操作见表后。

hinicadm lro -i hinic0 -t 256

表示最大256微秒后将收到的包聚合发出,调整为256微秒。

默认值:16微秒

现象:配合lro功能使用

修改建议:调整为256微秒

hinicadm lro -i hinic0 -n 32

表示最大收到32个包后将聚合的包发出,设置为32个包。

默认值:4个包

现象:配合lro功能使用

修改建议:设置为32个包

除了以上优化参数以外,还需要将网卡软中断绑核:

  1. 关闭irqbalance服务。
  2. 查询网卡归属于哪个NUMA节点。
    1
    cat /sys/class/net/ <网口名> /device/numa_node
    
  3. 查询该NUMA节点对应哪些CPU core
    1
    lscpu
    
  4. 查询网卡中断号(IN200网卡参考网口名为hns3,其他网卡可通过ip a命令进行网口名查询,或寻找对应网卡支持)。

    一般情况下网卡中断号可通过如下命令查询:

    1
    cat /proc/interrupts | grep <网口名> | awk -F ':' '{print $1}'
    

    但有些情况下不支持上述查询命令,需要通过网卡“bus-info”信息获取对应的中断号,以下步骤为通过“bus-info”信息获取对应的中断号。

    • 通过ethtool获取网卡信息。
      1
      ethtool -i <网口名>
      
    • 根据网卡的“bus-info”获取对应的中断号。
      1
      cat /proc/interrupts |grep <bus-info> | awk '{print $1}' | awk -F ':' '{print $1}'
      
  5. 将软中断绑定到该NUMA节点对应的core上。
    1
    echo <core编号> > /proc/irq/ <中断号> /smp_affinity_list。
    

旁路SMMU

  1. 编辑配置文件/etc/grub2-efi.cfg。

    1
    vi /etc/grub2-efi.cfg
    

  2. 在内核代码中找到vmlinuz-4.14.0-115.el7a.0.1.aarch64所在行,在该行末尾加入“iommu.passthrough=1”,保存退出,重启服务器,如下所示:

    1
    2
    3
    4
    5
    6
    7
    if [ x$feature_platform_search_hint = xy ]; then
    search --no-floppy --fs-uuid --set=root  e343026a-d245-4812-95ce-6ff999b3571c
    else
    search --no-floppy --fs-uuid --set=root e343026a-d245-4812-95ce-6ff999b3571c
    fi
    linux /vmlinuz-4.14.0-115.el7a.0.1.aarch64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap LANG=en_US.UTF-8 iommu.passthrough=1
    initrd /initramfs-4.14.0-115.el7a.0.1.aarch64.img
    

此优化只适用于鲲鹏计算平台上内核版本为4.14.0-115.el7a.0.1.aarch64的CentOS 7.6操作系统,若使用其他的操作系统,则需要先用uname -r命令查询当前内核版本,然后在找到vmlinuz-<内核版本>所在行的末尾加入“iommu.passthrough=1”。

OS配置调优