linux下cpu物理個數、多核、超線程判斷解析


在Linux體系中,供給了proc文件體系顯示體系的軟硬件信息。若是想懂得體系中CPU的供給商和相干設備信息,則可以經由過程/proc/cpuinfo文件獲得。本文章針對該文件進行簡單的總結。

基於指令集(ISA)的CPU產生的/proc/cpuinfo文件不一樣,基於X86指令集CPU的/proc/cpuinfo文件包含如下內容:

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 23
model name      : Intel(R) Xeon(R) CPU           E5430  @ 2.66GHz
stepping        : 10
cpu MHz         : 2666.890
cache size      : 6144 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 4
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni tm2 ssse3 lahf_lm dts
bogomips        : 5333.78
clflush size    : 64
cache_alignment : 64
address sizes   : 38 bits physical, 48 bits virtual
power management:

以上輸出項的含義如下:

processor :體系中邏輯處理懲罰核的編號。對於單核處理懲罰器,則課認為是其CPU編號,對於多核處理懲罰器則可所以物理核、或者應用超線程技巧虛擬的邏輯核
vendor_id :CPU建造商
cpu family :CPU產品系列代號
model   :CPU屬於其系列中的哪一代的代號
model name:CPU屬於的名字及其編號、標稱主頻
stepping   :CPU屬於建造更新版本
cpu MHz   :CPU的實際應用主頻
cache size   :CPU二級緩存大小
physical id   :單個CPU的標號
siblings       :單個CPU邏輯物理核數
core id        :當前物理核在其所處CPU中的編號,這個編號不必然連氣兒
cpu cores    :該邏輯核所處CPU的物理核數
apicid          :用來區分不合邏輯核的編號,體系中每個邏輯核的此編號必定不合,此編號不必然連氣兒
fpu             :是否具有浮點運算單位(Floating Point Unit)
fpu_exception  :是否支撐浮點策畫異常
cpuid level   :履行cpuid指令前,eax存放器中的值,按照不合的值cpuid指令會返回不合的內容
wp             :注解當前CPU是否在內核態支撐對用戶空間的寫保護(Write Protection)
flags          :當前CPU支撐的功能
bogomips   :在體系內核啟動時粗略測算的CPU速度(Million Instructions Per Second)
clflush size  :每次刷新緩存的大小單位
cache_alignment :緩存地址對齊單位
address sizes     :可接見地址空間位數
power management :對能源經管的支撐

CPU信息中flags各項含義:

fpu: Onboard (x87) Floating Point Unit
vme: Virtual Mode Extension
de: Debugging Extensions
pse: Page Size Extensions
tsc: Time Stamp Counter: support for RDTSC and WRTSC instructions
msr: Model-Specific Registers
pae: Physical Address Extensions: ability to access 64GB of memory; only 4GB can be accessed at a time though
mce: Machine Check Architecture
cx8: CMPXCHG8 instruction
apic: Onboard Advanced Programmable Interrupt Controller
sep: Sysenter/Sy***it Instructions; SYSENTER is used for jumps to kernel memory during system calls, and SY***IT is used for jumps: back to the user code
mtrr: Memory Type Range Registers
pge: Page Global Enable
mca: Machine Check Architecture
cmov: CMOV instruction
pat: Page Attribute Table
pse36: 36-bit Page Size Extensions: allows to map 4 MB pages into the first 64GB RAM, used with PSE.
pn: Processor Serial-Number; only available on Pentium 3
clflush: CLFLUSH instruction
dtes: Debug Trace Store
acpi: ACPI via MSR
mmx: MultiMedia Extension
fxsr: FXSAVE and FXSTOR instructions
sse: Streaming SIMD Extensions. Single instruction multiple data. Lets you do a bunch of the same operation on different pieces of input: in a single clock tick.
sse2: Streaming SIMD Extensions-2. More of the same.
selfsnoop: CPU self snoop
acc: Automatic Clock Control
IA64: IA-64 processor Itanium.
ht: HyperThreading. Introduces an imaginary second processor that doesn’t do much but lets you run threads in the same process a  bit quicker.
nx: No ute bit. Prevents arbitrary code running via buffer overflows.
pni: Prescott New Instructions aka. SSE3
vmx: Intel Vanderpool hardware virtualization technology
svm: AMD “Pacifica” hardware virtualization technology
lm: “Long Mode,” which means the chip supports the AMD64 instruction set
tm: “Thermal Monitor” Thermal throttling with IDLE instructions. Usually hardware controlled in response to CPU temperature.
tm2: “Thermal Monitor 2″ Decrease speed by reducing multipler and vcore.
est: “Enhanced SpeedStep”

1.查看CPU信息命令
cat /proc/cpuinfo
2.查看內存信息命令
cat /proc/meminfo
3.查看硬盤信息命令
fdisk -l

 

按照以上內容,我們則可以很便利的知道當前體系關於CPU、CPU的核數、CPU是否啟用超線程等信息。

1.查詢體系CPU的物理個數:cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l

2.查詢體系具有幾許個邏輯核:cat /proc/cpuinfo | grep "processor" | wc -l

3.查詢體系CPU的物理核數:cat /proc/cpuinfo | grep "cpu cores" | uniq

4.查詢體系CPU是否啟用超線程:cat /proc/cpuinfo | grep -e "cpu cores"  -e "siblings" | sort | uniq

5.查詢CPU的主頻:cat /proc/cpuinfo |grep MHz|uniq

輸出舉例:

cpu cores    : 6
siblings     : 6

    6.查看當前系統內核信息:$ uname -a
Linux localhost.localdomain 2.6.32-220.el6.x86_64 #1 SMP Tue Dec 6 19:48:22 GMT2011x86_64 x86_64 x86_64 GNU/Linux
    7.查看當前操作系統發行版信息:cat /etc/issue | grep Linux
    Red Hat Enterprise Linux AS release 4 (Nahant Update 5)
 
    8.查看邏輯CPU、CPU型號:cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
    8  Intel(R) Xeon(R) CPU            E5410   @ 2.33GHz
 
    9.# cat /proc/cpuinfo | grep physical | uniq -c
      4 physical id      : 0
      4 physical id      : 1
    (說明實際上是兩顆4核的CPU)
 
    10.# getconf LONG_BIT
    32
    (說明當前CPU運行在32bit模式下, 但不代表CPU不支持64bit)
 
    11.# cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l
    8
    (結果大於0, 說明支持64bit計算. lm指long mode, 支持lm則是64bit)
 
    12.若是cpu cores數量和siblings數量一致,則沒有啟用超線程,不然超線程被啟用。

查詢體系CPU是否支撐某項功能,則根以上類似,輸出成果進行sort, uniq和grep就可以獲得成果。

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

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

例如,如果系統包含兩個物理封裝,每個封裝中又包含兩個支持超線程(HT)技術的處理器內核,則 /proc/cpuinfo 文件將包含此數據。(注:數據並不在表格中。)
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
?processor ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7
?physical id ?0 ?1 ?0 ?1 ?0 ?1 ?0 ?1
?core id ?0 2 1 ?3 ?0 ?2 ?1 ?3
?siblings ?4 ?4 ?4 ?4 ?4 ?4 ?4 ?4
?cpu cores ?2 ?2 ?2 ?2 ?2 ?2 ?2 ?2

 

此例說明邏輯處理器 0 和 4 駐留在物理封裝 0 的內核 0 上。這就表示邏輯處理器 0 和 4 支持超線程(HT)技術。相同的工作可用於封裝 0 內核 1 上的邏輯處理器 2 和 6,封裝 1 內核 2 上的邏輯處理器 1 和 5,以及封裝 1 內核 3 上的邏輯處理器 3 和 7。此系統支持超線程(HT)技術,因為兩個邏輯處理器共享同一個內核。有兩種方式可以確定是否支持多內核。由於內核 0 和 1 存在於封裝 0 上,而內核 2 和 3 存在於封裝 1 上,所以這是一個多內核系統。此外,cpu cores 條目為 2,也說明有兩個內核駐留在物理封裝中。這是一個多路系統,因為有兩個封裝。

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

CPU IDCPU ID是CPU生產廠家為識別不同類型的CPU,而為CPU制訂的不同的單一的代碼;不同廠家的CPU,其CPU ID定義也是不同的;如 “0F24”(Inter處理器)、“681H”(AMD處理器),根據這些數字代碼即可判斷CPU屬於哪種類型,這就是一般意義上的CPU ID。
由 於計算機使用的是十六進制,因此CPU ID也是以十六進制表示的。Inter處理器的CPU ID一共包含四個數字,如“0F24”,從左至右分別表示 Type(類型)、Family(系列)、Mode(型號)和Stepping(步進編號)。從CPUID為“068X”的處理器開始,Inter另外增 加了Brand ID(品種標識)用來輔助應用程序識別CPU的類型,因此根據“068X”CPUID還不能正確判別Pentium和Celerom處理 器。必須配合Brand ID來進行細分。AMD處理器一般分為三位,如“681”,從左至右分別表示為Family(系列)、Mode(型號)和 Stepping(步進編號)。
Type(類型)
類型標識用來區別INTEL微處理器是用於由最終用戶安裝,還是由專業個人計算機系 統集成商、服務公司或制作商安裝;數字“1”標識所測試的微處理器是用於由用戶安裝的;數字“0”標識所測試的微處理器是用於由專業個人計算機系統集成 商、服務公司或制作商安裝的。我們通常使用的INTEL處理器類型標識都是“0”,“0F24”CPUID就屬於這種類型。
Family(系列)
系 列標識可用來確定處理器屬於那一代產品。如6系列的INTEL處理器包括Pentium Pro、Pentium II、 Pentium II Xeon、Pentium III和Pentium III Xeon處理器。5系列(第五代)包括Pentium處理器和采用 MMX技術的Pentium處理器。AMD的6系列實際指有K7系列CPU,有DURON和ATHION兩大類。最新一代的 INTEL Pentium 4系列處理器(包括相同核心的Celerom處理器)的系列值為“F”
Mode(型號)
型號標識可用來 確定處理器的制作技術以及屬於該系列的第幾代設計(或核心),型號與系列通常是相互配合使用的,用於確定計算機所安裝的處理器是屬於某系列處理器的哪種特 定類型。如可確定Celerom處理器是Coppermine還是Tualutin核心;Athlon XP處理器是Paiomino還是 Thorouhgbred核心。
Stepping(步進編號)
步進編號用來標識處理器的設計或制作版本,有助於控制和跟蹤處理器的更 改,步進還可以讓最終用戶更具體地識別其系統安裝的處理器版本,確定微處理器的內部設計或制作特性。步進編號就好比處理器的小版本號,如CPUID為 “686”和“686A”就好比WINZIP8.0和8.1的關系。步進編號和核心步進是密切聯系的。如CPUID為“686”的Pentium III 處理器是cCO核心,而“686A”表示的是更新版本cD0核心。
Brand ID(品種標識)
INTEL從Coppermine核心的處理器開始引入Brand ID作為CPU的輔助識別手段。如我們通過Brand ID可以識別出處理器究竟是Celerom還是Pentium 4。
在LINUX系統中,一顆超線程CPU,將被識別為兩顆CPU,一顆雙核CPU,也被識別為兩顆CPU,而一顆雙核超線程CPU,會被認為是4顆CPU。那么,我們如何確定我們機器的CPU數量呢?
仔細查看/proc/cpuinfo我們會發現以下信息:
1、physical id代表每顆物理CPU的ID,有幾個CPU ID,就有幾顆物理CPU。
2、siblings區別出了超線程CPU中的邏輯CPU核心,一顆超線程CPU,其physical id是
一樣的,但是siblings是不同的。
3、core id和cpu cores用來對雙核(多核心)CPU進行區分的,CPU cores表示這顆
CPU有幾個核心,而core id用來表示CPU的各個核心的。

例如:如何區分一顆雙核超線程CPU?
cat /etc/proc/cpuinfo
{
physical id=0  (1顆物理CPU)
[
core id=0    (雙核CPU中的第一個核心)
cpu cores=2  (雙核CPU)
siblings=0 (此核心中的第一個邏輯CPU)
siblings=1 (此核心中的另一個邏輯CPU)
]
[
core id=1    (雙核CPU中的另一個核心)
cpu cores=2  (雙核CPU)
siblings=0 (此核心中的第一個邏輯CPU)
siblings=1 (此核心中的另一個邏輯CPU)
]
}


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com