- 我如何估计ARM处理器上的irq延迟?
- irq延迟的定义是什么?
中断请求(irq)延迟是指从中断源到服务点所需的时间。
由于不同的中断来自不同的源通过不同的路径,因此它们的延迟显然取决于中断类型。您可以在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的最小延迟是请求可以被输入寄存器采样的最短时间(一个周期)加上例外入口时间(三个周期)。第一个中断指令在中断被断言后四个周期进入执行管道阶段。
如果单个核心正在处理中断,则通常会有一些解决优先级。但是,在中断处理程序中通常会禁用中断,除非启用优先级中断处理。因此,例如,当慢速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机器周期),那么最坏情况下的代码路径将乘以这个速率。