NUMA架构下的CPU拓扑

来源:互联网 发布:高校财经数据库 编辑:程序博客网 时间:2024/05/16 11:47

目前多核已经越来越普遍的使用,LinuxNUMA架构的支持也越来越完善。对于内存管理、多处理的负载均衡调度等进行了大量的优化工作。


NUMA相关的几个概念有nodesocketcorethreadSocket是一个物理上的概念,指的是主板上的cpu插槽。Node是一个逻辑上的概念,对应于socketCore就是一个物理cpu,一个独立的硬件执行单元。Thread就是超线程的概念,是一个逻辑cpu,共享core上的执行单元。


下面将结合自己机器来看下NUMA架构下的CPU拓扑关系。

NUMA使用node来管理cpu和内存。


可以看到机器上有两个node,分别为node0node1


Socket的信息可以通过/proc/cpuinfo查看,里面的physical id标示的就是socket号。


可以看到机器上面有两个socket,编号分别为01。我的机器上一个node对应于一个scoket


Node0上共有20cpu,编号为cpu0~cpu9cpu20~cpu29


Node1上共有20cpu,编号为cpu10~cpu19cpu30~cpu39


下面看下core的信息,core也是通过/proc/cpuinfo查看,其中和core相关的信息有:

core id

cpu在所在core中的编号

cpu cores

一个socket上面有多少个core

我的机器上每个socket上面有10个core


10core的编号为0~48~12



上面的信息可知每个Node上面有20cpu10core,则每个core里面有两个cpu,也就是thread的概念。


下面来看下thread的信息,cat /proc/cpuinfo可以看到每个thread,也就是每个逻辑cpu的详细信息。


上面是cpu0的详细信息,红色框中是相关的几条信息。

physical id0表示此cpusocket0也就是node0上面

cpu cores10表示此node上面有10core

core id0表示此cpunode0core0上面

siblings20表示此cpu0core0里面的兄弟逻辑cpucpu20


到目前为止我们知道了cpu0cpu20node0上的core0里面的两个兄弟逻辑cpu,按照intel的组织架构,这两个cpu是应该共享L1 cacheL2 cache的。L1 cache又分为数据cache和指令cache



CPU0cache信息如上图所示,index0对应的是L1 Data Cacheindex1对应的是L1 Instruction Cacheindex2对应的是L2 Cacheindex3对应的是L3 Cache


L1 Data Cache的大小为32k字节,共享此cachecpucpu0cpu20

L1 Instruction Cache的大小为32k字节,共享此cachecpucpu0cpu20

L2 Cache的大小为256k字节,共享此cachecpucpu0cpu20

L3 Cache的大小为25600K字节,共享此cachecpucpu0~cpu9cpu20~cpu29,即node0上的所有cpu


遍历所有的cpu信息,可知cpu的拓扑架构如下所示:


上面的CPU拓扑架构图还不完整,每个node都有一个对应的本地内存。假设node0的本地内存标记为mem0node1的本地内存标记为mem1mem0对于node0就是本地内存,mem1对于node0就是远端内存;反之对于mem1亦有类似关系。

访问本地内存的速度要快于访问远端内存的速度。访问速度与node的距离有关系,node间的距离我们称为node distance


Node0的本地内存大小为32209MB,Node1的本地内存大小为32316MB。Node0到本地内存的distance10,到node1的内存distance距离为20Node1到本地内存的distance10,到node0的内存distance距离为20