---
title: IRQ亲核性设置
description: "IRQ亲核性是指处理器收到中断信号后，由哪些CPU核来优先处理。为了提升网络应用的扩展性和降低时延，建议将IRQs分散在可用的CPU核上。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengmodule/S920S08/usermanual/S920S08_06_0035.html
sourcePath: /source/zh/kunpengmodule/S920S08/usermanual/S920S08_06_0035.html
indexId: 604584f5f379efdc185a1f944cb7510470ab811902eb37acad628a0effe576f564
---
# 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核。

  a. 使用以下命令获取网卡设备对应的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节点下。

  b. 使用以下命令查询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
```


  c. 将    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
```
