第 6 章 RHEL for Real Time 的调度策略
实时调度程序是决定要运行的线程的内核组件。每个线程都有一个关联的调度策略和静态调度优先级,称为 sched_priority。调度是抢占的,因此当具有较高静态优先级的线程准备好运行时,当前运行的线程将停止。然后,运行的线程会返回其静态优先级的 waitlist。
所有 Linux 线程都有以下调度策略之一:
-
SCHED_OTHER或SCHED_NORMAL:是默认策略。 -
SCHED_BATCH:与SCHED_OTHER类似,但使用增量情况。 -
SCHED_IDLE: 是优先级低于SCHED_OTHER的策略。 -
SCHED_FIFO: 是第一个 in 和 first out 实时策略。 -
SCHED_RR:是循环实时策略。 -
SCHED_DEADLINE: 是一种调度程序策略,根据作业期限对任务进行优先级排序。最早绝对截止时间的作业会首先运行。
6.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)调度的任务首先运行。内核需要
运行时的deadline …period为 true。所需选项之间的关系是runtimedeadline …period。