Linux CPU Topology

来源:互联网 发布:工作日志软件哪个好 编辑:程序博客网 时间:2024/06/06 02:13

原文:http://www.wowotech.net/pm_subsystem/cpu_topology.html

1. 前言

在“Linux CPU core的电源管理(1)_概述”中,我们多次提到SMP、CPU core等概念,虽然硬着头皮写下去了,但是蜗蜗对这些概念总有些似懂非懂的感觉。它们和CPU的进化过程息息相关,最终会体现在CPU topology(拓扑结构)上。因此本文将以CPU topology为主线,介绍CPU有关(主要以ARM CPU为例)的知识。

另外,CPU topology除了描述CPU的组成之外,其主要功能,是向kernel调度器提供必要的信息,以便让它合理地分配任务,最终达到性能和功耗之间的平衡。这也是我将“cpu topology”归类为“电源管理子系统”的原因。

2. CPU topology

2.1 一个例子

开始之前,先看一个例子,下面是蜗蜗所使用的编译服务器的CPU architecture信息:

[xxx@cs ~]# lscpu

Architecture:          x86_64 
CPU op-mode(s):        32-bit, 64-bit 
Byte Order:            Little Endian 
CPU(s):                24 
On-line CPU(s) list:   0-23 
Thread(s) per core:    2 
Core(s) per socket:    6 
Socket(s):             2 
NUMA node(s):          2 
Vendor ID:             GenuineIntel 
CPU family:            6 
Model:                 62 
Stepping:              4 
CPU MHz:               2100.118 
BogoMIPS:              4199.92 
Virtualization:        VT-x 
L1d cache:             32K 
L1i cache:             32K 
L2 cache:              256K 
L3 cache:              15360K 
NUMA node0 CPU(s):     0,2,4,6,8,10,12,14,16,18,20,22 
NUMA node1 CPU(s):     1,3,5,7,9,11,13,15,17,19,21,23

注意其中蓝色字体部分,该服务器有24个CPU,组成方式是:2个sockets,每个socket有6个core,每个core有2个thread。另外,这些CPU可以划分为2个NUMA node。晕吧,知道我在说什么吗?不知道就对了,让我做进一步的解释。

2.2 单核和多核

在英文里面,单核(single-core)和多核(multi-core)多称作uniprocessor和multiprocessor,这里先对这些概念做一个说明:

这里所说的core(或processor),是一个泛指,是从使用者(或消费者)的角度看计算机系统。因此,core,或者processor,或者处理器(CPU),都是逻辑概念,指的是一个可以独立运算、处理的核心。

而这个核心,可以以任何形式存在,例如:单独的一个chip(如通常意义上的单核处理器);一个chip上集成多个核心(如SMP,symmetric multiprocessing);一个核心上实现多个hardware context,以支持多线程(如SMT,Simultaneous multithreading);等等。这是从硬件实现的角度看的。

最后,从操作系统进程调度的角度,又会统一看待这些不同硬件实现的核心,例如2.1中所提及的CPU(24个CPUs),因为它们都有一个共同的特点:执行进程(或线程)。

在传统的单核时代,提升处理器性能的唯一手段就是提高频率。但受限于物理工艺,频率不能无限提高(例如散热问题等)。对多核处理器来说,可利用的空间增多,散热问题就比较容易解决。这就是multiprocessor诞生的背景。

另外,现实中的多任务需求,也是multiprocessor得以发展的基础,例如智能手机中,可以使用一个processor处理通信协议,另一个processor处理UI交互、多媒体等,这可以让用户在享受“智能”的同时,确保不miss基础的通信需求。

2.3 SMP、SMT、NUMA等概念

比较常见的multiprocessor实现,是将多个功能完全相同的processor集成在一起(可以在一个chip上,也可以在多个chip),它们共享总线、memory等系统资源,这称作SMP(Symmetric Multi-Processing),如下面图片中的CORE000�   … 
        };

        big0: cpu@0 { 
                device_type = "cpu"; 
                compatible = "arm,cortex-a15"; 
                reg = <0x0>; 
        }; 
        … 
};

具体可参考“Documentation/devicetree/bindings/arm/topology.txt”中的描述。

store_cpu_topology的调用路径是:kernel_init-->smp_prepare_cpus-->store_cpu_topology,在没有从DTS中成功获取CPU topology的情况下,从ARM64的MPIDR寄存器中读取topology信息,具体可参考相应的代码,不再详细描述。

3.3 CPU topology driver

CPU topology driver位于“drivers\base\topology.c”中,基于“include/linux/topology.h”所提供的API,以sysfs的形式,向用户空间提供获取CPU topology信息的接口,lscpu应用,就是基于该接口实现的。

具体的实现比较简单,sysfs的格式可参考“Documentation\cputopology.txt”,这里不再详细说明。


0 0
原创粉丝点击