我有一个由 GPIO 输入触发的简单中断。 IRQ 仅递增一个变量并返回。当我将中断频率调至 10-20 kHz 左右时,系统变得无响应。我在调高频率的同时测量了 CPU 负载top
,但该命令的任何指标都没有显着变化top
。
因此处理器 CPU 已加载,但我无法用top
!
top
其测量情况如何?为什么非常频繁的中断不可见?
如何衡量中断对系统整体性能的影响?
编辑
通过将 CPU 频率调节器设置为“性能”,并将频率设置为静态 1GHz,我能够在处理器崩溃之前将中断频率提高到 150kHz。
答案1
“top”是否考虑了内核中断?
这取决于你的内核。如果IRQ_TIME_ACCOUNTING
未启用,则处理中断所花费的时间可能不会被计算在内。
config IRQ_TIME_ACCOUNTING
bool "Fine granularity task level IRQ time accounting"
depends on HAVE_IRQ_TIME_ACCOUNTING && !VIRT_CPU_ACCOUNTING_NATIVE
help
Select this option to enable fine granularity task irq time
accounting. This is done by reading a timestamp on each
transitions between softirq and hardirq state, so there can be a
small performance impact.
您可以尝试在内核配置文件中搜索。在许多系统上,可以从 读取内核配置/boot/config-*
。
在原始补丁系列中对此有更多解释:正确的内核 irq 时间统计 -v4。
详细信息取决于您的 CPU 架构。例如,在缺乏 TSC 的古老 x86 CPU 上,永远不会启用此功能。而有些 Linux 架构根本不实现HAVE_IRQ_TIME_ACCOUNTING
.
一些 Linux 体系结构提供了此功能作为 VIRTUAL_CPU_ACCOUNTING_NATIVE
替代的一部分。目前这些架构是 S390、IA64 和 PowerPC。我的猜测是您没有使用其中任何一个(部分基于您对“GPIO”的使用:-P)。