第 2 章 RHEL for Real Time 的调度策略
在实时中,调度程序是用来决定要运行的线程的内核组件。每个线程都有一个关联的调度策略和静态调度优先级,称为 sched_priority
。调度是抢占的,因此当具有较高静态优先级的线程准备好运行时,当前运行的线程将停止。然后,运行的线程会返回到其静态优先级的 waitlist
。
所有 Linux 线程都有以下调度策略之一:
-
SCHED_OTHER
或SCHED_NORMAL
: 是默认策略。 -
SCHED_BATCH
: 与SCHED_OTHER
类似,但具有增量性调整。 -
SCHED_IDLE
: 是优先级低于SCHED_OTHER
的策略。 -
SCHED_FIFO
: 是第一个 in 和第一个实时策略。 -
SCHED_RR
: 是循环实时策略。 -
SCHED_DEADLINE
: 是根据作业截止时间排列任务优先级的调度程序策略。最早的绝对期限的作业首先运行。
2.1. 调度程序策略 复制链接链接已复制到粘贴板!
实时线程的优先级高于标准线程。策略具有调度优先级值,范围从最小值为 1 到最大值 99。
以下策略对实时至关重要:
SCHED_OTHER
或SCHED_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_FIFO
和SCHED_RR
线程运行,直到发生以下事件之一:- 线程进入睡眠状态或等待事件。
高优先级的实时线程准备好运行。
除非发生上述事件之一,否则线程在指定的处理器中无限期运行,而较低优先级线程保留在等待运行的队列中。这可能导致系统服务线程处于驻留状态,并阻止交换出文件系统数据并导致文件系统数据清除失败。
SCHED_DEADLINE
策略SCHED_DEADLINE
策略指定时间要求。它根据任务的截止时间调度每个任务。预计截止时间最早(EDF)调度的任务首先运行。内核需要
runtime swigdeadlineCloneperiod
变为 true。所需选项之间的关系是runtime swigdeadline swigperiod
。