CPU负载抑制了Linux上的中断

我有一个带有3.2内核的Ubuntu盒子,2核CPU和基于通过PCI总线连接的SJA1000控制器的CAN(控制器区域networking)卡。

我正在testing卡的接收function。 它可以处理大约每秒4000个数据包,相应的中断也会每秒提高〜4000次(如/ proc / interrupts所示),并且不会对系统造成任何CPU负载。 但是,如果我用压力命令生成人造CPU负载:

chrt --idle 0 stress -c 2 

中断不再产生,因此不会收到消息。

为什么CPU负载禁止硬件中断,可以做些什么呢?

我怀疑发生了什么事情是CPU负载阻断中断正在由CPU服务。

使用它看看到底发生了什么。 这个输出将有助于进一步了解您的问题。

可能有一些BIOS设置是可调整的,但更多的信息将是必要的,以确定哪些设置将具有最显着的影响。

需要中断来退出在这个答案中引用的HLT状态似乎很有趣,可能有关? 基于压力工作负载的性质,并且如果在系统上启用超线程 ,那么添加了超线程的某些“虚拟”CPU可以被想象地置于HLT状态,直到压力水平降低,并且可能硬件可以select忽略在这些CPU上运行的进程的中断。

BIOS和OS内核中的低级硬件configuration可能会对性能的许多不同方面产生巨大的影响。 validation您的系统configuration正确处理任何types的附加卡(graphics,通信等)可以是一个重大的挑战。 有关物理硬件和内核设置以及诸如服务器/系统事件日志(SEL)或传感器数据logging(SDR)等任何其他日志的更多细节将有助于进一步诊断这样的低级硬件问题。

SEL和SDR可在大多数现代服务器上使用,并且可以使用ipmitool或各种其他开源和专有/供应商提供的工具进行带内和带外服务器pipe理。