- 我怎么能估计在ARM处理器上的IRQ延迟?
- 什么是IRQ延迟的定义是什么?
Answer 1:
垫和维迪奇给出一些好的信息中断延迟 。 有两个是多了一个问题,我想补充,通过垫给三个。
- 其他同时/几乎同时中断。
- OS延迟加到由于掩蔽中断。 编辑:这是在垫的答案,只是没有那么多解释。
如果单个核心正在处理的中断,那么当发生多个中断时,在相同的时间,通常有一定的分辨率优先。 然而,中断常在中断处理程序,除非优先级的中断处理启用禁用。 因此,例如,一个缓慢的NAND闪存IRQ被发信号并运行,然后发生以太网中断时,它可能被延迟,直到NAND闪存IRQ完成。 当然,如果你有先决中断和你所关心的NAND闪存中断,那么事情可能实际上是糟糕的是,如果以太网为主。
第二个问题是,当主线代码清除/设置中断标志。 通常,这东西做这样,
mrs r9, cpsr
biceq r9, r9, #PSR_I_BIT
检查弓/ ARM /包括/ ASM / irqflags.h在Linux源通过主线代码中使用的宏。 甲典型序列是这样的,
lock interrupts;
manipulate some flag in struct;
unlock interrupts;
一个非常大的中断延迟时间可如果引入struct
在页面错误的结果。 该中断将被屏蔽的页面错误处理程序的时间。
在Cortex-A9有大量的无锁可以通过防止这种指令从未屏蔽中断 ; 因为优于汇编指令swp/swpb
。 这第二个问题是很像IRQ延迟是由于LDM / STM类型指令(这些只是运行时间最长的说明)。
最后,大量的技术讨论会假设零等待状态 RAM。 它是可能的缓存将需要填补,如果你知道你的存储数据速率(也许2-4个机器周期),那么最坏情况下的代码路径将通过此繁殖。
无论你是否有SMP中断处理,优先级的中断,并锁定免费主线取决于你的内核配置和版本; 这些都为操作系统的问题。 其他问题是内在的CPU / SOC中断控制器,并以中断代码本身 。
Answer 2:
中断请求(IRQ)延迟是需要对中断请求从中断的源行进到点时,它会被服务的时间。
因为有经由不同的路径从不同来源的不同的中断,很明显其等待时间取决于中断的类型。 你可以找到表有关的延迟非常好的解释(价值和原因)的特定中断在ARM网站
你可以找到关于它的更多信息, ARM9E-S核心技术参考手册 :
4.3最大的中断延迟
如果作为一个多周期指令已开始执行第二次或以后周期采样信号的同时断言,中断例外条目不开始直到指令完成。
最长的LDM指令是一个加载所有的寄存器,包括PC的。
计数所述第一执行周期为1,则LDM需要16个周期。
•最后一个字由LDM转移在周期17被转移,在这个周期返回转让中止状态。
•如果数据中止发生时,处理器检测该循环18,并准备在周期19中的数据中止进入异常。
•周期20和21分别是数据中止条目的取得和解码阶段。
•在周期22中,处理器准备FIQ条目,发出抓取并在周期23和24解码周期。
•因此,在常规FIQ第一指令进入在阶段25中的流水线的执行阶段, 得到的24个循环最坏情况延迟 。
和
最小的中断延迟
用于FIQ或IRQ的最小等待时间是请求可以被输入寄存器(一个循环),加上异常入口时间(三个循环)进行采样的最短时间。 第一中断指令进入中断被断言四个周期后的执行流水线级
Answer 3:
有三个部分中断延迟:
- 中断控制器拿起中断本身。 现代处理器往往会很快做到这一点,但仍然有设备的信号是引脚和中断控制器采摘它的某个时候 - 即使它只是为1ns,它的时间[或任何信号中断的方法是。
- 的时间,直到处理器开始执行中断代码本身。
- 的时间,直到实际的代码应该处理中断运行 - 也就是说,该处理器已经想通了哪些中断后,什么的驱动程序代码部分或类似的应该处理的中断。
通常,操作系统将不具有超过1的操作系统肯定影响。例如,操作系统有时会禁止中断任何影响[以避免中断与一些关键的操作的干扰,例如修改事做与中断处理,或在中断处理程序安排新任务时,甚至在执行的时候。 有的操作系统可能为几毫秒,其中一个良好的实时操作系统将不会中断超过微秒以上在禁止最禁止中断。
当然,它在中断处理程序的第一条指令所花费的时间运行,直至实际驱动程序代码或类似的运行可以说是相当的几个指令,而操作系统负责所有的人。
对于实时的行为,它往往是重要的,凡在非实时操作系统的,整体的执行时间是更重要的“最坏情况”,所以如果它的速度更快不启用中断几百指令,因为它节省了几个“允许中断,则禁止中断”的指示,在Linux或Windows类型的操作系统可能选择这样做。