首頁 >運維 >linux運維 >一起聊聊linux上numa架構(圖文詳解)

一起聊聊linux上numa架構(圖文詳解)

WBOY
WBOY轉載
2022-03-03 06:00:524458瀏覽

這篇文章帶給大家啦linux中numa架構介紹的相關知識,希望對大家有幫助。

一起聊聊linux上numa架構(圖文詳解)

以下案例是基於 Ubuntu 16.04,同樣適用於其他的 Linux 系統。我使用的案例環境如下:

機器配置:32 CPU,64GB 記憶體

在NUMA中儲存層次的概念:

一起聊聊linux上numa架構(圖文詳解)

一起聊聊linux上numa架構(圖文詳解)

一起聊聊linux上numa架構(圖文詳解)

1)處理器層:單一物理核,稱為處理器層。 2)本地節點層:對於某個節點中的所有處理器,此節點稱為本地節點。 3)home節點層:與本機節點相鄰的節點稱為home節點。 4)遠端節點層:非本地節點或鄰居節點的節點,稱為遠端節點。 CPU存取不同類型節點記憶體的速度是不相同的,訪問本地節點的速度最快,訪問遠端節點的速度最慢,即訪問速度與節點的距離有關,距離越遠訪問速度越慢,此距離稱作Node Distance。應用程式要盡量的減少不同CPU模組之間的交互,如果應用程式能有方法固定在一個CPU模組裡,那麼應用的效能將會有很大的提升。

**以鯕鵬920處理器講一下cpu晶片的構成:**鯤鵬920處理器片上系統的每個超級核心集群包含6個核心集群、2個I/O集群和4個DDR控制器。每個超級核心集群封裝成一個CPU晶片。每個晶片上整合了4個72位元(64位元資料加8位元ECC)、資料傳輸率最高為3200MT/s的高速DDR4通道,單一晶片可支援最多512GB×4的DDR儲存空間。 L3 Cache在物理上被分成兩個部分:L3 Cache TAG和L3 Cache DATA。 L3 Cache TAG整合在每個核心叢集中,以降低監聽延遲。 L3 Cache DATA則直接連接片上匯流排。 Hydra根代理(Hydra Home Agent,HHA)是處理多晶片系統Cache一致性協定的模組。 POE_ICL是系統配置的硬體加速器,一般可以用作分組順序整理器、訊息佇列、訊息分發或實現某個處理器核心的特定任務等。此外,每個超級核心叢集在實體上也配置了通用中斷控制器分發器(GICD)模組,相容於ARM的GICv4規格。當單晶片或多晶片系統中有多個超級核心集群時,只有一個GICD對系統軟體可見。

numactl的使用

Linux提供了一個手工調優的命令numactl(預設不安裝),在Ubuntu上的安裝命令如下:

sudo apt install numactl -y
###首先你可以透過man numactl或numactl --h來了解參數的功能與輸出的內容。檢視系統的numa狀態:###
numactl --hardware
###運行得到如下的結果:###
available: 4 nodes (0-3)
node 0 cpus: 0 1 2 3 4 5 6 7
node 0 size: 16047 MB
node 0 free: 3937 MB
node 1 cpus: 8 9 10 11 12 13 14 15
node 1 size: 16126 MB
node 1 free: 4554 MB
node 2 cpus: 16 17 18 19 20 21 22 23
node 2 size: 16126 MB
node 2 free: 8403 MB
node 3 cpus: 24 25 26 27 28 29 30 31
node 3 size: 16126 MB
node 3 free: 7774 MB
node distances:
node   0   1   2   3
  0:  10  20  20  20
  1:  20  10  20  20
  2:  20  20  10  20
  3:  20  20  20  10
############根據這個圖與指令得到的結果,可以看到,此系統共有4個node,各領取8個CPU和16G記憶體。 這裡還要注意的就是CPU共享的L3 cache也是會自己領取對應的空間。透過numastat指令可以查看numa狀態,回傳值內容:######numa_hit:是打算在該節點上分配內存,最後從這個節點分配的次數;######numa_miss:是打算在該節點分配內存,最後卻從其他節點分配的次數;######numa_foreign:是打算在其他節點分配內存,最後卻從這個節點分配的次數;######interleave_hit :採用interleave策略最後從本節點分配的次數######local_node:該節點上的程序在該節點上分配的次數######other_node:是其他節點程序在該節點上分配的次數#######注意:如果發現 numa_miss 數值比較高時,表示需要調整分配策略。例如將指定進程關聯綁定到指定的CPU上,從而提高記憶體命中率。 ###
root@ubuntu:~# numastat
                           node0           node1           node2           node3
numa_hit             19480355292     11164752760     12401311900     12980472384
numa_miss                5122680       122652623        88449951            7058
numa_foreign           122652643        88449935            7055         5122679
interleave_hit             12619           13942           14010           13924
local_node           19480308881     11164721296     12401264089     12980411641
other_node               5169091       122684087        88497762           67801
###NUMA的記憶體分配策略######--localalloc或-l:規定進程從本地節點上請求分配記憶體。 --membind=nodes或-m nodes:規定進程只能從指定的nodes上請求分配記憶體。 --preferred=node:指定一個建議的node來取得內存,如果取得失敗,則嘗試別的node。 --interleave=nodes或-i nodes:規定進程從指定的nodes上,以round robin演算法交織地請求記憶體分配。 ###
 numactl --interleave=all mongod -f /etc/mongod.conf

因为NUMA默认的内存分配策略是优先在进程所在CPU的本地内存中分配,会导致CPU节点之间内存分配不均衡,当开启了swap,某个CPU节点的内存不足时,会导致swap产生,而不是从远程节点分配内存。这就是所谓的swap insanity 现象。或导致性能急剧下降。所以在运维层面,我们也需要关注NUMA架构下的内存使用情况(多个内存节点使用可能不均衡),并合理配置系统参数(内存回收策略/Swap使用倾向),尽量去避免使用到Swap。

Node->Socket->Core->Processor

随着多核技术的发展,将多个CPU封装在一起,这个封装被称为插槽Socket;Core是socket上独立的硬件单元;通过intel的超线程HT技术进一步提升CPU的处理能力,OS看到的逻辑上的核Processor数量。

Socket = Node

Socket是物理概念,指的是主板上CPU插槽;Node是逻辑概念,对应于Socket。

Core = 物理CPU

Core是物理概念,一个独立的硬件执行单元,对应于物理CPU;

Thread = 逻辑CPU = Processor

Thread是逻辑CPU,也就是Processo

lscpu的使用

显示格式:

  • Architecture:架构

  • CPU(s):逻辑cpu颗数

  • Thread(s) per core:每个核心线程,也就是指超线程

  • Core(s) per socket:每个cpu插槽核数/每颗物理cpu核数

  • CPU socket(s):cpu插槽数

  • L1d cache:级缓存(google了下,这具体表示表示cpu的L1数据缓存)

  • L1i cache:一级缓存(具体为L1指令缓存)

  • L2 cache:二级缓存

  • L3 cache:三级缓存

  • NUMA node0 CPU(s) :CPU上的逻辑核,也就是超线程

执行lscpu,结果部分如下:

root@ubuntu:~# lscpu
Architecture:          x86_64
CPU(s):                32
Thread(s) per core:    1
Core(s) per socket:    8
Socket(s):             4
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              20480K
NUMA node0 CPU(s):     0-7
NUMA node1 CPU(s):     8-15
NUMA node2 CPU(s):     16-23
NUMA node3 CPU(s):     24-31

相关推荐:《Linux视频教程

以上是一起聊聊linux上numa架構(圖文詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.im。如有侵權,請聯絡admin@php.cn刪除