(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) 文章选项: | (enthusiast) 09-06-21 12:49
| Re: 調度域(sched domain) 和 CPU集(cpuset) [] | |
|
我对这个问题想了好久,今天突然一个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 文章选项: | (enthusiast) 09-06-28 14:26
| Re: 調度域(sched domain) 和 CPU集(cpuset) [] | |
|
关于调度域,它的层次很重要,有两篇文档介绍得比较细致. 一是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等等
-------------------- 一杯绿茶,一颗香烟 文章选项: |
|