第 7 章 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: 是根据作业截止时间排列任务优先级的调度程序策略。最早的绝对期限的作业首先运行。
7.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。