第 2 章 RHEL for Real Time 的调度策略


在实时中,调度程序是用来决定要运行的线程的内核组件。每个线程都有一个关联的调度策略和静态调度优先级,称为 sched_priority。调度是抢占的,因此当具有较高静态优先级的线程准备好运行时,当前运行的线程将停止。然后,运行的线程会返回到其静态优先级的 waitlist

所有 Linux 线程都有以下调度策略之一:

  • SCHED_OTHERSCHED_NORMAL : 是默认策略。
  • SCHED_BATCH: 与 SCHED_OTHER 类似,但具有增量性调整。
  • SCHED_IDLE: 是优先级低于 SCHED_OTHER 的策略。
  • SCHED_FIFO: 是第一个 in 和第一个实时策略。
  • SCHED_RR: 是循环实时策略。
  • SCHED_DEADLINE: 是根据作业截止时间排列任务优先级的调度程序策略。最早的绝对期限的作业首先运行。

2.1. 调度程序策略

实时线程的优先级高于标准线程。策略具有调度优先级值,范围从最小值为 1 到最大值 99。

以下策略对实时至关重要:

  • SCHED_OTHERSCHED_NORMAL 策略

    这是 Linux 线程的默认调度策略。它有一个动态优先级,系统会根据线程的特性更改。SCHED_OTHER 线程在 -20 之间具有 nice 值,即最高优先级和 19,这是最低优先级。SCHED_OTHER 线程的默认 nice 值是 0。

  • SCHED_FIFO 策略

    具有 SCHED_FIFO 的线程与 SCHED_OTHER 任务相比具有更高的优先级。SCHED_FIFO 不使用 nice 值,而是使用 1 之间的固定优先级,即最低优先级和 99,这是最高。优先级为 1 的 SCHED_FIFO 线程始终在 SCHED_OTHER 线程上调度。

  • SCHED_RR 策略

    SCHED_RR 策略与 SCHED_FIFO 策略类似。等于优先级的线程以轮循方式调度。SCHED_FIFOSCHED_RR 线程运行,直到发生以下事件之一:

    • 线程进入睡眠状态或等待事件。
    • 高优先级的实时线程准备好运行。

      除非发生上述事件之一,否则线程在指定的处理器中无限期运行,而较低优先级线程保留在等待运行的队列中。这可能导致系统服务线程处于驻留状态,并阻止交换出文件系统数据并导致文件系统数据清除失败。

  • SCHED_DEADLINE 策略

    SCHED_DEADLINE 策略指定时间要求。它根据任务的截止时间调度每个任务。预计截止时间最早(EDF)调度的任务首先运行。

    内核需要 runtime swigdeadlineCloneperiod 变为 true。所需选项之间的关系是 runtime swigdeadline swigperiod

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat