【 SCHED 】聊聊 Schedule Domain 的构建

• 1 分钟阅读 • schedule

schedule domain 即为CPU调度域,在源码中经常定义为 sched_domain
提到了调度域那一定少不了 schedule group 调度组,
调试域将作为构建调度组的依赖,调度组中还有一个 capacity,可以用其来评估该组是否busy,
好,下面我们依次来分析它们的构建过程。

调度域会参考 CPU 的组成结构来构建,所以我们有必要先了解下 core 的解析过程,作为一个前期补充。
一、核拓扑解析

二、构建调度域
先来看构建调度域的入口,

int sched_init_domains(const struct cpumask *cpu_map)
{
    ...
	arch_update_cpu_topology();											( 1 )
	asym_cpu_capacity_scan();											( 2 )
	ndoms_cur = 1;
	doms_cur = alloc_sched_domains(ndoms_cur);							( 3 )
	if (!doms_cur)
		doms_cur = &fallback_doms;
	cpumask_and(doms_cur[0], cpu_map,
        housekeeping_cpumask(HK_FLAG_DOMAIN));							( 4 )
	err = build_sched_domains(doms_cur[0], NULL);						( 5 )

	return err;
}

1)TODO: 不知用意
2)TODO: capacity 相关
3)动态分配一个cpumask_var空间,分配不成功就用fallback_doms代替;
4)这里是对系统中可用核心的一个约束,HK是housekeeping的缩写,例如我们在系统启动前通过isocpus指定了某些核心不参与常规的调度的话,那么将会被加入到housekeeping cpu中,所以这里在构建调度域前会前它们除去,当然housekeeping cpu在后面系统启动后我们是可以主动向已分离的核心分配任务的,主要看业务场景;
5)核心实现部分是build_sched_domains,里面包含了调度域、调度组以及capacity的解析构建;

我们将build_sched_domains来分层依次看吧,先看调度域,

文章标签: schedule

上一篇 : 【 SCHED 】聊聊 CPU 负载均衡
下一篇 : Linux Sched - ARM64 PSCI 核启动方式
阅读进度 0%