numa下socket node cpu thread的关系

时间:2024-11-13 22:05:35

注:仅为个人理解,有错请不吝赐教


socket node cpu thread的关系

socket ⇄ node

socket是一个物理上的概念,指的是主板上的cpu插槽。node是一个逻辑上的概念,对应于socket。

core ⇄ 物理cpu

core就是一个物理cpu,一个独立的硬件执行单元。

thread ⇄ 逻辑cpu

一个机器上总共有多少个cpu,则其有相对应个thread。

详细举例如下:
这里写图片描述
由上图可知
当前机器有2个sockets:

Socket(s):2//共有2个sockets

每个sockets包含1个numa node:

NUMA node(s):2//共有2个NUMA nodes

每个numa node中有6个cores:

Core(s)per socket:10//每个socket10个cores

每个cores包含2个thread:

Thread(s)per core:1//每个core有1个threads

该机器上共有20个threads/逻辑cpu:

CPU(s):20//共有20个逻辑CPU(threads)
thread = Socket(s) * Core(s) per socket * Thread(s) per core
       = 2 * 10 * 1
       = 20 

顺便提一句cache:
L1 cache分为数据cache和指令cache:

L1dcache:32K//L1datacache32k
L1icache:32K//L1instructioncache32k

node

numa架构下,访问本地内存的速度要快于访问远端内存的速度,访问速度与node的距离有关系。
这里写图片描述
上图可知
该机器上有两个node(0,1)

available: 2 nodes (0-1)

node 0的大小为32487MB,node 1的大小为32768MB

node 0 size: 32487 MB
node 1 size: 32768 MB

node 0上有10个cpu,编号为0~9:

node 0 cpus: 0 1 2 3 4 5 6 7 8 9

node 1上有10个cpu,编号为10~19:

node 1 cpus: 10 11 12 13 14 15 16 17 18 19

node 0到本地内存的距离为10,到node 1的内存距离为20;node1到本地内存的距离为10,到node 0的内存距离为20。

node distances:
node   0   1 
  0:  10  21 
  1:  21  10 

core(物理cpu)

这里写图片描述
由上图可知,我的机器上每个socket上面有10个core
这里写图片描述
由上图可知,这10个core的编号为0~4和8~12。


thread(逻辑cpu)

这里写图片描述
查看逻辑cpu,即thread的信息:

cat /proc/cpuinfo

physical id为0表示此cpu在socket 0也就是node 0上面

physical id : 0

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

cpu cores : 10

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

core id : 0

siblings 表示位于这一物理封装上的逻辑处理器的数量。简单的说:“siblings”指的是一个物理CPU有几个逻辑CPU
siblings为10表示此在core 0(物理cpu)上有10个thread(逻辑cpu)。

siblings : 10

附一些相关链接:
NUMA架构下的CPU拓扑(这个siblings解释错了,但是其他讲得非常清晰)
NUMA体系结构详解
LINUX平台上的NUMA API(A NUMA API for LINUX)(第一部分)
Linux下区分物理CPU、逻辑CPU和CPU核数(这个属于加深知识理解,也讲得很好)