kernel调度域的初始化

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的节点

猜你喜欢

转载自blog.csdn.net/tiantao2012/article/details/112795738