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

IRQ亲和性设置

IRQ亲和性是指处理器收到中断信号后,由哪些CPU核来优先处理。为了提升网络应用的扩展性和降低时延,建议将IRQs分散在可用的CPU核上。

Linux系统自带负载均衡服务irqbalance,该服务能根据当前CPU使用情况自动将IRQs分散到各个CPU核上执行。由于系统运行的复杂性,这种自动选择方式在CPU资源不足时往往不能够做到最优,有时候会出现IRQ和应用程序争抢同一个CPU核的情况,这时需要进行人工手动设置,这种手动设置的方法俗称“中断绑核”。

中断绑核的步骤如下图所示:

对应的命令如下:

  • 关闭irqbalance服务

    service irqbalance stop

  • 获取设备IRQ(中断)号

    cat /proc/interrupts | grep <device name>

  • 检查IRQ号亲核性

    cat /proc/irq/<irq vector>/smp_affinity_list

    irq vector:网卡设备中断号。

  • 调整IRQ号亲核性

    echo <cpuNo> > /proc/irq/<irq vector>/smp_affinity_list

    cpuNo:CPU核编号,从0开始。

以设备eth0为例介绍中断绑核的步骤:

  1. 使用以下命令关闭irqbalance服务。

    service irqbalance stop

    为确保irqbalance服务已关闭,可使用下命令检查irqbalance服务状态:

    systemctl status irqbalance

  2. 获取设备IRQ号。

    以鲲鹏模组集成网卡设备hns3为例:

    [huawei@localhost ~]# cat /proc/interrupts | grep hns3
     54: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 ITS-MSI 65536001 Edge hns3-0000:7d:00.0-TxRx-0
     55: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ITS-MSI 65536002 Edge hns3-0000:7d:00.0-TxRx-2
     56: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 ITS-MSI 65536003 Edge hns3-0000:7d:00.0-TxRx-4
     57: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 ITS-MSI 65536004 Edge hns3-0000:7d:00.0-TxRx-6
     58: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

    从以上回显信息中可以看出,行的起始如54、55、56和57为设备hns3对应的中断号;行的末尾描述一般表示该中断的含义,比如hns3-0000:7d:00.0-TxRx-0表示hns3设备0号收发队列中断。

  3. 检查IRQ号亲核性。

    2中获取的设备IRQ号177为例:

    [huawei@localhost ~]# cat /proc/irq/177/smp_affinity_list
    0

    从检查结果中可以看出,177中断号当前绑定在CPU0上。

  4. 调整IRQ号亲核性。

    选择哪个CPU核调整IRQ号亲核性非常关键。所以在调整前需确认当前设备对应的NUMA节点,并通过NUMA节点查找对应的CPU核。

    1. 使用以下命令获取网卡设备对应的NUMA节点。

      cat /sys/class/net/<device name>/device/numa_node

      以鲲鹏模组集成网卡设备eth0为例,获取改设备对应的NUMA节点方法如下:

      [huawei@localhost ~]# cat /sys/class/net/eth0/device/numa_node
      0

      从检查结果中可以看出,网卡设备eth0在NUMA0节点下。

    2. 使用以下命令查询NUMA节点对应的CPU核。
      numactl -H
      [huawei@localhost ~]# numactl -H
      available: 1 nodes (0)
      node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
      node 0 size: 127258 MB
      node 0 free: 125967 MB
      node distances:
      node   0
        0:  10
    3. 2中获取的设备IRQ号绑定在某一个空闲的CPU核中。
      4.b中获取的CPU15为例:
      [huawei@localhost ~]# echo 15 > /proc/irq/177/smp_affinity_list
      [huawei@localhost ~]# cat /proc/irq/177/smp_affinity_list
      15