FreeBSD调度程序和Linux调度程序有什么区别?
答案 0 :(得分:13)
有几种调度程序可用。这个答案假设默认的调度程序:CFS(Linux)和ULE(FreeBSD)。
CFS是完全公平计划程序的缩写。最显着的区别是CFS不基于进程选择的运行队列。相反,它使用一个红黑树,其O(log N)复杂度由CPU花费的时间索引。
另一个值得注意的细节是CFS使用纳秒来计算时间。来自Kernel Trap:
CFS使用纳秒粒度计算,不依赖于任何 jiffies或其他HZ细节。因此,CFS调度程序没有概念 'timeslices',没有任何启发式。只有一个 中央可调:
/proc/sys/kernel/sched_granularity_ns
可用于从“桌面”调整调度程序(低) 延迟)到'服务器'(良好的批处理)工作负载。它默认为a 设置适合桌面工作负载。 SCHED_BATCH由。处理 CFS调度程序模块也是。
ULE是传统BSD调度程序的后继者。它在SMP系统和单处理器系统上提供了大大改进的性能。它遵循更传统的设计,包括运行队列和时间片。它力求公平,但可以指示支持互动过程。
这是研究CFS来源时ULE作者的一些调查结果link。他们还在评论中讨论了CFS调度程序中算法的复杂性(已经过多次辩论)。
两种调度程序都适合桌面使用。设置kern.sched.interact
后,ULE支持交互式流程。没有它,CFS和ULE应该同样公平。
ULE落后大约3000行代码,而CFS正在接近其中的两倍。