linux-kernel - 可以使用 MSI-X 设备设置 IRQ 关联(Linux)吗?

标签 linux-kernel affinity irq

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

我正在使用 Linux 内核 3.11。

简短:可以为使用 MSI-X 中断的设备设置 IRQ 关联吗?

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

最佳答案

Unburrying 这个线程,我正在尝试为我的 SATA Controller 设置 IRQ (MSI-X) cpu 亲和性,以避免 cpu 切换延迟。
到目前为止,我通过以下方式获得了当前使用的 IRQ:

IRQ=$(cat /proc/interrupts | grep ahci | awk -F':' '/ /{gsub(/ /, "", $1); print $1}')
只需通过 cat /proc/interrupts 查看中断表明我的 sata Controller 处理涉及多个 CPU。
然后我通过
echo 02 > /proc/irq/$IRQ/smp_affinity
我可以测试有效的亲和力
cat /proc/irq/$IRQ/effective_affinity
在进行了一段时间的磁盘基准测试后,我注意到亲和力保持配置不变。
例子:
在基准测试之前,将 IRQ 134 绑定(bind)到 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 Wed Jun 10 11:09:32 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
最后,我没有获得更好的磁盘利用率/性能。我最初的问题是 fio 基准测试不使用 100% 磁盘,仅使用 75-85% 之间的一些值(有时是 97%,我不知道为什么)。

关于linux-kernel - 可以使用 MSI-X 设备设置 IRQ 关联(Linux)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19327199/

相关文章:

linux-kernel - 可以延迟加载导出的符号吗?

c - 符号的使用 | & &~ 和 ~ 在 capability.h 文件中

linux - 如何只允许(少数)特定进程/线程在 Linux 的核心上运行

arm64 - aarch64在EL3中执行来自EL1的IRQ

linux - Windows 中的 AF_UNIX

linux - 在 linux 编译中错过 asm/types.h

c - 实时C编程vicInstallHandler需要帮助才能理解

c++ - Pthread 卡住标准输出?

linux - 如何分配 IRQS