Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

diff between IO-APIC-level and PCI-MSI-X [closed]

In /proc/interrupts file I see IO-APIC-level(or edge) and in my other system i see the PCI-MSI-X. The both are with same device etho.
I am not getting diff between these two. Can I change the PCI-MSI-X to IO-APIC ?? Which kernel module or file or conf or proc file, it belongs to ?

Is it safe to distribute the interrupts to all available CPU cores ??

like image 651
JohnG Avatar asked Jun 05 '12 09:06

JohnG


1 Answers

MSI-X interrupts are message-based interrupts, and are the sole method available for PCIe devices to signal interrupts. Instead of asserting a hardware line to signal an interrupt, the device writes a single word to a preconfigured address. That address is either a control register in the CPU, or a register in the PCIe root port which emulates the legacy interrupt system. You're seeing both of those cases.

The BIOS configures the board to send its MSI interrupts to the root port, which emulates INTx interrupts, which get to the CPU via the routing in the APIC. When the OS supports MSI directly, the device driver can reprogram the MSI destination address, so that the interrupt message reaches the CPU interrupt registers directly.

MSI-X is different than MSI simply by supporting multiple interrupt vectors (one for each network port on a dual-port NIC, for example, or one for TX and for RX).

MSI performs better than INTx emulation, since INTx emulation shares its interrupts across devices behind the same PCIe bridge, though this really only matters on devices that generate tons of interrupts, which modern NICs actually don't. Your question should be, "why is one of my systems failing to enable MSI-X interrupts on my network card."

References:

http://lwn.net/Articles/44139/

http://en.wikipedia.org/wiki/Message_Signaled_Interrupts

like image 141
Peter Avatar answered Dec 09 '22 17:12

Peter