2013-02-17 111 views

回答

12

有几个调度程序可用。这个答案假设默认调度程序:CFS(Linux)和ULE(FreeBSD)。

CFS的简称完全公平调度程序。最显着的区别在于CFS不基于运行队列进行流程选择。相反,它使用一个O(log N)复杂度的红黑树,这个树花费CPU时间索引。

另一个值得注意的细节是CFS使用纳秒计时。从Kernel Trap

CFS使用纳秒粒度会计和不依赖于任何 的jiffies或其他HZ细节。因此,CFS调度程序没有 'timeslices'的概念,并且没有任何启发式。只有一个 中央可调:

/proc/sys/kernel/sched_granularity_ns 

可用于调整调度从“桌面”(低 延迟),以“服务器”(好配料)工作负载。它默认为适用于桌面工作负载的 设置。 SCHED_BATCH也由 CFS调度程序模块处理。

ULE是传统BSD调度程序的后继者。它在SMP系统和单处理器系统上提供了大大改进的性能。它遵循比较传统的设计,运行队列和时间片。它力求公平,但可以通过指导来支持交互式流程。

这是一个link对ULE的作者在研究CFS来源时的一些发现。他们还在评论中讨论了CFS调度程序中算法的复杂性(已经引起了很多争议)。

这两个调度程序都适合桌面使用。通过设置kern.sched.interact,ULE支持交互式进程。没有它,CFS和ULE应该同样公平。

ULE登陆大约3000行代码,而CFS正在接近这个数字的两倍。