完全公平调度器.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
完全公平调度器

完全公平调度器 完全公平调度器(CFS)的设计思想是:在一个真实的硬件上模型化一个理想的、精确的多任务CPU。该理想CPU模型运行在100%的负荷、在精确平等速度下并行运行每个任务,每个任务运行在1/n速度下,即理想CPU有n个任务运行,每个任务的速度为CPU整个负荷的1/n。 由于真实硬件上,每次只能运行一个任务,这就得引入虚拟运行时间(virtual runtime)的概念,虚拟运行时间为一个任务在理想CPU模型上执行的下一个时间片(timeslice)。实际上,一个任务的虚拟运行时间为考虑到运行任务总数的实际运行时间。 所以,一堆进行都运行了一段时间delta,那么它们的vrumtime就遵循上面的公式。很明显,优先级最大的进程vrumtime增量最小。。。 2 操作细节 cfs就是通过追踪这个vruntime来进行任务调度的。它总是选 vruntime最小的进程来运行。 3 红黑树。 红黑树这个数据结构在内核里用得还不少嘛,不过俺不太懂。哪位兄弟给扫扫盲 hrtimer里也用到了red-black-tree。这里把进程的vruntime用rb-tree来存储。 4 一些feature cfs has no time-slice concept.o(1)有的,cfs没有明显得用,它偷偷摸摸地用。呵呵 翻译完这几段咱再说这个。文档里面那个接口估计是用来调整最小粒度的。用于桌面和服务器两 种不同的调度。后者可能不太希望频繁的调度,浪费时间。前者则希望面面俱到--不患寡妇而患不均也 在CFS中,虚拟运行时间由每个任务的p-se.vruntime值(ns为单位)跟踪。在理想的硬件上,在任何时间,所有的任务将有同样的p-se.vruntime值,任务将同时执行,并且,没有任务会从CPU理想的分享时间中变成负载不平衡。 CFS的任务选择逻辑基于p-se.vruntime值,并且它总是尝试运行拥有最小p-se.vruntime值的任务。CFS总是尝试在可运行的任务之间分离出CPU时间,让该时间尽可能地接近理想的多任务硬件。 CFS的大多数设计仅仅为了兑现这个简单的概念,另外还加一些点缀,如:nice级、多进程和各种认知睡眠者的算法变量。 红黑树 CFS设计的亮点是没有使用运行队列的旧数据结构,而是用时间排序的红黑树(rbtree),该树构建了一个将来任务执行的时间线(timeline),这样,不需要数组切换的人为干预。 CFS还维护rq-cfs.min_vruntime值,该值是一个单调的递增值,跟踪运行队列所有任务中的最小虚拟运行时间。系统所做的工作总量用min_vruntime跟踪,该值用于尽可能地放置新激活的实体到树的左侧。 运行队列中正运行任务的总数用rq-cfs.load value计算,它是运行队列上排队的任务 的权重的总和。 CFS维护时间排序的红黑树(rbtree),树上所有可运行的任务由p-se.vruntime作为键值排序,CFS从树中选择最左边的任务执行。考虑到外围影响,p-se.vruntime会减去rq-cfs.min_vruntime。 随着系统向前运行,已执行的任务被更多地放入树的右边,但每个任务有机会成为最左边的任务而得到CPU的执行。 总结一下,CFS的工作机制是:它任务一个任务的一小部分,当任务调度时,任务的CPU使用会考虑:它刚使用CPU花费的时间被加到p-se.vruntime上。一旦p-se.vruntime值足够高,使得另一个任务成为时间排序树的最左边任务(加上一点相对最左侧任务的间隔距离,以便不会过调度任务并将高度缓存变为垃圾)时,新的最左边任务被选择,并抢占了当前任务。 CFS使用ns颗粒计算,不依赖于任何jiffies或其他的HZ细节。这样,CFS调度器没有时间乍的概念,仅有一个中心的调整,用户必须切换到CONFIG_SCHED_DEBUG配置下编译才可,调整如下常量: /proc/sys/kernel/sched_min_granularity_ns 这将可被用来从桌面(如:低延迟)到服务器(如:较好的成批处理)工作负载调整调度器。缺省下设置为桌面负载。SCHED_BATCH也被 CFS调度器模块处理。 由于它的设计,CFS调度器不易于受到攻击,如:现存在的对stock调度器的启动发式攻击文件fiftyp.c, thud.c, chew.c, ring-test.c, massive_intr.c在CFS下工作良好,并不影响交互性和产生期望的攻击行为。 CFS调度器处理nice级和SCHED_BATCH比以前的vanilla调度器更加强壮:两类工作负载被隔离。 SMP负载平衡工作更好更简洁:工作队列的遍历消耗已从负载平衡代码中删除,

文档评论(0)

saa9099 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档