版权声明:转载请说明,谢谢。 https://blog.csdn.net/wuming_422103632/article/details/81664820
CPU拓扑结构存在下面三个level(SMT level最低):
- SMT Level 超线程处理器的一个核心
- MC Level 多核CPU的一个核心
- DIE Level 一个物理CPU的晶片(注意不是package,package是封装好了的,肉眼看到的CPU处理器)
cpu最小级别的就是超线程处理器的一个smt核,次小的一级就是一个多核cpu的核,然后就是一个物理cpu封装,再往后就是cpu阵列,根据这些cpu级别的不同,Linux将所有同一级别的cpu归为一个“调度组”,然后将同一级别的所有的调度组组成一个“调度域”cpu最小级别的就是超线程处理器的一个smt核,次小的一级就是一个多核cpu的核,然后就是一个物理cpu封装,再往后就是cpu阵列,根据这些cpu级别的不同,Linux将所有同一级别的cpu归为一个“调度组”,然后将同一级别的所有的调度组组成一个“调度域”
对于ARM 架构,目前由于不支持超线程技术,只有DIE和MC两个Topology Level
/*
* Topology list, bottom-up.
*/
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
{ cpu_cpu_mask, SD_INIT_NAME(DIE) },
{ NULL, },
};
static struct sched_domain_topology_level *sched_domain_topology =
default_topology;
#define for_each_sd_topology(tl) \
for (tl = sched_domain_topology; tl->mask; tl++)
void set_sched_topology(struct sched_domain_topology_level *tl)
{
sched_domain_topology = tl;
}
拓扑结构图
以一个现在典型的8核心,4小核4大核的ARM架构的处理器为例
上面是两个cluster的,你能够看到DIE和MC两个level的区别。下面更加精细的区分了DIE和MC,更加好理解,也方便更好的去理解sched domain,sched group,和负载均衡。
上面两张都别人的图,具体我文章link:
- https://blog.csdn.net/memory01/article/details/80964142
- https://blog.csdn.net/pwl999/article/details/78817905
- https://www.ibm.com/developerworks/cn/linux/l-cn-schldom/
写的非常的好,大家可以仔细check下,理解调度域和调度组的概念对负载均衡很有帮助。