什么是操作系统的irq延迟?

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

Solutions Collecting From Web of "什么是操作系统的irq延迟?"

Mats和Nemanja给出了关于中断延迟的一些很好的信息。 还有两个问题是我要补充的,就是Mats给出的三个问题。

  1. 其他同时/接近同时中断。
  2. 由于掩蔽中断而增加了OS延迟。 编辑:这是在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中断控制器和中断代码本身的内在问题。

  1. 中断请求(irq)等待时间是中断请求从中断源传送到将被服务的时间。

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

您可以在ARM9E-S核心技术参考手册中找到更多相关信息:

4.3最大中断延迟

如果采样信号在多周期指令开始第二个或更晚的执行周期的同时被置位,那么在指令完成之前中断异常入口不会启动。

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

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

•在循环17中传送由LDM传送的最后一个字,并在此循环中返回传送的中止状态。

•如果发生数据中止,则处理器在周期18中检测到该事件,并在周期19中准备数据中止异常条目。

周期20和21分别是Data Abort条目的读取和解码阶段。

•在周期22期间,处理器准备进入FIQ,在周期23和周期24发出取指令和解码周期。

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

最小的中断延迟

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

有三个部分中断延迟:

  1. 中断控制器自己拿起中断。 现代处理器往往这样做的速度相当快,但是在器件发信号的引脚和中断控制器采集信号之间还有一段时间 – 即使只有1ns,也是时间(或者信号中断的方法)。
  2. 处理器开始执行中断代码本身的时间。
  3. 直到实际的代码应该处理中断的时间正在运行 – 也就是说,在处理器计算出哪个中断之后,驱动代码或类似的部分应该处理中断之后。

通常情况下,操作系统的影响力不会超过1.操作系统肯定会影响到2.例如,操作系统有时会禁用中断[以避免中断干扰某些关键操作,例如修改要做的事情中断处理或调度新任务,甚至在中断处理程序中执行。 一些操作系统可能禁止几毫秒的中断,一个好的实时操作系统最多不会有中断被禁用超过几微秒。

当然,从中断处理程序中的第一条指令开始运行所需的时间,直到实际的驱动程序代码或类似的代码运行,可能只是几个指令,而操作系统则负责所有这些。

对于实时行为,通常情况下,“最糟糕的情况”非常重要,在非实时操作系统中,总体执行时间更重要,因此如果不能为几百条指令启用中断,则会更快“启用中断,然后禁用中断”的指令,Linux或Windows类型的操作系统可能会选择这样做。