4

What are the difference between FreeBSD scheduler and Linux Scheduler ?

4

1 回答 1

14

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

CFSCompletely Fair Scheduler的缩写。最显着的区别是 CFS 不基于运行队列来进行进程选择。相反,它使用具有 O(log N) 复杂度的红黑树,该树由所花费的 CPU 时间索引。

另一个值得注意的细节是 CFS 使用纳秒来计算时间。从内核陷阱

CFS 使用纳秒粒度记帐,不依赖任何 jiffies 或其他 HZ 细节。因此,CFS 调度程序没有“时间片”的概念,也没有任何启发式方法。只有一个中央可调参数:

  /proc/sys/kernel/sched_granularity_ns

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

ULE是传统 BSD 调度程序的继承者。它在 SMP 系统和单处理器系统上提供了很大改进的性能。它遵循更传统的设计,带有运行队列和时间片。它力求公平,但可以被指示支持交互过程。

这是ULE 的作者在研究 CFS 源时的一些发现的链接。他们还在评论中讨论了 CFS 调度程序中算法的复杂性(已引起激烈争论)。

两种调度程序都适合桌面使用。有了kern.sched.interactset,ULE 有利于交互过程。没有它,CFS 和 ULE 应该同样公平。

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

于 2013-02-17T20:23:22.180 回答