Chinaunix首页 | 论坛 | 博客
  • 博客访问: 335561
  • 博文数量: 102
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 1146
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-21 22:33
文章分类

全部博文(102)

文章存档

2011年(8)

2010年(94)

我的朋友

分类: LINUX

2010-01-24 22:32:42


(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等等 



--------------------
一杯绿茶,一颗香烟

文章选项: 打印   将这篇文章放置于备忘录中,待有空时回覆   好友分享   通知版主

阅读(3135) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~