IRQ亲和性设置
IRQ亲和性是指处理器收到中断信号后,由哪些CPU核来优先处理。为了提升网络应用的扩展性和降低时延,建议将IRQs分散在可用的CPU核上。
Linux系统自带负载均衡服务irqbalance,该服务能根据当前CPU使用情况自动将IRQs分散到各个CPU核上执行。由于系统运行的复杂性,这种自动选择方式在CPU资源不足时往往不能够做到最优,有时候会出现IRQ和应用程序争抢同一个CPU核的情况,这时需要进行人工手动设置,这种手动设置的方法俗称“中断绑核”。
中断绑核的步骤如下图所示:
对应的命令如下:
以设备eth0为例介绍中断绑核的步骤:
- 使用以下命令关闭irqbalance服务。
为确保irqbalance服务已关闭,可使用下命令检查irqbalance服务状态:
systemctl status irqbalance
- 获取设备IRQ号。
[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号收发队列中断。
- 检查IRQ号亲核性。
以2中获取的设备IRQ号177为例:
[huawei@localhost ~]# cat /proc/irq/177/smp_affinity_list 0
从检查结果中可以看出,177中断号当前绑定在CPU0上。
- 调整IRQ号亲核性。
选择哪个CPU核调整IRQ号亲核性非常关键。所以在调整前需确认当前设备对应的NUMA节点,并通过NUMA节点查找对应的CPU核。
- 使用以下命令获取网卡设备对应的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节点下。
- 使用以下命令查询NUMA节点对应的CPU核。
- 将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
- 使用以下命令获取网卡设备对应的NUMA节点。
父主题: 通用调优方法