做Mellanox网卡实验时遇到了一个奇怪的现象。注意,我在实验中关闭了超线程,以下的讨论均为CPU真核。
在关闭irqbalance的情况下,我注意到设置/proc/irq/irq_num/smp_affinity或smp_affinity_list(两者等价)之后,实际上中断仍然只由smp_affinity_list中的第一个CPU处理。查找官方文档,在Mellanox的《What is IRQ Affinity》发现他们正是这么实现的。
开启irqbalance之后,smp_affinity将自动设置。我们实验室的机器有两个CPU,分别在两个NUMA node上。可以看到多队列网卡的每个中断都由和网卡在同一个NUMA结点的CPU的core处理。这其实很重要,如果中断在不同NUMA结点的CPU core处理,性能将大幅下降,我将在其他文章中描述这一现象,这里不展开了。
在关闭irqbalance的情况下,我注意到设置/proc/irq/irq_num/smp_affinity或smp_affinity_list(两者等价)之后,实际上中断仍然只由smp_affinity_list中的第一个CPU处理。查找官方文档,在Mellanox的《What is IRQ Affinity》发现他们正是这么实现的。
开启irqbalance之后,smp_affinity将自动设置。我们实验室的机器有两个CPU,分别在两个NUMA node上。可以看到多队列网卡的每个中断都由和网卡在同一个NUMA结点的CPU的core处理。这其实很重要,如果中断在不同NUMA结点的CPU core处理,性能将大幅下降,我将在其他文章中描述这一现象,这里不展开了。