1. 课程导论:实时系统定义、硬实时与软实时区别、抢占模型的重要性
1.1 实时系统的核心定义
实时系统(Real-Time System)并非指“运行速度快的系统”,而是指其计算的正确性不仅取决于逻辑结果,还取决于结果产生的时间。在实时系统中,任务必须在规定的截止时间(Deadline)之前完成,否则系统将视为失效。
实时系统的核心特征可以归纳为以下三点:
- 时间确定性(Determinism):系统对外部事件的响应时间必须是可预测的,具有确定的上界(Worst-Case Execution Time, WCET)。
- 并发处理能力:能够同时管理多个具有不同时间约束的任务。
- 优先级驱动调度:系统调度器必须能够根据任务的紧急程度进行抢占式调度。
常见误区澄清:Linux 默认内核虽然吞吐量高,但中断关闭和自旋锁持有时间过长,会导致不可预测的延迟抖动(Jitter)。这正是引入 PREEMPT_RT 和低延迟配置的根本原因。
1.2 硬实时与软实时的本质区别
根据错过截止时间后系统后果的严重程度,实时系统被划分为硬实时(Hard Real-Time)和软实时(Soft Real-Time)两大类。理解这一区别是选择抢占模型的前提。
| 对比维度 | 硬实时(Hard RT) | 软实时(Soft RT) |
|---|---|---|
| 截止时间后果 | 错过即系统失效,可能导致灾难 | 性能下降,但系统仍可运行 |
| 典型应用 | 飞行控制、汽车引擎 ECU、医疗起搏器 | 音视频播放、网络游戏、工业监控 |
| 调度策略要求 | 完全可抢占、优先级严格继承 | 尽力而为、允许少量延迟抖动 |
| 内核配置倾向 | PREEMPT_RT 全抢占 | 低延迟配置(如 PREEMPT_LL) |
| 最大允许抖动 | 微秒级(< 10 µs) | 毫秒级(< 10 ms) |
关键决策点:如果你的系统需要控制机械臂在 1ms 内响应传感器中断,这是硬实时场景,必须使用 PREEMPT_RT。如果只是需要流畅播放 4K 视频,软实时配置即可满足需求。
1.3 抢占模型的重要性
抢占模型(Preemption Model)决定了 Linux 内核在何种时机、何种粒度下允许高优先级任务打断低优先级任务的执行。它直接决定了系统的实时响应能力和吞吐量之间的平衡。
Linux 内核的抢占模型经历了以下演进阶段:
- 非抢占内核(PREEMPT_NONE):适用于服务器场景,追求最大吞吐量,任务只能在内核态主动让出 CPU 时才能被切换。
- 自愿内核抢占(PREEMPT_VOLUNTARY):在内核代码中显式添加抢占点,降低调度延迟,适用于桌面系统。
- 低延迟抢占(PREEMPT_LL / PREEMPT):允许在大多数内核代码中抢占,但仍有少数临界区不可抢占。
- 完全实时抢占(PREEMPT_RT):通过替换自旋锁为可抢占锁、中断线程化等技术,实现几乎全部内核代码的可抢占性。
1.4 抢占模型对系统性能的影响
选择不同的抢占模型,本质上是在实时响应能力与系统吞吐量之间做权衡。以下是一个典型的性能对比数据:
| 抢占模型 | 最大调度延迟 | 中断响应延迟 | 吞吐量损失 | 适用场景 |
|---|---|---|---|---|
| PREEMPT_NONE | 10 ~ 100 ms | 5 ~ 50 ms | 0%(基准) | Web 服务器、批处理 |
| PREEMPT_VOLUNTARY | 1 ~ 10 ms | 1 ~ 5 ms | 1% ~ 3% | 桌面系统、轻量服务 |
| PREEMPT_LL | 100 µs ~ 1 ms | 100 µs ~ 1 ms | 3% ~ 8% | 音视频、游戏 |
| PREEMPT_RT | < 10 µs | < 5 µs | 5% ~ 15% | 工业控制、自动驾驶 |
工程警告:不要盲目追求 PREEMPT_RT。如果你的应用场景是数据库或文件服务器,开启 PREEMPT_RT 反而会因为频繁的上下文切换导致吞吐量下降 10% 以上。务必根据实际业务的时间约束来选择。
1.5 本课程的学习路径
本课程将围绕以下主线展开:
- 第 2-5 章:深入剖析 PREEMPT_RT 的核心机制(中断线程化、可抢占锁、RCU 增强)。
- 第 6-8 章:低延迟配置(PREEMPT_LL、线程 IRQ、NO_HZ)的原理与调优。
- 第 9-12 章:实战对比——在相同硬件上部署两种模型,测量调度延迟、中断响应和吞吐量。
- 第 13-15 章:选型决策树与行业案例(航空航天、工业机器人、自动驾驶)。
通过本课程,你将掌握如何根据业务的时间约束、硬件平台和性能要求,做出正确的抢占模型选型决策。