Linux进程管理之ARM64的三级调度域

本文详细介绍了Linux系统中ARM64架构的调度域管理,包括SMT、MC和ALL CPU三个层次。从Cpu0和Cpu8的视角分析了一级、二级和三级调度域的构成,并探讨了CPU拓扑结构、初始化过程以及调度域的建立。重点在于理解不同层级调度域的亲和性和负载均衡策略。
摘要由CSDN通过智能技术生成

基本原理

schedule domain分为三个层次,从低到高依次为SMT,MC和ALL Cpu。SMT即single multi thread,level0调度域,同一个物理Core中的所有thread都在该调度域中;MC即multi Core,level 1调度域,同一个cluster中的所有物理Core中的CPU都在该调度域中;ALL Cpu,level2调度域,也是最高级别的调度域,该调度域包括SoC中所有的CPU。其中如果不支持超线程,则没有SMT调度域,如果是单核SoC,则没有MC调度域,但是包括所有CPU的调度域一定是存在的,也就是说单核系统只有一个调度域,这个调度域中只有一个CPU。

下面我们用一个比较典型架构的SoC来做说明:

SoC拓扑

该SoC集成了两个NUMA Node,每个NUMA Node集成两个cluster,每个Cluster集成了两个物理Core,每个物理Core又虚拟出了两个逻辑CPU。

从Cpu0的视图来看调度域

Cpu0和Cpu1同属于一个物理Core,所以他们两个属于一级调度域;Cpu0,Cpu1,Cpu2和Cpu3同属于一个Cluster,所以他们四个属于二级调度域;Cpu0-Cpu15属于三级调度域。由此拓扑我们可以归纳出几个特性要点:

  • 一级调度域中的CPU亲和性最高。
  • 高一级的调度域覆盖低一级的调度域。
  • 做负载均衡的时候应该先尝试在一级调度域做均衡,一级调度域均衡失败,再考虑二级调度域,二级调度域失败再考虑三级调度域。

从Cpu8的视图看调度域

Cpu8和Cpu9同属于一个物理Core,所以他们两个属于一级调度域;Cpu8,Cpu9,Cpu10和Cpu11同属于一个Cluster,所以他们四个属于二级调度域;Cpu0-Cpu15属于三级调度域。由此我们可以知道,对不同的CPU来说,一级调度域和二级调度域可能是不同的,但是三级调度域一定是相同的,都包括所有的CPU。

CPU拓扑

DTS中定义的CPU拓扑最终要反应到软件上,ARM64的CPU拓扑用结构体struct cpu_topology来描述,本章节会详细介绍该结构体的定义以及初始化。

cpu_topology结构体定义

struct cpu_topology {
	int thread_id;
	int core_id;
	int cluster_id;
	cpumask_t thread_sibling;
	cpumask_t core_sibling;
};

每一个CPU都会维护这么一个结构体实例,用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值