使用MSI-X设备可以设置IRQ亲和性(Linux)吗?

时间:2013-10-11 21:02:28

标签: linux-kernel affinity irq

我通过在proc文件中设置值,在Linux上设置了IRQ亲和性。 [1] 但是,我注意到当我在使用MSI-X的系统上执行此操作时 (PCIe)我想为例如设置亲和力NIC,/ proc /中断计数器递增 对于IRQ的每个核心而不是我设置的单核心。在非 MSI-X系统指定的核心应答中断。

我正在使用Linux内核3.11。

短:可以为使用MSI-X中断的设备设置IRQ亲和性吗?

[1] https://www.kernel.org/doc/Documentation/IRQ-affinity.txt

1 个答案:

答案 0 :(得分:0)

为了使该线程免受负担,我正在尝试为我的SATA控制器设置IRQ(MSI-X)cpu亲和力,以避免cpu切换延迟。 到目前为止,我通过以下方式获得了当前使用的IRQ:

IRQ=$(cat /proc/interrupts | grep ahci | awk -F':' '/ /{gsub(/ /, "", $1); print $1}')

仅通过cat /proc/interrupts查看中断,就表明我的sata控制器处理涉及多个CPU。

然后我通过设置IRQ关联性(在我的情况下为cpu 2)

echo 02 > /proc/irq/$IRQ/smp_affinity

我可以测试有效的亲和力

cat /proc/irq/$IRQ/effective_affinity

经过一段时间的磁盘基准测试后,我注意到相似性保持配置不变。 示例:

在基准测试之前,已将IRQ 134绑定到cpu 2:

 cat /proc/interrupts | egrep "ahci|CPU"
             CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7
  134:   12421581          1          0         17       4166          0          0          0  IR-PCI-MSI 376832-edge      ahci[0000:00:17.0]

基准测试之后:

 cat /proc/interrupts | egrep "ahci|CPU"
            CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7
 134:   12421581    2724836          0         17       4166          0          0          0  IR-PCI-MSI 376832-edge      ahci[0000:00:17.0]

因此,就我而言,我设置的亲和力保持了应有的状态。 我只能想象您有irqbalance作为服务运行。 你检查了吗? 就我而言,运行irqbalance会重新分配亲和力并覆盖我设置的亲和力。

我的测试系统:CentOS 8.2 4.18.0-193.6.3.el8_2.x86_64#1 SMP周三10月10日11:09:32 UTC 2020 x86_64 x86_64 x86_64 GNU / Linux

最后,我没有实现更好的磁盘利用率/性能。我最初的问题是,基准测试不使用100%的磁盘,只是某些值介于75-85%之间(有时不知道为什么是97%)。