网卡中断绑核

目的

手动绑定网卡中断,根据网卡所属CPU将其进行分配,从而优化系统网络性能。

进行网卡中断绑核之前,需要先关闭irqbalance。

方法

  1. 停止irqbalance服务。

    1
    systemctl stop irqbalance.service
    

  2. 关闭irqbalance服务。

    1
    systemctl disable irqbalance.service
    

  3. 查看irqbalance服务状态是否已关闭。

    1
    systemctl status irqbalance.service
    

    状态为inactive即为关闭。

  4. 网卡中断绑核。

    对于不同的硬件配置,用于绑中断的最佳CPU数目会有差异,比如对于鲲鹏920 5250处理器 + Huawei TM280 25G网卡(鲲鹏服务器的板载网卡)来说,最多可以绑定32个中断队列,建议将所有的队列都用在中断绑定上来获得最佳性能。

    以下脚本是在鲲鹏920 5250处理器 + Huawei TM280 25G网卡上的最佳绑中断设置。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    #!/bin/bash
    eth1=$1
    cnt=$2
    bus=$3
    ethtool -L $eth1 combined $cnt
    
    irq1=`cat /proc/interrupts| grep -E ${bus} | head -n$cnt | awk -F ':' '{print $1}'`
    irq1=`echo $irq1`
    cpulist=(0 1 2 3 4 5 6 7 {51..71} 93 94 95)
    c=0
    for irq in $irq1
    do
        echo ${cpulist[c]} "->" $irq
        echo ${cpulist[c]} > /proc/irq/$irq/smp_affinity_list
        let "c++"
    done
    
    脚本中第一个参数$1是网卡名称,第二个参数$2是队列数目32,第三个参数$3是网卡对应的总线名。
    • 网卡名称可通过如下命令查询。
      ip a
    • 队列数目可以通过如下命令查询获得。
      ethtool -l 网卡名称
    • 总线名可以通过如下命令查询获得。
      ethtool -i 网卡名称