,性能测试比拼JensAxboe的测试Phoronix的测试UniversityofNewMexico计算机系的测评小结BFSvsCFS,设计上的不同设计目标的不同中国移动互联网研发培训专家BFS是一款专门为Linux桌面环境所设计的内核调度器,它基于StaircaseDeadline和EEVDF算法,支持Linux2.6.31之后的内核。它提供了前所未有的流畅桌面性能,不仅得到了用户的认可,也为一些商业系统所采用。本文简单介绍了BFS的基本原理,希望能对想深入了解Linux调度器的读者提供一些帮助。中国移动互联网研发培训专家BFS是一个进程调度器,可以解释为“脑残调度器”。这古怪的名字有多重含义,比较容易被接受的一个说法为:它如此简单,却如此出色,这会让人对自己的思维能力产生怀疑。BFS不会被合并进入Linus维护的Linuxmainline,BFS本身也不打算这么做。但BFS拥有众多的拥趸,这只有一个原因:BFS非常出色,它让用户的桌面环境达到了前所未有的流畅。在硬件越来越先进,系统却依然常显得迟钝的时代,这实在让人兴奋。进入2010年,Android使用BFS作为其操作系统的标准调度器,这也证明了BFS的价值。中国移动互联网研发培训专家BFS出现后得到了很多用户的好评,得到了诸如“快,感觉的到的快”,“桌面的急速未来”等评价。这些词让人侧目,于是我便开始四下寻找关于BFS的测试数据,希望能找到说明这一切的数字或者曲线。但结果却颇令人失望。。。中国移动互联网研发培训专家BFS发布后不久,即2009年9月,IngoMolnar发布了他的测评报告,比较了CFS和BFS。作为CFS的作者,他所宣称的测试结果并不让人觉得意外:CFS在各个方面优于BFS。不过人们对他的测评结果有不同的反应,有人认同,也有人心存疑惑。JensAxboe就是心存怀疑的一位,他自己写了一个名为Latt.c的程序,试图测试调度器的两个神秘属性:”Interactivity”和“Fluidness”。他的测试结果刚好相反,表明BFS在交互性方面优于CFS,而且其CPU利用率更高。不过BFS稳定性较差,并且在某些情况下也表现出了糟糕的交互性问题。中国移动互联网研发培训专家从Jens的测试数据来看,BFS稍微优于CFS,但优势并非如同坊间流传的那样夸张。感兴趣的读者可以在lkml的邮件列表中找到Jens测试的详细数据:=887636结果让翘首以盼的我有些失望,并没有看到BFS遥遥领先。反而有些类似奥运会男子百米的决赛,究竟谁是冠军一时竟难以分辨。但值得注意的是,该测试意外地让人们认识到了CFS本身的一个严重问题。CFS的sleeperfairness特性导致在一些情况下将出现严重的调度延迟,在Jens的xmodmap测试中甚至出现了10s的延迟。并且围绕Jens的测试,人们纷纷发表声明,使用CFS时有很多交互性问题,比如编译内核时,同时的音频视频会出现严重的停顿,而使用BFS则没有这些问题。不过这些CFS的问题都在关闭了sleeperfairness特性后神秘地消失了。中国移动互联网研发培训专家这让CFS调度器的开发者不得不暂时关闭了sleeperfairness特性,并一度曾号称将在即将发布的2.6.32中正式关闭该特性,直到问题被解决为止。令人吃惊的是,Ingo在一周之内就抛出了新的patch,即GentleFairness。使用这个patch,10s延迟消失了,其他的关于鼠标滞后,视频停顿的关于CFS的负面报告也都消失了。。。中国移动互联网研发培训专家您可以在=article&item=bfs_scheduler_benchmarks&num=1和=profile&u=zero-9274-28890-6247看到Phoronix对BFS的专业测试。该测试也是在2009年9月完成的,如前所述,此后BFS和CFS都有了一些更新,因此该测试也不能完全反映这两款调度器最新的状态。但作为权威的测评机构,该测评结果还是值得一看。从Phoronix的测试结果来看,BFS在多项测试中稍微领先,CFS则在其余一些测试项目中反超。我不禁又有些黯然。中国移动互联网研发培训专家唯一能体现BFS“急速”的测试项目来自针对网络服务器吞吐量的测试,特在此处张贴这张最具有说服力和震撼力的直方图。图1.网络吞吐量测试除此一项之外,总的来讲,Phoronix的测试结果终究只是表明BFS和CFS旗鼓相当。中国移动互联网研发培训专家新墨西哥大学的TaylorGroves,JeKnockel,EricSchulte在2009年12月也发布了一个BFSvs.CFS的评测报告。他们的测评关注于三个方面:延迟,TurnaroundTime还有交互性。下面摘录他们的测试结果图2.延迟中国移动互联网研发培训专家图3.TurnaroundTime中国移动互联网研发培训专家图4.交互性中国移动互联网研发培训专家这三张图总算聊以安慰我四处找寻的辛苦,根据这个评测结果,终于可以得到这样的结论:在turnaroundtime方面,CFS优于BFS。但是BFS的调度延迟小于CFS。这说明BFS更加适应于交互式应用环境。CFS更加适合于批处理作业环境。这跟许多用户的体验相同。中国移动互联网研发培训专家以上三个测评都是在Linux2.6.32发布前完成的。然而CFS在Linux2.6.32中引入了GENTLE_FAIR_SLEEPERS特性,正如2.1节中所说,这个patch据说是极大地提高了交互性。不幸的是,在那以后,却似乎再也没有人做关于CFS和BFS的比较测试了。因此在Linux已经进入2.6.35的时代,我们更无法轻易得出BFS和CFS孰优孰劣的结论。中国移动互联网研发培训专家从另一方面讲,虽然专业评测没有显示出BFS的明显优势,但从Internet上能收集到的信息来看,大多数用户都觉得BFS能够显著地提高交互式应用的体验,这是一种个人的体验,比如鼠标的移动是否流畅等等。在这类体验中,两款调度器的差异却是相当大,这无法用前面的测试数据来加以说明。因此我认为,目前人们并没有理解影响交互性的真正原因,专业测试所关注的数据尚无法准确描述诸如“流畅”这类主观的感觉。因此,对于BFS,我们不妨相信感觉一次吧。那么BFS究竟做了哪些改进,如果这些改进如此有效,为什么主流内核不愿意接纳BFS呢?中国移动互联网研发培训专家白天ConKolivas在医院里当麻醉师,为人们解除痛苦,业余的时候借Linux解除自己的痛苦。额,Kolivas学习Linux并不是为了解决痛苦,我臆测而已。但据Kolivas自述,他接触Linux内核时连C语言也没有学习过。。。这个事实证明,语言只是一项工具,对问题本质的深入理解才是写程序的关键。可能还有执着,CFS和RSDL之争导致Kolivas离开Linux社区,此去经年,当Kolivas再次开始看内核代码的时候,他立即发现CFS存在以下几个设计上的问题:中国移动互联网研发培训专家CFS的目标是支持从桌面到高端服务器的所有应用场景,这种大而全的设计思路导致其必须做一些实现上的折中,此外,那些只有在高端机器中才需要的特性将引入不必要的复杂代码。其次,为了维护多CPU上的公平性,CFS采用了负载平衡机制,Kolivas认为,这些复杂代码抵消了percpuqueue曾带来的好处。最后,主流内核的CFS还是对睡眠进程存在一些偏好,这意味着“不公平”。中国移动互联网研发培训专家在现实中,调度算法类似一个处境尴尬的主妇,满足孩子对晚餐的要求便有可能伤害到老人的食欲。Linux内核一直试图做出一道让全家老少都喜欢的菜,在这方面,CFS已经做的很好。但一道能被所有人接受的菜,或许就意味着稍许平淡。而BFS只打算满足一种口味,以便将这种口味发展到极限。中国移动互联网研发培训专家根据LinuxMagazine的说法,ConKolivas是看到了下面这则来自xkcd的漫画而开始思考BFS的。图5.讥讽Linux调度器的xkcd漫画中国移动互联网研发培训专家事情源于一些Linux用户,他们发现Linux虽然号称能够充分发挥4096颗CPU系统的计算能力,但在普通的laptop上却无法流畅地播放Youtube视频。这让人们开始思考,对于Desktop环境来讲,CFS哪些复杂的特性究竟是否还有意义?人们是否有必要在自己的个人电脑中使用一个支持4096个CPU的调度器?中国移动互联网研发培训专家BFS正是对这种质疑的自然反应。它不打算支持4096个CPU的庞然大物,BFS的目标是普通人使用的桌面电脑。此外,BFS还删除了那些只有在服务器上才需要的特性。比如,BFS抛弃了CFS的组调度特性,类似CGROUP这样的特性对于普通的桌面用户是多余的技术。这很容易理解:在只有一个CPU的系统中,谁还会设计多个CGroup,哪里还能用到NUMAdomain等概念呢?中国移动互联网研发培训专家此外BFS使用单一的runqueue,不再需要复杂的负载均衡机制。由于不再有CGROUP概念,也不再需要Group间的负载均衡。这些简单的裁剪使得BFS的代码极大地简化,简化的代码意味着执行一次调度所需要的指令数减少了,相应的footprint自然也减少了。当然简化代码只是一个显而易见的方面,更重要的是,这种理念的不同会对最终的调度器实现产生更加深远的影响,这实在是难以尽述。