免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3993 | 回复: 1
打印 上一主题 下一主题

調度域(sched domain) 和 CPU集(cpuset) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-24 22:32 |只看该作者 |倒序浏览

wxc200
(enthusiast)
09-06-21 12:27

調度域(sched domain) 和 CPU集(cpuset)


编辑




回复


CPUSET 部分 有改動時,比如cpuset 合并,新加/減cpu,都會觸發 重新構建 调度域(sched domain).
两者的区别在于,cpuset是纵向的嵌tao的,而sched domain是平面的.这个地方原文是:cpusets are hierachical and nest.sched domains are flat.
从两者的理解看,cpuset指得是几个cpu的集合,它是cgroup的一个subsystem,可以单独作为cgroup fs mount ,它里面的进程表示的是:这些进程可以在这个cpu集合上运行. scehd domain指的是,在balance 调度时,以这个domain为单位,在内部完成调度.这个过程中,简单地讲就是,发现当前cpu idle,把一些进程从busy的cpu移动到当前cpu.
对于同一个cpu,它可以处在不同的cpuset里,它可以与不同的cpu形成集合,然后绑定在此集合上的tasks
但是,同一个cpu,只能属于同一个sched domain.for smp,任意一个sched domain,包含了所有cpu的一个subset.
sched domain的层次,并没有一个全局的数据结构来维持.它是属于per-cpu的.在这儿,还有另一个概念,sched-group,一个sched-domain,有至少一个sched-group,它有一个cpu-mask,调度平衡时,即在一个调度域里的不同group之间,选择最忙的组,进行调度.
那么,既然每个cpu有属于自己的sched-domain and sched-group 变量,它跟最终抽象出来的sched-domain结构有什么关系呢?
(编辑个小错误)
--------------------
cfs + hrtimer + mm = 2009 plan
编辑者: wxc200 (09-06-22 11:21)
文章选项:

   

   

   

wxc200
(enthusiast)
09-06-21 12:49

Re: 調度域(sched domain) 和 CPU集(cpuset)

[
re: wxc200
]


编辑




回复


我对这个问题想了好久,今天突然一个idea触发了我:为什么一定要有个结构来维持sched-domain呢?
对它的理解,从构建调度域的函数传递参数即可.build_sched_domain传递的参数是cpumask,即online-cpu的一个subset.
而这个cpumask会拷贝到per-cpu的sched-domain结构体中的cpumask[]去. 举个smp例子,有32个cpu0~31. 如果前8个cpu 0~7作为一个调度域,那个在构建这个sched-domain时,需要传递(cpumask=0~7)的参数,而cpu0~7的per-cpu变量phys_domains里会以此cpumask拷贝.最终,只有0~7号cpu的cpumask标志相同,它们属于同一个调度域.
由于调度平衡是在域内部的group之间进行,对于smp系统,每个cpu还有个类似sched-domain的sched-group,它也有一个cpumask,表示在此sched-domain内部,它所包含的cpu. 对于smp来说,就包含它自己.
属于同一个sched-domain的sched-group,用circular link lisk组织起来.
上面说的,大体是sched-domain与sched-group的关系.
在sched-tick处理中,要在当前cpu的运行队列run-queue触发调度平衡,只需要对percpu的sched-group遍历,找到最忙的group即可.这就是遍历当前cpu所在sched-domain的方法.
sched-domain与cpuset的cpumask,共同决定了,一些进程是否可以migrate.cpuset是对sched-domain的限制.举个例子讲,上面的cpu0~7属于一个调度域,可能此调度域是由两个cpuset合并而成的.假如cpuset1有cpu0~4,cpuset2有cpu4~7,那个两者就要在合适的时间重新build成现在的sched-domain cpu0~7. 问题是4号cpu上的进程.由于它属于两个不同的cpuset里面,同一个cpu-domain,那么在调度平衡的时候,它上面的进程,并非可以移动到此domain的所有cpu上去,cpuset将会对它有所限制.
想到了这些,顺手记下来吧...一些细节,暂时不表,当哩个当来当哩个当~~ :-)
--------------------
cfs + hrtimer + mm = 2009 plan
文章选项:

   

   

   

wxc200
(enthusiast)
09-06-28 14:26

Re: 調度域(sched domain) 和 CPU集(cpuset)

[
re: wxc200
]


编辑




回复


关于调度域,它的层次很重要,有两篇文档介绍得比较细致.
一是clf网友写的
http://www.ibm.com/developerworks/cn/linux/l-cn-schldom/

一个是sched domain的document
http://www.ibm.com/developerworks/cn/linux/l-cn-schldom/

schedule domain 的toplogy根processor的硬件架构相关,包括NUMA,Multiple-processor,multile-core,smt等等概念.
可以查看上述名词wiki解释得很详细,
include/linux/topylogy.h对于上面不同体系与调度域的level的实现有介绍,比如SMT/MC等等
--------------------
一杯绿茶,一颗香烟
文章选项:

   

   

   

               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/110888/showart_2159341.html

论坛徽章:
0
2 [报告]
发表于 2016-02-17 10:50 |只看该作者
很不错的总结,mark!
多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP