【问题标题】:Are there any kernel tools available to measure interrupt latency with reasonable accuracy?是否有任何内核工具可用于以合理的精度测量中断延迟?
【发布时间】:2013-03-13 10:53:49
【问题描述】:

我正在尝试测量各种Linux 内核(启用 RT 补丁等)的中断延迟中的抖动。我知道最好的方法是使用示波器来执行此操作,通过使用 GPIO 引脚生成中断并在中断服务例程中切换另一个 GPIO 引脚,但我想知道是否有任何 Linux 内核工具可以执行此操作,并且可能是我可以做一个数字的比较。

【问题讨论】:

标签: linux-kernel interrupt interrupt-handling


【解决方案1】:

一种典型的方法是设置一个高精度时钟(例如 CPU 的周期计数器)以在未来某个随机但已知的时间触发中断,并在 ISR 中测量两者之间的时间差。时钟设置为相对于实际到达 ISR 的时间。

(其中的“随机”部分是为了确保您避免在安静或繁忙时间系统地进行测量——例如,您不希望定时器中断与网卡同时触发中断,不公平地推高您的延迟数字。)

Cyclictest 是一个在一定程度上实现这一点的工具,尽管它似乎是在内核线程内而不是 ISR 本身测量时间,这会在一定程度上推高您测量的延迟数字。

【讨论】:

  • 我正在考虑使用信号发生器在 GPIO 上生成中断,以便通过多次生成中断并多次测量 IRQ 时间来获得中断响应时间的抖动。 ARM 皮质的 PMCR 和周期计数寄存器将为我完成。现在日志部分是需要研究的。
  • @Nuetrino 正如davidg 所建议的那样,这样做的问题是您总是同步 到系统时钟。外部来源更好。此外,用户空间代码可能会影响中断延迟。有些指令的执行时间比其他指令长。但实际上,如果您需要这种延迟,硬件可能有问题。 DMA等会更好。参考:U-boot interrupts
【解决方案2】:

使用“cyclictest”实用程序来测量延迟,我已经做过研究,我正在使用 cyclictest 来测量 powerpc 平台上移植的 RT linux 的抖动。
测量延迟的简单而强大的实用程序

【讨论】:

    【解决方案3】:

    另一种方法是将目标板的一个 GPIO 输出连接到另一个 GPIO 输入,将信号拉到 GPIO 输出上并在 GPIO 的 ISR 例程中处理此事件。检查 GPIO 输入 ISR 的上拉信号和触发的时间差。 这是用于 Raspberry 板的开源代码:

    Linux GPIO IRQ latency test

    【讨论】:

      猜你喜欢
      • 2019-07-16
      • 2016-11-27
      • 2011-09-17
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 2017-11-01
      相关资源
      最近更新 更多