Linux下判斷cpu物理個數,幾核,是超線程還是多核心

今天查看一個HP DL580 機器, 發現 /proc/cpuinfo 上有 64 條記錄(0~63), 即 64 核, 但是physical_id 是 0~3 ,表示有 4 顆實體的CPU , 然而cpu cores = 8 , 算出來應該是 4*8=32核 , 看到的卻是64, 後來發現siblings = 16表示超線程 (16/8=2 >1) . 所以是 4*16=64 核 。

siblings : 16
core id : 11
cpu cores : 8


相關資料:

-----------------------------------------------------

目前intel新的多核心cpu都會在後面顯示具體的型號數字,例如:
model name : Intel(R) Xeon(R) CPU X3230 @ 2.66GHz
說明是 Xeon 3230的cpu,而不顯示型號的具體數字的,大部分都是奔騰的CPU。很多主機商都騙人,用奔騰的cpu,卻說是多核心的CPU。
探針看到的數據:
類型:Intel(R) Xeon(TM) CPU 2.80GHz 緩存:1024 KB
類型:Intel(R) Xeon(TM) CPU 2.80GHz 緩存:1024 KB
類型:Intel(R) Xeon(TM) CPU 2.80GHz 緩存:1024 KB
類型:Intel(R) Xeon(TM) CPU 2.80GHz 緩存:1024 KB
沒有具體的型號,緩存1M,一般都是奔騰系列的cpu,或者是intel假雙核的cpu,具體要根據上面說的去判斷。新的多核心cpu都能看到具體的型號。另外多核心的xeon的CPU,一般主頻都不高,達到2.8和3.0的只有很少的幾個高端CPU型號,一般主機商不會用這麼好的。

一些操作系統的最新版本已經更新了 /proc/cpuinfo 文件,以支持多路平臺。如果您的系統中的 /proc/cpuinfo 文件能夠正確地反映出處理器信息,那麼就不需要執行上述步驟。反之,可採用本文中的信息進行解釋。

/proc/cpuinfo 文件包含系統上每個處理器的數據段落。/proc/cpuinfo 描述中有 6 個條目適用於多內核和超線程(HT)技術檢查:vendor id, processor, physical id, core id, siblings 和 cpu cores。

vendor id 如果處理器爲英特爾處理器,則字符串是 GenuineIntel。
processor 包括這一邏輯處理器的唯一標識符。
physical id 包括每個物理封裝的唯一標識符。
core id 保存每個內核的唯一標識符。
siblings 列出了位於相同物理封裝中的邏輯處理器的數量。
cpu cores 包含位於相同物理封裝中的內核數量。

1. 擁有相同 physical id 的所有邏輯處理器共享同一個物理插座,每個 physical id 代表一個唯一的物理封裝。
2. Siblings 表示位於這一物理封裝上的邏輯處理器的數量,它們可能支持也可能不支持超線程(HT)技術。
3. 每個 core id 均代表一個唯一的處理器內核,所有帶有相同 core id 的邏輯處理器均位於同一個處理器內核上。簡單的說:“siblings”指的是一個物理CPU有幾個邏輯CPU,”cpu cores“指的是一個物理CPU有幾個核。
4. 如果有一個以上邏輯處理器擁有相同的 core id 和 physical id,則說明系統支持超線程(HT)技術。
5. 如果有兩個或兩個以上的邏輯處理器擁有相同的 physical id,但是 core id 不同,則說明這是一個多內核處理器。cpu cores 條目也可以表示是否支持多內核。


不應該按照flags裏是否有 ht 標誌來判斷系統是否有超線程能力,而應該:
如果“siblings”和“cpu cores”一致,則說明不支持超線程,或者超線程未打開。
如果“siblings”是“cpu cores”的兩倍,則說明支持超線程,並且超線程已打開。

例如,如果系統包含兩個物理封裝,每個封裝中又包含兩個支持超線程(HT)技術的處理器內核,則 /proc/cpuinfo 文件將包含此數據。(注:數據並不在表格中。)

processor 0 4 2 6 1 5 3 7
physical id 0 0 0 0 1 1 1 1
core id 0 0 1 1 2 2 3 3
siblings 4 4 4 4 4 4 4 4
cpu cores 2 2 2 2 2 2 2 2

此例說明:

1)一個物理封裝有四個內核,即有4個邏輯處理器。

2)一個內核上有2個不同的processer,即系統支持超線程技術(HT)。

3)cpu cores條目爲2,而siblings的數目卻是4,故支持超線程技術(4/2=2>1)。

4)值得注意的是physical id和core id的編號可能是也可能不是連續的。系統上有兩個物理封裝並不罕見,而且physical id可能等於0和3。

可通過如下方法查詢CPU情況:

1. 邏輯CPU個數:

# cat /proc/cpuinfo | grep “processor” | wc -l

2. 物理CPU個數:
# cat /proc/cpuinfo | grep “physical id” | sort | uniq | wc -l

3. 每個物理CPU中Core的個數:
# cat /proc/cpuinfo | grep “cpu cores” | wc -l

是否爲超線程?
如果有兩個邏輯CPU具有相同的”core id”,那麼超線程是打開的。

4. 每個物理CPU中邏輯CPU(可能是core, threads或both)的個數:
# cat /proc/cpuinfo | grep “siblings”


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章