ARM调度域/调度组之概念理解

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架构的处理器为例
ARM调度域/调度组之概念理解_第1张图片
上面是两个cluster的,你能够看到DIE和MC两个level的区别。下面更加精细的区分了DIE和MC,更加好理解,也方便更好的去理解sched domain,sched group,和负载均衡。
ARM调度域/调度组之概念理解_第2张图片

上面两张都别人的图,具体我文章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下,理解调度域和调度组的概念对负载均衡很有帮助。

你可能感兴趣的:(EAS-调度器学习,linux,kernel,cfs,scheduler)