FreeBSD调度器和Linux调度器的区别

5
FreeBSD调度器和Linux调度器有哪些区别?

2
这个问题不适合在StackOverflow上讨论。在Unix & Linux上发帖可能更合适。 - Graham
1个回答

14

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

CFS是“完全公平调度程序”的缩写。最显著的区别在于,CFS不基于运行队列进行进程选择。相反,它使用一个由CPU时间花费为索引的具有O(log N)复杂度的红黑树。

另一个值得注意的细节是,CFS使用纳秒进行时间核算。来自Kernel Trap

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

  /proc/sys/kernel/sched_granularity_ns

该设置可用于从“桌面”(低延迟)调整到“服务器”(良好的批处理)工作负载来优化调度程序。默认情况下,它适用于桌面工作负载。SCHED_BATCH也由CFS调度程序模块处理。

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

这里是ULE作者在研究CFS源代码时发现的一些结果链接。他们还在评论中讨论了CFS调度程序算法的复杂性(经过激烈辩论)。

两个调度程序都适用于桌面使用。设置kern.sched.interact后,ULE会优先考虑交互式进程。没有这个设置,CFS和ULE应该同样公平。

ULE大约有3000行代码,而CFS则接近其两倍。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接