消息信号中断 (MSI) 是一项可选功能,使 PCI 设备能够通过将系统指定的消息写入系统指定的地址(PCI DWORD 内存写入事务)来请求服务。事务地址指定消息目的地,而事务数据指定消息。系统软件应在设备配置期间初始化消息目的地和消息,将一个或多个非共享消息分配给每个支持 MSI 的功能。
MSI中断可以路由到多个CPU吗?
例如:
echo F > /proc/irq/msi_irq/smp_affinity
我的看法:
MSI 中断可以路由到多个 cpu。当CPU收到中断消息时,使用目标信息将中断路由到多个CPU。
MSI 中断无法路由到多个 cpu。 MSI中断消息只能写入LAPIC,因此只能触发一个CPU的中断。
但是,哪种意见是正确的?
是的,MSI 可以分派到多个逻辑 CPU。
Intel SDM vol 3 的第 10.11 章(高级可编程中断控制器/消息信号中断)描述了 MSI 的地址目标的格式:
RH
(重定向提示)和 DM
(目标模式)字段更改 Destination ID
字段的含义:
• 当 RH 为 0 时,中断将定向到目标 ID 字段中列出的处理器。
• 当RH 为1 且使用物理目的地模式时,目的地ID 字段不得设置为FFH; 它必须指向存在并启用以接收中断的处理器。
• 当 RH 为 1 并且逻辑目标模式在使用平面寻址模型的系统中处于活动状态时,必须设置目标 ID 字段,以便设置为 1 的位可识别存在并启用的处理器。 接收中断。 • 如果 RH 设置为 1 并且逻辑目标模式在使用集群寻址模型的系统中处于活动状态, 那么 Destination ID 字段不得设置为 FFH;
用此字段标识的处理器必须是 存在并启用以接收中断。
msi_irq
中的
/proc/irq/msi_irq/smp_affinity
指的是使用 MSI 的 IRQ 编号,那么是的,将该伪文件设置为
f
会将所述 IRQ 限制为所选的四个逻辑 CPU。事实上,就中断调度而言,只有使用传统 PIC 的中断不能具有关联性。 IO-APIC 中断和 MSI 始终可以针对一组处理器。