Linux kernel IO APIC级别与PCI-MSI-X之间的差异

Linux kernel IO APIC级别与PCI-MSI-X之间的差异,linux-kernel,linux-device-driver,Linux Kernel,Linux Device Driver,在/proc/interrupts文件中,我看到了IO APIC级别(或edge),在我的另一个系统中,我看到了PCI-MSI-X。两者都具有相同的设备etho。 我对这两个人没有什么区别。我可以将PCI-MSI-X更改为IO-APIC吗??它属于哪个内核模块或文件或conf或proc文件 将中断分配到所有可用CPU内核是否安全???MSI-X中断是基于消息的中断,是PCIe设备发出中断信号的唯一方法。该设备将一个字写入预先配置的地址,而不是断言一条硬件线来发出中断信号。该地址要么是CPU中的控

/proc/interrupts
文件中,我看到了IO APIC级别(或edge),在我的另一个系统中,我看到了PCI-MSI-X。两者都具有相同的设备etho。
我对这两个人没有什么区别。我可以将PCI-MSI-X更改为IO-APIC吗??它属于哪个内核模块或文件或conf或proc文件


将中断分配到所有可用CPU内核是否安全???MSI-X中断是基于消息的中断,是PCIe设备发出中断信号的唯一方法。该设备将一个字写入预先配置的地址,而不是断言一条硬件线来发出中断信号。该地址要么是CPU中的控制寄存器,要么是模拟传统中断系统的PCIe根端口中的寄存器。这两种情况你都看到了

BIOS配置电路板将其MSI中断发送到根端口,根端口模拟INTx中断,INTx中断通过APIC中的路由到达CPU。当操作系统直接支持MSI时,设备驱动程序可以重新编程MSI目标地址,以便中断消息直接到达CPU中断寄存器

MSI-X与MSI的不同之处在于它支持多个中断向量(例如,双端口NIC上的每个网络端口一个中断向量,或者TX和RX各一个中断向量)

MSI的性能优于INTx仿真,因为INTx仿真在同一PCIe网桥后面的设备之间共享其中断,尽管这实际上只在产生大量中断的设备上起作用,而现代NIC实际上不起作用。您的问题应该是,“为什么我的一个系统无法在我的网卡上启用MSI-X中断。”

参考资料:


请注意,PCIe确实模拟传统中断(规范中称为INTx),以允许向后兼容较旧的驱动程序。但与PCI不同,它们是通过一对PCIe消息事务(Assert_INTx和Deassert_INTx)实现的,而不是运行到中断控制器的物理线路。@Peter我认为MSI只为每个设备提供一个中断,因为设备在配置空间中只使用一个消息数据插槽。这似乎表明了另一种情况:“对于MSI,如PCI 2.2中所定义,u.INTERRUP.MAXIMUMVERATOR-u.INTERRUP.MinimumVector+1是分配给设备的中断消息数。”@LewisKelsey似乎MSI支持多个中断,但都传送到同一地址。通过将中断索引添加到相同的基本数据字来区分中断。相比之下,MSI-X支持每个中断都有一个不同的地址/数据字。@因此,设备使用MSI数据寄存器中的基向量,并根据它是哪个中断向它添加0、1、2等?一定是这样。投票重新开放。这个问题是关于设备驱动程序编程的。