编辑
2025-03-03
记录知识
0
请注意,本文编写于 116 天前,最后修改于 59 天前,其中某些信息可能已经过时。

目录

一:中断的affinity
二:实践绑核
2.1 查看硬中断号
2.2 smpaffinitylist设置
2.3 smp_affinity 设置
2.4 测试

在网络负载非常重的情况下,对于文件服务器、高流量Web服务器这样的应用来说,把不同的网卡IRQ均衡地绑定到不同的CPU核心上,将会减轻单个CPU的负担,提高多CPU、多核心的整体处理中断的能力。对于数据库服务器这样的应用来说,把磁盘控制器绑到一个CPU核心,把网卡绑定到另一个CPU核心上,将会提高数据库的响应时间,达到优化性能的目的。合理地根据自己的生产环境和应用的特点来平衡IRQ中断有助于提高系统的整体吞吐能力和性能。这里介绍一下网络设备的绑核操作。

一:中断的affinity

在proc文件系统中,为中断提供了smp_affinity和smp_affinity_list接口,允许给指定的IRQ源绑定目标的CPU,而在/proc/irq/default_smp_affinity中,通过掩码的方式指定了IRQ的默认配置掩码。一般是ff,也就是所有CPU(0-15)。主要示例如下:

# cat /proc/irq/default_smp_affinity ff # cat /proc/irq/1/smp_affinity ff # cat /proc/irq/1/smp_affinity_list 0-7

二:实践绑核

2.1 查看硬中断号

# cat /proc/interrupts | grep eth1 110: 69925 0 0 0 0 0 0 14520 GICv3 259 Level eth1 111: 0 0 0 0 0 0 0 0 GICv3 258 Level eth1

2.2 smp_affinity_list设置

echo 7 > /proc/irq/110/smp_affinity_list echo 7 > /proc/irq/111/smp_affinity_list

这里意思为将110和111中断绑定在CPU序号为7上

2.3 smp_affinity 设置

如smp_affinity_list已经设置,则smp_affinity 可无需设置

smp_affinity 按照CPU掩码计算,如下

cpu0 0001 0 1 cpu1 0010 1 2 cpu2 0100 2 4 cpu3 1000 3 8 cpu4 10000 4 10. cpu5 100000 5 40 cpu6 1000000 6 80 cpu7 10000000 7 100

如果绑定为第8个CPU,则设置

echo 100 > /proc/irq/110/smp_affinity echo 100 > /proc/irq/111/smp_affinity

2.4 测试

ping 测试

$ ping -I eth1 0.0.0.0 PING 0.0.0.0 (172.25.80.124) from 172.25.80.124 eth1: 56(84) bytes of data. 64 bytes from 172.25.80.124: icmp_seq=1 ttl=64 time=0.064 ms 64 bytes from 172.25.80.124: icmp_seq=2 ttl=64 time=0.035 ms

查看中断

# cat /proc/interrupts | grep eth1 110: 69925 0 0 0 0 0 0 17112 GICv3 259 Level eth1 111: 0 0 0 0 0 0 0 0 GICv3 258 Level eth1

这里确定已经绑定成功了