在linux系統中,提供了/proc目錄下文件,顯示系統的軟硬件信息。如果想了解系統中CPU的提供商和相關配置信息,則可以查/proc/cpuinfo。但是此文件輸出項較多,不易理解。例如我們想獲取,有多少顆物理CPU,每個物理cpu核心數,以及邏輯cpu和超線程等信息,下面我們就看來一步一步的去探索。
首先要明確物理CPU、核數、邏輯cpu數的概念
①物理CPU數(physical id):主板上實際插入的cpu數量,可以數不重復的 physical id 有幾個
②CPU核心數(cpu cores):單塊CPU上面能處理數據的芯片組的數量,如雙核、四核等
③邏輯CPU數:一般情況下,
邏輯CPU=物理CPU個數×每顆核數 #不支持超線程技術或沒有開啟次技術
邏輯CPU=物理CPU個數×每顆核數 *2 #表示服務器的CPU支持超線程技術(簡單來說,它可使處理器中的1 顆內核如2 顆內核那樣在操作系統中發揮作用。這樣一來,操作系統可使用的執行資源擴大了一倍,大幅提高了系統的整體性能)
第一部分cpuinfo文件內容,涉及的項目解讀
話不多少,看圖說話。下圖是我負責維護的一台服務器的CPU信息。使用cat /proc/cpuinfo。足足輸出1500+條記錄。其中內容均和下圖相似,不同的是“:”右邊的信息不同。
下面對上圖的輸出內容進行相應解釋
processor :系統中邏輯處理核心數的編號,從0開始排序。
vendor_id :CPU制造商
cpu family :CPU產品系列代號
model :CPU屬於其系列中的哪一代的代號
model name:CPU屬於的名字及其編號、標稱主頻
stepping :CPU屬於制作更新版本
cpu MHz :CPU的實際使用主頻
cache size :CPU二級緩存大小
physical id :單個物理CPU的標號
siblings :單個物理CPU的邏輯CPU數。siblings=cpu cores [*2]。
core id :當前物理核在其所處CPU中的編號,這個編號不一定連續。
cpu cores :該邏輯核所處CPU的物理核數。比如此處cpu cores 是4個,那么對應core id 可能是 1、3、4、5。
apicid :用來區分不同邏輯核的編號,系統中每個邏輯核的此編號必然不同,此編號不一定連續
fpu :是否具有浮點運算單元(Floating Point Unit)
fpu_exception :是否支持浮點計算異常
cpuid level :執行cpuid指令前,eax寄存器中的值,根據不同的值cpuid指令會返回不同的內容
wp :表明當前CPU是否在內核態支持對用戶空間的寫保護(Write Protection)
flags :當前CPU支持的功能
bogomips:在系統內核啟動時粗略測算的CPU速度
clflush size :每次刷新緩存的大小單位
cache_alignment :緩存地址對齊單位
address sizes :可訪問地址空間位數
power management :對能源管理的支持
第二部分快速查詢想要獲取的信息
①查詢系統有幾顆物理CPU:cat /proc/cpuinfo | grep "physical id" |sort |uniq
②查詢系統每顆物理CPU的核心數:cat /proc/cpuinfo | grep "cpu cores" | uniq
③查詢系統的每顆物理CPU核心是否啟用超線程技術。如果啟用此技術那么,每個物理核心又可分為兩個邏輯處理器。
cat /proc/cpuinfo | grep -e "cpu cores" -e "siblings" | sort | uniq
如果cpu cores數量和siblings數量一致,則沒有啟用超線程,否則超線程被啟用。
④查詢系統具有多少個邏輯CPU:cat /proc/cpuinfo | grep "processor" | wc -l
補充一個小知識
查看linux是物理機還是虛擬機:dmidecode -s system-product-name
如果有寫的錯的地方,歡迎指正,聯系吳西鑫。