操作系统引起的中断响应延迟是什么?

5
  • 我如何估计ARM处理器上的irq延迟?
  • irq延迟的定义是什么?
3个回答

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

  2. 由于不同的中断来自不同的源通过不同的路径,因此它们的延迟显然取决于中断类型。您可以在ARM网站上找到一张非常好的解释特定中断延迟(包括值和原因)的表格。

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

4.3 最大中断延迟

如果采样信号与多周期指令开始其第二个或之后的执行周期同时被断言,则中断例外入口直到指令完成才会启动。

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

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

• LDM传输的最后一个字在第17个周期传输,并且传输的异常状态在此周期返回。

• 如果发生数据异常,则处理器在第18个周期检测到此异常,并在第19个周期准备进行数据异常例外入口。

• 第20和21个周期是数据异常入口的获取和解码阶段。

• 在第22个周期期间,处理器为FIQ入口做准备,在第23和24个周期中发出获取和解码周期。

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

最小中断延迟

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


你好,你知道4.3版本在ARM Cortex-A9架构(即Armv7-A架构)上会有哪些变化吗?我在Cortex架构的任何TRM中都没有找到相关信息。 - Nuetrino

4
中断延迟有三个部分:
  1. 中断控制器接收中断信号的时间。现代处理器通常很快地完成此操作,但即使只有1纳秒的时间差,也需要一定的时间 [或者其他中断信号的传递方式]。
  2. 处理器开始执行中断代码本身的时间。
  3. 实际处理中断的代码运行的时间。也就是说,处理器已经确定了哪个中断,并且应该由驱动程序代码或类似的东西来处理中断之后。
通常情况下,操作系统对第1点没有任何影响。 操作系统肯定会影响第2点。例如,操作系统有时会禁用中断[以避免中断干扰某些关键操作,例如修改与中断处理相关的内容,或在调度新任务时,甚至在执行中断处理程序时。某些操作系统可能会禁用中断数毫秒,而良好的实时操作系统最多不会禁用中断超过几微秒。
当然,从中断处理程序的第一条指令运行到实际的驱动程序代码运行可能需要相当多的指令,而操作系统对所有这些指令都负责。
对于实时行为,通常情况下“最坏情况”最重要,在非实时操作系统中,总体执行时间更为重要,因此,如果禁用中断几百条指令可以更快地完成操作,因为这样可以节省“启用中断,然后禁用中断”的几条指令,那么类似Linux或Windows的操作系统可能会选择这样做。

+1 是关于操作系统延迟的具体信息。 - artless noise

3
Mats和Nemanja在中断延迟方面提供了一些有用的信息。除了Mats提供的三个问题外,我还想补充一个问题。
  1. 其他同时/接近同时的中断。
  2. 由于掩盖中断而添加的操作系统延迟。 编辑:这在Mats的答案中已经包含,只是没有详细解释。

如果单个核心正在处理中断,则通常会有一些解决优先级。但是,在中断处理程序中通常会禁用中断,除非启用优先级中断处理。因此,例如,当慢速NAND闪存IRQ被信号化并运行时,然后发生Ethernet中断,它可能会延迟到NAND闪存IRQ完成。当然,如果您拥有优先级中断并且担心NAND闪存中断,则情况可能会更糟,如果Ethernet被赋予优先级。

第二个问题是主线代码清除/设置中断标志。通常使用类似以下内容的内容来完成此操作:

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中断控制器本身以及中断代码本身有关。请参见interrupt code itself

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接