如何用正確的姿式查看 主機系統的CPU信息

1、關於CPU的幾個概念html

CPU的做用服務器

計算機中的中央處理單元(CPU)執行基本的計算工做 -- 運行程序。可是,一個單核的CPU同一時間只能一次執行一個任務,爲了提升計算機的處理能力,也就出現了多CPU,超線程(HT)和多核CPU的技術。多線程

大多數計算機只有一個物理CPU。單個CPU可能具備多個內核或超線程技術,可是仍然只有一個物理CPU插入主板上的單個CPU插槽。在超線程和多核CPU出現以前,人們試圖經過添加額外的CPU,爲計算機增長額外的處理能力。這須要一個帶有多個CPU插槽的主板 --將多個CPU插入不一樣的插槽。主板還須要額外的硬件將這些CPU插槽鏈接到RAM和其餘資源。這裏有不少開銷 -- 若是CPU須要相互通訊,則會有額外的延遲,具備多個CPU的系統將消耗更多的電力,而且主板須要更多的插座和硬件以及電路。架構

在我的pc上,有多顆cpu的很少,不過在現在的服務器上,物理cpu通常都是2顆標配。由於服務器須要更多的處理能力socket

 超線程(Hyper-Threading,簡稱「HT」)」技術。超線程技術就是利用特殊的硬件指令,把兩個邏輯內核模擬成兩個物理芯片,讓單個處理器都能使用線程級並行計算,進而兼容多線程操做系統和軟件,減小了CPU的閒置時間,提升的CPU的運行效率。ide

 

CPU之超線程(HT)性能

超線程技術是在一顆CPU同時執行多個程序而共同分享一顆CPU內的資源,理論上要像兩顆CPU同樣在同一時間執行兩個線程,雖然採用超線程技術能同時執行兩個線程,但它並不象兩個真正的CPU那樣,每一個CPU都具備獨立的資源。CPU 仍然是單個CPU,而操做系統則看到了2個CPU,當兩個線程都同時須要某一個資源時,其中一個要暫時中止,並讓出資源,直到這些資源閒置後才能繼續。所以超線程的性能並不等於兩顆CPU的性能。ui

 

多核CPUspa

最初,CPU只有有一個核心。這意味着物理CPU有一個單一的中央處理單元。爲了提升性能,製造商添加額外的「核心」或中央處理單元。雙核CPU有兩個中央處理單元,因此操做系統看起來是兩個CPU。不一樣的進程能夠同時使用每一個核心。這樣能夠加快系統處理速度,由於這時的計算機能夠同時執行多項任務。操作系統

與超線程不一樣,雙核CPU在 CPU 芯片上實際上有兩個中央處理單元,四核CPU有四個中央處理單元,八核CPU有八個中央處理單元,等等。這有助於顯著提升處理的性能,同時保持物理CPU單元的小型化,使其更適合單個插槽。只須要單個CPU插槽便可插入一個CPU單元 --- 而不是四個不一樣的CPU插槽,四個不一樣的CPU,每一個都須要本身的電源,冷卻和其餘硬件的鏈接消耗。由於它們都在同一個芯片上,全部具備更少的延遲,核心能夠更快的通訊。

本文屬於原創內容,轉載還請註明出處以及連接!飛走不可http://www.cnblogs.com/hanyifeng/p/6556161.html

 

 

2、如何正確查看主機上的cpu相關數量呢?

總核心數 = 物理CPU顆數 * 每顆CPU上核心數

總線程數邏輯CPU數) = 物理CPU顆數 * 每顆CPU上核心數 * 每顆核心數上的線程  或者 總線程數(邏輯CPU數) = 總核心數 * 每顆核心數上的線程

 

注意:此處的 ‘線程’ 和 ‘操做系統內的線程’ 不是一回事,從cpu的角度來看,一個線程(「thread of execution」的簡寫)只是一個有序的指令序列,告訴計算機該作什麼。

 

第一種方式:

查看主機上物理cpu的顆數

[root@localhost ~]# cat /proc/cpuinfo |grep "physical id" | sort -u |wc -l
2

查看主機上每顆cpu上的核心數

[root@localhost ~]# cat /proc/cpuinfo |grep "cpu cores"|sort -u
cpu cores    : 4

查看主機上總邏輯CPU數量(方式1)

[root@localhost ~]# cat /proc/cpuinfo |grep "core id"|wc -l
8

 

快速查看主機上總邏輯CPU數量(方式2)

[root@localhost ~]# nproc --all
8

快速查看主機上總邏輯CPU數量(方式3)

[root@localhost ~]# getconf _NPROCESSORS_ONLN
8

快速查看主機上總邏輯CPU數量(方式4)

[root@localhost ~]# cat /sys/devices/system/cpu/online
0-7

備註:0-7 :  從第0個到第7個

第二種方式:

使用lscpu 命令

[root@localhost ~]# lscpu 
...省略輸出
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             2
...
省略輸出
Model name:            Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
 
 

從上面能夠看出如下信息:
  Socket(s) : 物理cpu 顆數  2顆
  Core(s) per socket : 每顆CPU上核心數   4個
  Thread(s) per core : 每一個核心的線程數  1個
  CPU(s): 總的邏輯CPU數

因此該機器上最大的線程數(邏輯CPU數)就是: 2 CPU * 4 Cores * 1 threads = 8 threads

上面是沒有開啓超線程技術,若是開啓超線程(HT)後,則應該是 2 CPU * 4 Cores * 2 threads = 16 threads 
下圖是上述處理器的詳細信息,若是你也對你的服務器核數不肯定時,能夠先去官網進行查詢:

 

 

另外補充下,如何在系統內判斷主機是否開啓了超線程(HT)技術呢?請繼續往下看

第一種方式:

lscpu命令

[root@localhost ~]# lscpu 
...省略輸出
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             2
...省略輸出

 Thread(s) per core 爲1 則表示禁用了超線程或者該CPU不支持超線程,若是爲2 則表示啓用了HT

 

第二種方式

[root@niunyun ~]# grep -E "cpu cores|siblings|physical id" /proc/cpuinfo |xargs -n 11 |sort -u
physical id : 0 siblings : 8 cpu cores : 4
physical id : 1 siblings : 8 cpu cores : 4

從這裏看下, siblings 是 cpu cores 的 2倍,這說明啓用了超線程。若是沒啓用HT,則是相同的數字。

本文只是淺談了cpu如何查看核心數、線程數等方法,更深的還有線程SMP 、NUMA架構。若是文中有錯別觀點之處,還請你們及時指出,我會及時改正哈。但願有更深的探討。文章有些參考內容均在文末有連接。

 

本文屬於原創內容,轉載還請註明出處以及連接!飛走不可http://www.cnblogs.com/hanyifeng/p/6556161.html

 

 

 

 

文中參考連接:

https://www.howtogeek.com/194756/cpu-basics-multiple-cpus-cores-and-hyper-threading-explained/

https://arstechnica.com/business/2011/04/ask-ars-what-is-a-cpu-thread/

http://insidehpc.com/2016/12/best-threads-per-core/

相關文章
相關標籤/搜索