freebsd 5-current刚刚引入了一个名为ule调度器的内核调度单元调度器。这个调度器在smp系统中的效率要远好于freebsd以前版本的调度器(目前,那个调度器被称为4bsd调度器)。
新的ule调度器的设计更像solaris和linux等操作系统的调度器。solaris的smp性能非常好这一点是它的卖点之一,其调度器采用的优秀算法就是一个很重要的原因。bsd派生系统,尽管由于系统整体设计的合理,以及操作系统其他部分的卓越性能弥补了它在smp调度器上的不足,甚至尽管freebsd在绝大多数情况下的性能都超过
其他系统,但它使用的4bsd调度器的smp性能不高仍然为人诟病。
令人高兴的是,全新设计的ule调度器引入了solaris、linux等系统在smp调度方面的先进算法,并且,它在单处理器系统中的性能也相当不错,与4bsd调度器的性能相当。
为什么新的ule调度器能够获得更高的性能呢?最主要的原因在于,新的ule调度器为每一个cpu单独维护运行队列,并且,cpu之间能够相互“窃取”对方就绪队列中的任务,从而达到更好的平衡。基本上,ule调度器的设计符合下面的原则:尽可能利用更多的执行资源,尽可能使用局部锁,尽可能避免使用浪费执行资源的自旋锁,尽可能采用高效的调度算法(目前ule调度器采用的算法的复杂度是o(1))。
在笔者撰写这篇文章的时候,ule调度器仍然处于进一步完善的过程中。一方面,它已经能够提供比4bsd调度器更好的调度性能——内核态调度开销减少大约25%,而用户态的计算也有一定程度的缩减。
本文所说的ule调度器(src/sys/kern/sched_ule.c)的cvs tag是
$freebsd: src/sys/kern/sched_ule.c,v 1.8 2003/02/03 05:30:07 jeff exp $
未来版本的ule调度器可能会和这个版本有一些出入,但不会太大。
![]()
如果喜欢freebsd ule调度器浅析请收藏或告诉您的好朋友.
阅读(145) | 评论(0) | 转发(0) |