
我對我的伺服器擁有的 CPU 數量有點困惑。
它正在運行,Intel(R) Xeon(R) Gold 6242R CPU @ 3.10GHz
根據英特爾官方文檔包含20個物理核心。
這裡的問題是lscpu
命令的輸出(過濾了一些行):
CPU(s): 80
On-line CPU(s) list: 0-79
Thread(s) per core: 2
Core(s) per socket: 20
Socket(s): 2
NUMA node(s): 2
Model name: Intel(R) Xeon(R) Gold 6242R CPU @ 3.10GHz
NUMA node0 CPU(s): 0-19,40-59
NUMA node1 CPU(s): 20-39,60-79
據我了解,actual physical cores = CPU(s) / thread(s) per core
但後來我得到了 40,這是我預期的兩倍。
有人可以解釋一下這裡發生了什麼事以及到底是什麼CPU(s), thread(s) per core, core(s) per socket, socet(s)
意思嗎?
答案1
Sockets
表示系統中有多少個物理CPU。Cores per socket
是每個實體 CPU 有多少個完整的 CPU 核心(包括載入/解碼邏輯)。Threads per core
是單一核心上可以調度多少個執行緒(超執行緒)。簡單來說就是CPU中所使用的硬體前程式碼的實際執行量加倍,使 CPU 可以準備執行多個不同的任務。它允許 CPU 在指令到達 CPU 的執行核心之前取得/解碼指令。它可以防止或減少管道失速。CPU
表示“可調度實體”,這是作業系統將擁有的運行佇列數量,因此將是sockets x cores per socket x threads per core
在您的例子中,您有 2 個實體 CPU,每個 CPU 有 20 個核心,每個核心可以運行 2 個執行緒(超執行緒)。所以2x20x2 = 80
,即顯示的數量CPUs
。
答案2
混亂來自於一個非常簡單的細節,從 infolscpu
命令向您展示的內容中可能不清楚該細節。
問題是:你的伺服器實際上有 2Intel(R) Xeon(R) Gold 6242R CPU
個,這在行中提到了Socket(s)
。
正如英特爾文件所述,這些 CPU 中的每一個都包含 20 個實體核心(該Core(s) per socket
行),總共有 40 個實體核心。
這些核心中的每一個都能夠「同時」運行 2 個執行緒(Thread(s) per core
線)。
因此:2 個 Intel Xeon,每個 20 個物理核心,每個核心 2 個線程,總共提供 80 個“可以執行進程的單元”或“CPU”
答案3
CPU 的概念現在有點抽象,這始於超線程(90 年代末),然後是 Intel Core(00 年代初)系列。在此之前,您肯定擁有多 CPU 系統,但它們都是多實體 CPU。
但對於超執行緒和多核心單 CPU,CPU 的物理數量與 CPU 上執行的程式碼所看到的 CPU 的邏輯數量不同。
Socket(s): 2
您有 2 個實體 CPU,例如“主機板上插入了散熱器”
Core(s) per socket: 20
每個實體 CPU 有 20 個內核,它們看起來和運作起來都像是 Linux 中的獨立 CPU。核心至少共享相同的 L3 緩存,可能是 L2 緩存,並且可能有自己的 L1 緩存 - 因此不如具有自己的 L3/L2/L1 的單一套接字那麼出色,但也差不多了。
由於這是每個套接字,因此有 2 * 20 = 40 個。
Thread(s) per core: 2
每個核心有 2 個 SMT 線程,這些線程由 CPU 的微架構實現,基本上看起來就像 Linux 上的獨立 CPU
它們不會像真正的獨立核心那麼快。
微架構上的線程嘗試從核心獲取當前未使用的管道階段,但如果繁忙,可能不得不等待- 並且CPU 已經嘗試讓自己保持非常忙碌,因此2 個核心上的2 個線程遠不等於4 個核心,但是它可以使程式碼運行得更快一些。
請注意,與核心或套接字相比,Spectre 和類似漏洞跨執行緒的可能性更大,因為核心資源是共享的。
不管怎樣,因為這是每個核心,也是每個插槽,所以是 2 * 20 * 2,這給你:
CPU(s): 80
答案4
您的伺服器使用 2 個「處理器晶片」(在 2 個插槽上),每個處理器晶片有 20 個實體核心。
每個核心可以處理2個線程。
這就是為什麼它顯示 2(處理器晶片)* 20(每個部件的核心數)* 2(每個核心可以處理的執行緒數)= 80 個 CPU
在這種情況下,CPU 代表「可調度實體」。機器可以運行的執行緒數量。