Linux SCHED_OTHER,SCHED_FIFO和SCHED_RR - 差异

eve*_*ve 29 linux scheduling scheduler linux-kernel cfs

有人可以解释SCHED_OTHER,SCHED_FIFO和SCHED_RR之间的区别吗?

谢谢

Cla*_*dio 50

SCHED_FIFO和SCHED_RR是所谓的"实时"策略.它们实现POSIX标准指定的固定优先级实时调度.具有这些策略的任务会抢占所有其他任务,因此很容易导致饥饿(如果他们不释放CPU).

SCHED_FIFO和SCHED_RR之间的区别在于具有相同优先级的任务中,SCHED_RR执行具有特定时间片的循环; 相反,SCHED_FIFO需要任务明确地产生处理器.

SCHED_OTHER是常见的循环时间共享调度策略,它根据系统中运行的其他任务来调度特定时间片的任务.

更新:自Linux 3.14起,还有一个名为SCHED_DEADLINE的附加策略.此策略在最早期限第一个队列之上实现恒定带宽服务器(CBS)算法.此策略下的每个任务都分配了截止日期,并执行最早期限任务.描述该算法的最佳资源是Linux内核中的截止日期调度.

更新2:自Linux 4.13起,SCHED_DEADLINE已将CBS替换为未使用带宽贪婪回收(GRUB)算法.

  • 另请注意,Linux调度程序可以减少SCHED_DEADLINE下的行为不当进程,因此其他进程可以获得CPU时间.请参阅https://www.youtube.com/watch?v=AmyfSjRMcIY和http://retis.sssup.it/~jlelli/talks/rts-like14/SCHED_DEADLINE.pdf.也就是说,如果SCHED_DEADLINE进程表示它需要5个中的2个时间片,但消耗的数量超过5个时间,则必要时将被限制.为了在Linux上实现硬实时,SCHED_DEADLINE可能是最好的选择. (2认同)

小智 6

以下是基于 Linux 手册 ( http://man7.org/linux/man-pages/man7/sched.7.html ) 的SCHED_OTHER、SCHED_FIFO 和 SCHED_RR 之间的差异

SCHED_FIFO:先进先出调度

SCHED_FIFO只能用于高于 0 的静态优先级,这意味着当 SCHED_FIFO 线程变为可运行时,它将始终立即抢占任何当前正在运行的 SCHED_OTHER、SCHED_BATCH 或 SCHED_IDLE 线程。SCHED_FIFO 是一种简单的调度算法,没有时间分片。

SCHED_RR:循环调度

SCHED_RR是 SCHED_FIFO 的简单增强。上面针对 SCHED_FIFO 描述的所有内容也适用于 SCHED_RR,除了每个线程只允许运行最大时间量。如果 SCHED_RR 线程已运行的时间段等于或长于时间片,则它会因其优先级而被放在列表的末尾。

SCHED_OTHER:Linux 默认分时调度

SCHED_OTHER只能用于静态优先级 0(即实时策略下的线程始终优先于 SCHED_OTHER 进程。SCHED_OTHER 是标准的 Linux 分时调度程序,适用于所有不需要特殊实时机制的线程.