1. 课程导论:什么是调度延迟?为什么 HZ 配置和调度粒度对实时性至关重要?

在实时操作系统(RTOS)与 Linux 实时内核(PREEMPT_RT)的设计中,调度延迟是衡量系统响应能力最核心的指标之一。它直接决定了任务能否在规定的截止时间前完成执行。本章将建立调度延迟的量化模型,并揭示 HZ 配置与调度粒度如何从根本上影响实时性。

1.1 调度延迟的定义与组成

调度延迟(Scheduling Latency)是指从事件触发(如硬件中断、定时器到期)到目标任务开始执行之间的时间间隔。它由三个不可分割的阶段组成:

阶段 英文术语 描述 典型耗时(μs)
中断延迟 Interrupt Latency 从硬件中断信号到达 CPU 到中断服务程序(ISR)开始执行 1–10
调度器延迟 Scheduler Latency 从 ISR 结束到调度器选择下一个任务并完成上下文切换 5–50
抢占延迟 Preemption Latency 高优先级任务就绪后,等待当前低优先级任务到达可抢占点的时间 10–1000+
关键公式:
调度延迟 = 中断延迟 + 调度器延迟 + 抢占延迟

在非实时内核中,抢占延迟往往占据主导地位,其上限由内核的最大关中断时间和不可抢占区间决定。

1.2 调度延迟的量化模型

为了直观理解调度延迟的累积效应,下面给出一个典型的实时任务响应时间线:

调度延迟时间线模型 调度延迟时间线模型 事件触发 中断延迟 ISR 调度器延迟 抢占延迟 任务执行 t₀ t₁ t₂ t₃ t₄ t₅ t₆ 总调度延迟 = (t₅ - t₀) = 中断延迟 + ISR 时长 + 调度器延迟 + 抢占延迟
实时性核心矛盾:抢占延迟的大小直接受内核调度粒度控制。调度粒度越粗(如 250Hz 时钟),抢占检查点越稀疏,高优先级任务等待时间越长。

1.3 HZ 配置:系统心跳的节拍器

Linux 内核通过 HZ 宏定义系统定时器中断的频率。HZ 值决定了内核时钟中断的周期,进而影响调度器被调用的频率。

HZ 值 时钟周期 典型场景 调度粒度 实时性影响
100 10 ms 服务器、桌面 粗粒度 差(抢占延迟可达 10ms)
250 4 ms 通用 Linux 中等粒度 一般(抢占延迟约 4ms)
1000 1 ms 实时、嵌入式 细粒度 较好(抢占延迟约 1ms)
PREEMPT_RT + 高精度定时器 动态(μs 级) 硬实时 极细粒度 优秀(抢占延迟 < 100μs)
权衡:提高 HZ 值虽然降低了调度延迟,但增加了上下文切换次数和内核开销。在 1000Hz 下,CPU 可能花费 5–10% 的时间仅用于处理时钟中断和调度,这对吞吐型负载不利。

1.4 调度粒度:抢占决策的精度

调度粒度(Scheduling Granularity)是指内核检查是否需要重新调度的最小时间间隔。在传统 Linux 内核中,调度检查仅在以下时机发生:

  • 时钟中断返回时(由 HZ 控制频率)
  • 系统调用返回用户空间时
  • 中断处理程序返回时
  • 显式调用 schedule() 时

调度粒度与 HZ 的关系可以通过以下 SVG 架构图清晰展示:

HZ 配置与调度粒度关系架构图 HZ 配置与调度粒度关系架构图 HZ 配置 (100 / 250 / 1000 Hz) 时钟中断周期 (10ms / 4ms / 1ms) 调度粒度 (粗 / 中 / 细) 影响链:HZ ↑ → 时钟周期 ↓ → 调度检查频率 ↑ → 抢占延迟 ↓ → 实时性 ↑ 实时性关键指标对比 HZ=100:最大抢占延迟 ≈ 10ms | HZ=250:最大抢占延迟 ≈ 4ms | HZ=1000:最大抢占延迟 ≈ 1ms PREEMPT_RT + 高精度定时器:最大抢占延迟 < 100μs(动态调度粒度)

1.5 为什么这对实时性至关重要?

实时系统对确定性(Determinism)有严格要求。调度延迟的抖动(Jitter)直接破坏系统的可预测性。HZ 配置和调度粒度通过以下机制影响实时性:

  1. 抢占点密度:低 HZ 导致抢占检查点稀疏,高优先级任务可能被阻塞长达一个时钟周期(如 10ms)。
  2. 定时器精度:HZ 决定了软件定时器的最小分辨率。100Hz 下定时器只能以 10ms 为步进,无法满足 μs 级精度需求。
  3. 上下文切换开销:高 HZ 增加调度器调用次数,但每次切换的固定开销(TLB 刷新、缓存污染)可能抵消实时性收益。
  4. 中断响应窗口:在关中断期间,即使 HZ 再高,调度器也无法响应。PREEMPT_RT 通过降低最大关中断时间(< 10μs)来突破这一瓶颈。
实践建议:
  • 对于软实时应用(音频、视频),选择 HZ=1000 并启用 CONFIG_PREEMPT。
  • 对于硬实时应用(工业控制、机器人),使用 PREEMPT_RT 补丁,并配合高精度定时器(HRTIMER)实现动态调度粒度。
  • 避免在实时关键路径上使用 HZ=100,除非你能容忍 10ms 级别的调度抖动。

1.6 本章小结

概念 定义 对实时性的影响
调度延迟 事件触发到任务开始执行的时间 决定系统能否满足截止时间
HZ 配置 系统定时器中断频率 控制调度检查的基准频率
调度粒度 抢占决策的最小时间间隔 直接影响最大抢占延迟
PREEMPT_RT 实时内核补丁 将调度粒度从 ms 级降至 μs 级