“top”是否解释了内核中断?

“top”是否解释了内核中断?

我有一个由 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)。

相关内容