注:仅为个人理解,有错请不吝赐教
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//每个socket有10个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核数(这个属于加深知识理解,也讲得很好)