CPU 负载抑制 Linux 上的中断

CPU 负载抑制 Linux 上的中断

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

我正在测试该卡的接收能力。它每秒可以处理约 4000 个数据包,相应的中断也每秒发出约 4000 次(如 /proc/interrupts 所示),并且不会对系统造成任何 CPU 负载。但是,如果我使用 stress 命令生成人为的 CPU 负载:

chrt --idle 0 stress -c 2

中断不再发生,因此不会收到任何消息。

为什么 CPU 负载会抑制硬件中断以及如何解决此问题?

答案1

我怀疑发生的情况是 CPU 负载阻碍了 CPU 正在处理的中断。

使用伊托普看看到底发生了什么。此输出将有助于进一步了解您的问题。

答案2

可能有一些 BIOS 设置是可调整的,但需要更多信息才能确定哪些设置会产生最重大的影响。

退出 HLT 状态需要中断这个答案中提到的似乎很有趣,可能相关?根据压力工作量的性质,如果超线程已启用在系统上,一些添加了超线程的“虚拟”CPU 可能会进入某种HLT状态,直到压力水平降低,并且硬件可能会选择忽略在这些 CPU 上运行的进程的中断。

BIOS 和操作系统内核中的低级硬件配置会对性能的许多不同方面产生巨大影响。验证您的系统是否配置为正确处理任何类型的附加卡(图形、通信等)可能是一项重大挑战。有关物理硬件和内核设置的更多详细信息以及任何其他日志(如服务器/系统事件日志 (SEL) 或传感器数据记录 (SDR))将有助于进一步诊断此类低级硬件问题。

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

相关内容