I have an Ubuntu box with 3.2 kernel, CPU with 2 cores and CAN (Controller Area Network) card based on SJA1000 controller attached via PCI bus.
I'm testing receive capabilities of the card. It can handle about ~4000 packets per second, the corresponding interrupt is also raised ~4000 times per second (as /proc/interrupts shows) and it does not cause any CPU load on the system. However, if I generate artificial CPU load with stress command:
chrt --idle 0 stress -c 2
the interrupts are no longer raised and therefore no messages are received.
Why CPU load inhibits hardware interrupts and what can be done about it?