博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NUMA架构下的CPU拓扑结构
阅读量:4165 次
发布时间:2019-05-26

本文共 3122 字,大约阅读时间需要 10 分钟。

黑色部分为转载内容,蓝色部分为本人的一台主机实测,在文中使用分割线进行区别“——————”

作者:weijitao 

来源:CSDN 
原文:

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

NUMA相关的几个概念有Node、Socket、Core 以及 Thread。

  • Socket是一个物理上的概念,指的是主板上的cpu插槽。
  • Node是一个逻辑上的概念,对应于socket。
  • Core就是一个物理cpu,一个独立的硬件执行单元。
  • Thread就是超线程的概念,是一个逻辑cpu,共享core上的执行单元。

1. 查看主机Node

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

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

ls /sys/devices/system/node/node

可以看到机器上有两个node,分别为node0和node1。

——————————————————————————————————————————————————————

在自己的机器上测试:

在我自己的机器上node下没有node目录,在node下只有一个node0,所以我自己的机器应该只有一个node,用下面的指令得到下图所示的结果。

ls /sys/devices/system/node

——————————————————————————————————————————————————————

2. 查看主机Socket 

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

cat /proc/cpuinfo | grep "physical id" | sort -u
cat /proc/cpuinfo | grep "physical id" | sort -u | wc -l

 可以看到机器上面有两个socket,编号分别为0和1,原作者机器上一个node对应于一个scoket。

——————————————————————————————————————————————————————

在自己的机器上测试:

我自己的主机只有一个socket,一个node对于一个socket

——————————————————————————————————————————————————————

3. 查看每个Node的cpu

ls /sys/devices/system/node/node0/cpu

Node0上共有20个cpu,编号为cpu0~cpu9,cpu20~cpu29

ls /sys/devices/system/node/node1/cpu

Node1上共有20个cpu,编号为cpu10~cpu19,cpu30~cpu39

——————————————————————————————————————————————————————

在自己的机器上测试:

使用:ls /sys/devices/system/node/node0/cpu 命令不行,结果如下:

更改为: 

ls /sys/devices/system/node/node0 | grep cpu

 

我自己的主机只有一个4个cpu,编号为cpu0~3

——————————————————————————————————————————————————————

4. 查看主机Core信息

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

core id

此cpu在所在core中的编号

cpu cores

一个socket上面有多少个core

作者的机器上每个socket上面有10个core 

cat /proc/cpuinfo | grep "cpu cores" | sort -u

这10个core的编号为0~4和8~12。

cat /proc/cpuinfo | grep "core id" | sort -u

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

——————————————————————————————————————————————————————

在自己的机器上测试:

我自己的主机每个Node有4个cpu,4个core,每个core只有一个cpu

——————————————————————————————————————————————————————

5. 查看主机Thread 

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

cat /proc/cpuinfo

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

physical id为0表示此cpu在socket0也就是node0上面

cpu cores为10表示此node上面有10个core

core id为0表示此cpu在node0的core0上面

siblings为20表示此cpu0在core0里面的兄弟逻辑cpu为cpu20

——————————————————————————————————————————————————————

在自己的机器上测试:

———————————————————————————————————————————————————————

6. CPU拓扑结构

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

CPU0的cache信息如上图所示,index0对应的是L1 Data Cache,index1对应的是L1 Instruction Cache,index2对应的是L2 Cache,index3对应的是L3 Cache。

L1 Data Cache的大小为32k字节,共享此cache的cpu有cpu0和cpu20。

L1 Instruction Cache的大小为32k字节,共享此cache的cpu有cpu0和cpu20。

L2 Cache的大小为256k字节,共享此cache的cpu有cpu0和cpu20。

L3 Cache的大小为25600K字节,共享此cache的cpu有cpu0~cpu9和cpu20~cpu29,即node0上的所有cpu。

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

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

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

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

 

你可能感兴趣的文章
Python3.2官方文档教程--其余参数形式
查看>>
Python3.2 官方文档教程---编码风格
查看>>
Python3.2 官方文档教程--列表
查看>>
Python3.2 官方文档教程---列表当做栈、队列和递推式列表
查看>>
乐队设备--功放的学习和使用
查看>>
乐队设备--反馈抑制器学习笔记
查看>>
构建RESTful Web Service - 验证的实现和使用(HTTP 基本认证)
查看>>
Python3.2官方文档教程--嵌套列表推导式和del关键字
查看>>
Python3.2官方文档教程---元组与序列
查看>>
有一种幸福,就是看着自己的博文阅读量不断上升, 感恩生命
查看>>
Python3.2官方文档教程---Set集合
查看>>
Python中global用法详解
查看>>
MySQL按年龄段查询
查看>>
设计模式读书笔记与总结系列文章
查看>>
Struts,Hibernate,Spring经典面试题
查看>>
分享感动,追求幸福
查看>>
Python3.3.2 官方文档教程---字典
查看>>
Python3.3.2 官方文档教程---遍历技巧
查看>>
Python3.3.2 官方文档教程---深入条件控制
查看>>
编码套路的实战演练
查看>>