注:僅爲個人理解,有錯請不吝賜教
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核數(這個屬於加深知識理解,也講得很好)