实时内核包含一个保护机制,它允许分配供实时任务使用的带宽。保护机制被称为实时调度程序节流。
实时节流机制的默认值定义实时任务可以使用 95% 的 CPU 时间。其余的 5% 将被视为非实时任务,例如在 SCHED_OTHER
和类似调度策略下运行的任务。务必要注意,如果单个实时任务占据了 95% 的 CPU 时间插槽,则该 CPU 上的剩余实时任务将不会运行。只有非实时任务会使用剩余的 CPU 时间的 5%。默认值可能会有以下性能影响:
- 实时任务最多为它们提供 95% 的 CPU 时间,这可能会影响其性能。
- 实时任务不允许运行非实时任务来锁定系统。
实时调度程序节流由 /proc
文件系统的以下参数控制:
-
/proc/sys/kernel/sched_rt_period_us
参数定义 CPU 带宽 100% 中的周期(微秒)。默认值为 1,000,000 crius,其值为 1 秒。必须仔细考虑对句点值的更改,因为一个非常高或低的值可能会导致问题。
-
/proc/sys/kernel/sched_rt_runtime_us
参数定义可用于所有实时任务的总带宽。默认值为 950,000 crius (0.95 s),即 CPU 带宽的 95%。将值设为
-1,
将实时任务配置为使用最多 100% 的 CPU 时间。这只适用于实时任务,且没有明显的注意事项,如未绑定的轮询循环。 -
kernel.sched_rr_timeslice_ms
仅作用于 SCHED_RR(实时轮转)进程:同一优先级的 SCHED_RR 任务之间按该“时间片(ms)”轮流运行。不影响 SCHED_FIFO。