鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

配置网卡中断绑核

目的

  1. 每个CPU对应一个网卡,每个CPU内的中断绑核只绑在属于本CPU的网卡上,按node各自绑核。
  2. 中断个数在尽量少的情况下满足当前所有业务core在客户端满压下满CPU运作即可。
  3. 容器在使用主机网络共享和IPVLAN网络两种网络方式下使用同样的绑核脚本,且都是在物理机上执行绑核脚本。

方法

  1. 关闭irqbalance。

    若要对网卡进行绑核操纵,需要关闭irqbalance。

    1. 停止irqbalance服务。
      1
      systemctl stop irqbalance.service
      

      上述停止irqbalance服务的操作重启后会失效。若需要永久关闭irqbalance服务,可通过以下操作实现。

      1
      systemctl disable irqbalance.service
      
    2. 查看irqbalance服务状态是否已关闭。
      1
      systemctl status irqbalance.service
      
  2. 网卡中断绑核,绑定的核专门用于处理网卡中断。

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

    绑核脚本内容如下所示:

     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

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