kernel 调度支持多级,下面的例子就是支持2级调到,即第一级的MC和第二级的NUMA
[root@localhost ~]# sysctl kernel.sched_domain.cpu0.domain0.name
kernel.sched_domain.cpu0.domain0.name = MC
[root@localhost ~]# sysctl kernel.sched_domain.cpu0.domain1.name
kernel.sched_domain.cpu0.domain1.name = NUMA
[root@localhost ~]# sysctl kernel.sched_domain.cpu0.domain2.name
kernel.sched_domain.cpu0.domain2.name = NUMA
[root@localhost ~]# sysctl kernel.sched_domain.cpu0.domain3.name
kernel.sched_domain.cpu0.domain3.name = NUMA
其调度结构是在kernel/sched/tology.c 中定义的定义的
static struct sched_domain_topology_level default_topology[] = {
#ifdef CONFIG_SCHED_SMT
{ cpu_smt_mask, cpu_smt_flags, SD_INIT_NAME(SMT) },
#endif
#ifdef CONFIG_SCHED_MC
{ cpu_coregroup_mask, cpu_core_flags, SD_INIT_NAME(MC) },
#endif
{ NULL, },
};
numa这一级是在代码中动态加的,其函数为sched_init_numa
for (j = 1; j < level; i++, j++) {
tl[i] = (struct sched_domain_topology_level){
.mask = sd_numa_mask,
.sd_flags = cpu_numa_flags,
.flags = SDTL_OVERLAP,
.numa_level = j,
SD_INIT_NAME(NUMA)
};
}
这里添加了name为numa的节点
kernel调度域的初始化
猜你喜欢
转载自blog.csdn.net/tiantao2012/article/details/112795738
今日推荐
周排行