Linux PREEMPT_RT 实时内核图解二
1. Latency / Deadline / Jitter
实时系统中的三个核心概念:
- Latency:一次响应耗时
- Deadline:最晚完成时间
- Jitter:多次响应时间波动
实时系统不仅要求“快”,更要求“稳定且可预测”。
2. Average Latency vs Worst-Case Latency
普通 Linux 平均延迟可能很低,但偶尔会出现 latency spike。
实时系统更关注:
Worst-Case Latency(最坏情况延迟)
因为真正导致 deadline miss 的,往往是偶发尖峰,而不是平均值。
3. Hard / Firm / Soft Real-Time
实时系统通常分为三类:
- Hard RT
错过 deadline 会导致严重后果。
如工业控制、机器人、制动系统。
- Firm RT
错过 deadline 后结果无价值。
如数据采集、工业通信。
- Soft RT
错过 deadline 后体验下降。
如音视频、UI、多媒体。
4. IRQ Disable vs Preempt Disable
Linux 中两种典型“不可抢占”场景:
- local_irq_disable()
禁止中断,硬件事件无法及时处理。
- preempt_disable()
禁止调度抢占,但中断还能进来。
IRQ-off 比 preempt-off 更严重,因为它直接阻断了硬件响应。
5. Page Fault 与后台内核活动
影响实时性的,不只是中断和锁。
Page Fault、kworker、RCU callback、timer tick、logging、CPU migration、ksoftirqd 等后台活动,同样会制造 jitter 与 latency spike。
6. PREEMPT_RT 总体改造
PREEMPT_RT 的核心目标:
降低 worst-case latency,提高系统确定性。
主要改造包括:
- IRQ 线程化
- SoftIRQ 实时化
- Spinlock → RT Mutex
- 优先级继承(PI)
- 减少 IRQ-off / preempt-off 时间
- 提高内核可抢占性
7. 普通 Linux vs PREEMPT_RT
普通 Linux:
- 吞吐优先
- spinlock 忙等
- 不可抢占区更多
- 延迟尖峰明显
PREEMPT_RT:
- 确定性优先
- IRQ Threading
- RT Mutex
- 优先级继承
- 最坏延迟更可控
8. Spinlock → RT Mutex
普通 Linux 中:
spinlock = 忙等 + 禁止抢占。
等锁任务会持续自旋,占用 CPU,并增加 latency/jitter。
PREEMPT_RT 中:
多数 spinlock_t 被替换为 rt_mutex。
等锁任务可以睡眠等待,调度器可以运行其他任务,并支持 Priority Inheritance(PI),从而降低 worst-case latency。