配置网卡中断绑核

目的

方法

  1. 关闭irqbalance。

    1
    2
    3
    systemctl stop irqbalance.service
    systemctl disable irqbalance.service
    systemctl status irqbalance.service
    

  2. 网卡中断绑核,绑定的核专门用于处理网卡中断。

    以4core的HTTP短连接场景的绑核脚本为例,如果要修改绑核脚本,只需修改要绑定的网口名eth1以及网卡队列深度cnt。

    1. 新建脚本。
      1
      vim irq_http_4core.sh
      
    2. “i”进入编辑模式,添加绑核脚本内容。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      #!/bin/bash
      # filename: irq_http_4core.sh
      cnt=2
      eth1=enp3s0
      ethtool -L $eth1 combined $cnt                 
      irq1=`cat /proc/interrupts| grep -E ${eth1} | head -1 | awk -F ':' '{print $1}'`
      irq1=`echo $irq1`
      i=0
      while(( $i < 1))
      do
              for cpunum in 2 3
              do
                      echo $cpunum "->" $irq1
                      echo  $cpunum > /proc/irq/$irq1/smp_affinity_list
                      let "irq1++"
              done
              let "i++"
      done
      

      脚本参数及命令说明如表1所示。

      表1 参数及命令说明

      参数及命令名称

      说明

      cnt

      设置网口队列数:cnt为变量,2为队列数。

      eth1

      设置通信中使用的网口名:eth1为变量,enp3s0为网口名。

      irq1

      网口eth1对应的中断号:irq1为变量。

      cpunum

      分配给网口eth1用于处理网卡中断的核,cpunum为变量。

      ethtool -L $eth1 combined $cnt

      设置队列数为核数。

      cat /proc/interrupts | grep $eth1 | awk -F ':' '{print $1}'

      查询网口中断号。

      echo $cpunum > /proc/irq/$irq/smp_affinity_list

      根据中断号,将每个中断各绑定在一个核上。

    3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
    4. 执行脚本。
      1
      sh irq_http_4core.sh