5
  • 如何估计 ARM 处理器上的 irq 延迟?
  • irq 延迟的定义是什么?
4

3 回答 3

8
  1. 中断请求 (irq) 延迟是中断请求从中断源传输到将被服务的点所需的时间。

  2. 因为通过不同路径来自不同来源的不同中断,显然它们的延迟取决于中断的类型。您可以在 ARM 站点上找到有关特定中断的延迟(值和原因)的很好解释的表格

您可以在ARM9E-S Core Technical Reference Manual中找到有关它的更多信息:

4.3 最大中断延迟

如果在多周期指令开始其第二个或更晚的执行周期的同时断言采样信号,则在指令完成之前不会开始中断异常进入。

最长的 LDM 指令是加载所有寄存器的指令,包括 PC。

将第一个 Execute 周期计为 1,LDM 需要 16 个周期。

• LDM 传输的最后一个字在周期 17 中传输,在该周期中返回传输的中止状态。

• 如果发生数据中止,处理器会在周期 18 中检测到这一点,并准备在周期 19 中进入数据中止异常。

• 周期20 和21 分别是Data Abort 入口的Fetch 和Decode 阶段。

• 在周期 22 期间,处理器准备 FIQ 进入,在周期 23 和 24 中发出 Fetch 和 Decode 周期。

• 因此,FIQ 例程中的第一条指令在阶段 25 进入流水线的执行阶段,给出 24 个周期的最坏情况延迟

最小中断延迟

FIQ 或 IRQ 的最小延迟是输入寄存器可以对请求进行采样的最短时间(一个周期)加上异常进入时间(三个周期)。第一条中断指令在中断被断言后四个周期进入执行流水线阶段

于 2013-02-05T00:39:34.073 回答
4

中断延迟分为三个部分:

  1. 中断控制器自己接收中断。现代处理器倾向于很快地做到这一点,但是在设备发出它的引脚信号和中断控制器拾取它之间仍然有一段时间——即使它只有 1ns,也是时间[或任何发出中断信号的方法]。
  2. 直到处理器开始执行中断代码本身的时间。
  3. 应该处理中断的实际代码运行之前的时间 - 即在处理器确定哪个中断以及驱动程序代码或类似代码的哪一部分应该处理中断之后。

通常操作系统不会对1产生任何影响。操作系统肯定会影响2。例如,操作系统有时会禁用中断[以避免中断干扰某些关键操作,例如修改要执行的操作使用中断处理,或在调度新任务时,甚至在中断处理程序中执行时。一些操作系统可能会在几毫秒内禁用中断,而一个好的实时操作系统最多不会禁用超过微秒的中断。

当然,从中断处理程序中的第一条指令运行到实际驱动程序代码或类似代码运行所花费的时间可能是相当多的指令,并且操作系统负责所有这些指令。

对于实时行为,重要的是“最坏情况”,在非实时操作系统中,整体执行时间更为重要,因此如果不启用数百条指令的中断会更快,因为它可以节省几个“启用中断,然后禁用中断”的指令,Linux 或 Windows 类型的操作系统可能会选择这样做。

于 2013-02-05T00:50:35.347 回答
3

Mats 和 Nemanja 提供了一些关于中断延迟的好信息。除了Mats 给出的三个问题之外,我还要补充两个问题。

  1. 其他同时/接近同时的中断。
  2. 由于屏蔽中断而增加了操作系统延迟。编辑:这是 Mats 的回答,只是没有解释太多。

如果单个内核正在处理中断,那么当多个中断同时发生时,通常会有一些解析优先级。但是,除非启用优先级中断处理,否则中断通常在中断处理程序中被禁用。例如,一个缓慢的 NAND 闪存 IRQ 发出信号并运行,然后发生以太网中断,它可能会延迟到 NAND 闪存 IRQ 完成。当然,如果您有优先中断并且您担心 NAND 闪存中断,那么如果以太网被优先考虑,情况实际上可能会更糟。

第二个问题是当主线代码清除/设置中断标志时。通常这是通过类似的方式完成的,

mrs   r9, cpsr
biceq r9, r9, #PSR_I_BIT

检查Linux 源代码中的arch/arm/include/asm/irqflags.h以获取主行代码使用的许多宏。一个典型的序列是这样的,

lock interrupts;
manipulate some flag in struct;
unlock interrupts;

如果struct导致页面错误,则可能会引入非常大的中断延迟。中断将在页面错误处理程序的持续时间内被屏蔽。

Cortex-A9 有许多无锁指令,可以通过从不屏蔽中断来防止这种情况;因为汇编指令比swp/swpb. 第二个问题很像ldm/stm类型指令导致的 IRQ 延迟(这些只是运行时间最长的指令)。

最后,很多技术讨论将假设RAM处于零等待状态。很可能需要填充缓存,如果您知道内存数据速率(可能是 2-4 个机器周期),那么最坏情况的代码路径将乘以这个。

是否有 SMP 中断处理、优先级中断和无锁主线取决于你的内核配置和版本;这些是操作系统的问题。其他问题是 CPU/SOC 中断控制器和中断代码本身固有的。

于 2013-02-05T15:30:05.783 回答