Android开发教程之Linux调度器BFS简介

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

,性能测试比拼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自然也减少了。当然简化代码只是一个显而易见的方面,更重要的是,这种理念的不同会对最终的调度器实现产生更加深远的影响,这实在是难以尽述。

1 / 22
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功