CPU拓撲結構


本篇旨在認識一下以下三種CPU拓撲結構分別是什么:

 

  • Symmetric multiprocessing (SMP)
  • Non-uniform memory access (NUMA)
  • Simultaneous Multi-Threading (SMT)

Symmetric multiprocessing (SMP)

對稱多處理(英語:Symmetric multiprocessing,縮寫為SMP),也譯為均衡多處理、對稱性多重處理,是一種多處理器的電腦硬件架構,在對稱多處理架構下,每個處理器的地位都是平等的,對資源的使用權限相同。現代多數的多處理器系統,都采用對稱多處理架構,也被稱為對稱多處理系統(Symmetric multiprocessing system),其組織方式如下圖所示:

SMP Organization

每個處理器都有自己的L1緩存,共享L2緩存,通過某種互聯方式(如系統總線)共享資源如內存和IO。

Non-uniform memory access (NUMA)

是什么

非統一內存訪問架構(英語:Non-uniform memory access,簡稱NUMA),是在許多multi-sockets系統中SMP設計的衍生品——CPU規模因摩爾定律指數級發展,而總線發展緩慢,導致多核CPU通過一條總線共享內存成為瓶頸,NUMA的出現,使得CPU平均划分為若干個Chip(不多於4個),每個Chip有自己的內存控制器及內存插槽,CPU訪問自己Chip上所插的內存時速度快,而訪問其他CPU所關聯的內存(下文稱Remote Access)的速度較慢,如下圖所示:

NUMA相關的幾個概念有nodesocketcorethread,先來一張示意圖:

NUMA four concepts

  • Socket是一個物理上的概念,指的是主板上的cpu插槽
  • Node是一個邏輯上的概念,上圖中沒有提及。由於SMP體系中各個CPU訪問內存只能通過單一的通道,導致內存訪問成為瓶頸,cpu再多也無用。后來引入了NUMA,通過划分node,每個node有本地RAM,這樣node內訪問RAM速度會非常快。但跨Node的RAM訪問代價會相對高一點
  • Core就是一個物理cpu,一個獨立的硬件執行單元,比如寄存器,計算單元等
  • Thread就是超線程(HyperThreading)的概念,是一個邏輯cpu,共享core上的執行單元

下面是SMP和NUMA的對比圖:

SMPvsNUMA

由此可以總結這樣的邏輯關系(包含):Node > Socket > Core > Thread

查看CPU信息

常用的方式是lscpunumactl

[root@10e131e69e15 ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                32
On-line CPU(s) list:   0-31
Thread(s) per core:    2
Core(s) per socket:    8
Socket(s):             2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 63
Model name:            Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz
Stepping:              2
CPU MHz:               1712.343
BogoMIPS:              4793.31
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              20480K
NUMA node0 CPU(s):     0-7,16-23
NUMA node1 CPU(s):     8-15,24-31

可以看到,我們172.28.8.15的物理機上一共有兩顆CPU(Sockets:2),每顆CPU 8核(Cores per socket:8),每一個核是雙線程(Threads per core:2),所以一共2*8*2 = 32個processor。此外可以看到當前是NUMA架構,node0包含第0-7,16-23個的CPU,node1包含第8-15,24-31個CPU。我們還可以使用numactl -Hnumactl --hardware查看NUMA信息:

[root@10e131e69e15 ~]# numactl -H
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
node 0 size: 32652 MB
node 0 free: 280 MB
node 1 cpus: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
node 1 size: 32768 MB
node 1 free: 64 MB
node distances:
node   0   1
  0:  10  21
  1:  21  10

一共兩個node,每個node32G內存。注意,因為我們開啟了HyperThreading,所以兩個node上的CPU並不是連續的,綁定時避免綁定到兄弟核上。

如果是非NUMA架構,則所有的cpu都划分到一個node中,如:

[root@f-packstack-q ~(keystone_admin)]# numactl --hardware
available: 1 nodes (0)
node 0 cpus: 0 1 2 3
node 0 size: 8095 MB
node 0 free: 555 MB
node distances:
node   0
  0:  10

注:在OpenStack中,SMP CPU被稱為cores(核心),NUMA單元或節點被稱為sockets(套接字),而SMT CPU被稱為thread(線程)。例如,帶有HyperThreading(超線程技術)的四sockets八cores系統將有四個sockets,每個socket八個內核,每個內核兩個線程,共64個(邏輯)CPU。

Simultaneous Multi-Threading (SMT)

同步多線程(英語:Symmetric multithreading,縮寫為SMT)是一種在一個CPU 的時鍾周期內能夠執行來自多個線程的指令的硬件多線程技術。本質上,同步多線程是一種將線程級並行處理(多CPU)轉化為指令級並行處理(同一CPU)的方法。

SMT示意圖

SMT是與SMP相輔相成的設計。盡管SMP系統中的CPU共享總線和一些內存,但SMT系統中的CPU共享更多的組件。共享組件的CPU稱為線程同級。所有CPU在系統上都顯示為可用的CPU,並可以並行執行工作負載。但是,與NUMA一樣,線程競爭共享資源。

Reference

[1].Cpu bindings (一) 理解cpu topology
[2].NUMA架構的CPU -- 你真的用好了么?
[3].NUMA體系結構詳解
[4].CPU topologies - OpenStack


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM