调度延迟
调度延迟衡量了从外部事件或中断到相关任务开始执行所经过的时间。通常,这意味着例如定时器中断和执行某些周期性任务之间的延迟。调度延迟通常是评估系统实时性能时最重要的值。基本上,它将所有的延迟来源组合成一个易于分析、测量和比较的单一变量。
然而,为了进行更详细的分析,通常需要单独研究调度延迟的不同部分。这些单独的元素可见调度延迟组成。延迟的其中一个原因基本发生在硬件层的中断之后。通常,由硬件引起的实际延迟非常小,只有几个时钟周期,但在这个阶段,如果系统中断被完全禁用,可能会经历额外的延迟。这有时会延长更多时间,并且取决于当前正在执行的软件。造成延迟的另一个原因是即时中断处理例程。通常这部分可能包含一些额外的操作系统逻辑,但一般来说,它在实时系统中保持的时间非常短。在处理了中断之后,调度程序可以决定下一个执行的任务。在大多数时候,调度程序本身都非常快,但现在,以前运行的软件可能会导致额外的延迟。如果禁用了抢占,则先前执行的程序此时将恢复并执行,直到再次启用抢占为止。最后,在这些步骤之后,调度器可以通过执行上下文切换来调度与中断对应的任务。

对于延迟的这些不同部分,可以看出,除了被禁用的中断和抢占延迟之外,其他部分总是相当恒定和可预测的。因此,这两个延迟的原因是重要的,因为它们依赖于当前执行的程序,这意味着延迟可能会延长很长一段时间。在Linux内核中优化和最小化调度延迟的这两部分是PREEMPT_RT补丁最重要的目标。