第 6 章 RHEL for Real Time 的调度策略
在实时中,调度程序是决定要执行的可运行线程的内核组件。每个线程都有关联的调度策略和静态调度优先级(sched_priority)。当具有较高静态优先级的线程就绪时,当前正在运行的线程会停止执行。然后,当前线程返回到其静态优先级的 waitlist。
所有 Linux 线程都有以下调度策略之一:
-
SCHED_OTHER或 'SCHED_NORMAL: 默认策略 -
SCHED_BATCH:与SCHED_OTHER类似,但会考虑吞吐量。 -
SCHED_IDLE: 比SCHED_OTHER更低的优先级策略。 -
SCHED_FIFO:第一个位于 和第一个实时策略。 -
SCHED_RR:轮循实时策略。 -
SCHED_DEADLINE:一种调度程序策略,根据任务期限排列任务,最先运行最早的绝对期限。
6.1. 调度程序策略 复制链接链接已复制到粘贴板!
在实时中,线程的优先级高于正常的线程。策略具有调度优先级值,范围从最小值为 1 到最大 99 值。
以下策略对实时至关重要:
SCHED_OTHER或SCHED_NORMAL:这是 Linux 线程的默认策略。它有一个动态优先级,它根据线程的特性对系统进行更改。
SCHED_OTHER线程在 20(最高优先级)和 19(最低优先级)之间有 nice 值。默认情况下,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线程运行,直到发生以下事件之一:- 线程进入 sleep 状态或等待事件。
高优先级实时线程准备好运行。
除非发生上述事件,线程在指定处理器上无限期运行,而较低优先级线程则停留在等待运行的队列中。这可能导致系统服务线程处于常驻,并防止交换出并失败文件系统数据冲刷。
SCHED_DEADLINE:SCHED_DEADLINE策略指定时间要求。它会根据任务的截止时间调度每个任务,即首先运行最早的截止时间的任务。内核要求
runtimelatexdeadlineperiod为 true。所需选项之间的关系是runtime1028deadlineperiod。