FreeBSD调度程序和Linux调度程序之间的区别

时间:2013-02-17 07:08:03

标签: linux linux-kernel

FreeBSD调度程序和Linux调度程序有什么区别?

1 个答案:

答案 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正在接近其中的两倍。