性能基礎之CPU、物理核、邏輯核概念與關系
引言
基礎概念
起源:單核CPU和超線程
還有一個轉折點:多核架構的出現
1 LCPU = 1個線程
邏輯CPU與虛擬CPU
如何知道Linux系統有多少核心和處理器?
引言
基礎概念
起源:單核CPU和超線程
還有一個轉折點:多核架構的出現
1 LCPU = 1個線程
邏輯CPU與虛擬CPU
如何知道Linux系統有多少核心和處理器?
引言
性能測試中當我們嘗試使用 Linux 命令(如 nproc 或 lscpu )了解服務器CPU架構和性能參數時,我們經常發現我們無法正確解釋其結果,因為我們混淆CPU、物理核、邏輯核概念等術語。
基礎概念
CPU(Central Processing Unit): 中央處理單元,CPU不等于物理核,更不等于邏輯核。
物理核(physical core/processor): 可以看的到的,真實的cpu核,有獨立的電路元件以及L1,L2緩存,可以獨立地執行指令。
邏輯核(logical core/processor,LCPU): 在同一個物理核內,邏輯層面的核。(比喻,像動畫片一樣,我們看到的“動畫”,其實是一幀一幀靜態的畫面,24幀/s連起來就騙過了人類的眼睛,看起來像動起來一樣。邏輯核也一樣,物理核通過高速運算,讓應用程序以為有兩個cpu在運算)。
超線程(Hyper-threading, HT):超線程可以在一個邏輯核等待指令執行的間隔(等待從cache或內存中獲取下一條指令),把時間片分配到另一個邏輯核。高速在這兩個邏輯核之間切換,讓應用程序感知不到這個間隔,誤認為自己是獨占了一個核。
關系: 一個CPU可以有多個物理核。如果開啟了超線程,一個物理核可以分成n個邏輯核,n為超線程的數量。
起源:單核CPU和超線程
在多核,虛擬或邏輯cpu之類的概念之前,在奔騰處理器時代,大多數計算機安裝在他們的主板上的單個芯片相當大,我們稱之為微處理器、處理器或簡稱CPU。只有少數企業計算機或需要更多處理能力的大型服務器可以在同一塊板上安裝2個或更多這些芯片:它們是多處理器系統。
這些芯片通過連接器或插槽與其他主板元件通信。
計算很簡單:這么多連接器或插槽有一主板,一臺電腦最多只能有這么多cpu。如果你想要更多的處理能力,你只需要尋找一個擁有更多處理器的板,或者等待它們的發展來提供更高的性能。
但隨后英特爾意識到多處理器系統的不同處理器之間的通信效率非常低,因為它們必須通過系統總線完成,而系統總線通常以低得多的速度工作。這通常導致出現瓶頸,使得無法充分利用每個CPU提供的計算能力。
為了改善這種情況,開發了超線程技術(HT)。HT是關于在相同的芯片中復制一些CPU內部組件,例如寄存器或一級緩存,以便在兩個不同的執行線程之間共享信息,而不必通過具有相應瓶頸和速度損失問題的系統總線。這也允許如果一個進程必須等待中斷,另一個進程可以繼續使用CPU而不停止它。
這樣就有可能加快數個計算過程,并開始提供比傳統處理器性能更好的處理器。操作系統被欺騙了,因為它被提供了兩個虛擬或邏輯cpu (LCPU),而不是單個cpu,因為它被允許“同時”執行兩個進程。但是值得注意的是,不可能產生傳統處理器兩倍的處理能力,也不可能提供完全的并行處理能力。
因此,從Linux或其他操作系統的角度來看,一個只有一個核心處理器但HT的機器就像有兩個cpu一樣出現在我們眼前。但是這是在同一個物理cpu中運行的兩個邏輯cpu。
還有一個轉折點:多核架構的出現
但正如在上一節所述,盡管具有超線程的CPU提供了更多的處理能力,但它們無法作為2個完整且獨立的處理器運行,因此決定進一步小型化所有處理器組件并將它們封裝在單個芯片中 。這些封裝處理器中的每一個都稱為核心,它允許通過共享相同芯片的內部總線實現它們之間更快的通信。從那一刻起,不再需要轉向系統總線,速度要慢得多。
與 HT 技術不同,現在我們有多個完全獨立的 CPU 用于所有意圖和目的,每個核心一個。實際上,從性能的角度來看,擁有單個多核處理器比在同一塊板上的同等數量的單核 CPU 更好。當然,擁有2個雙核處理器仍然比單核處理器更好,但更好的是擁有一個四核處理器。
在操作系統級別,物理四核處理器將顯示為4 cpu計算機。但這些將是4個邏輯CPU或非物理LCPU。如果處理器另外提供超線程技術,那么諸如 top 之類的命令將指示系統中有8個cpu,但是在沒有超線程的情況下單個八核處理器性能高于8個Lcpu。
1 LCPU = 1個線程
最后,通常我們會發現具有4個線程的處理器,每個核心2個線程以及類似的東西。這只是可以同時運行的執行線程或處理作業的數量,這相當于 LCPU 提供的處理能力。如果處理器允許每個核2個線程,則意味著它是 HT 。否則,匹配線程的內核數量是正常的。
邏輯CPU與虛擬CPU
虛擬CPU術語與邏輯CPU相當,但它增加了一定的細微差別:它在計算虛擬化方面更加框架化。它指的是從底層主機硬件映射到虛擬機的那些cpus,可以是物理或邏輯cpus,HT。通常,來自主機服務器的1個邏輯cpu映射到虛擬機內的1個虛擬cpu,因此它們幾乎是類似的術語。
如何知道Linux系統有多少核心和處理器?
查看Linux上存在的處理器數量的最簡單和最短的方法,因為它是coreutils 的一部分而被廣泛擴展:
~$ nproc --all 8
另一種獲得相同結果的方法是lscpu命令,它也允許我們從處理器獲取額外信息:
~$ lscpu | grep 'CPU(s)' CPU(s): 8 On-line CPU(s) list: 0-7 NUMA node0 CPU(s): 0-7
或者我們可以查詢/proc filesystem中的cpuinfo文件:
?$ grep processor / proc / cpuinfo | wc - l 8
/pro /cpuinfo文件中有關于這些處理器的許多其他詳細信息,包括CPU型號和內核數
~$ cat /proc/cpuinfo | grep "model name" model name : Intel(R) Xeon(R) CPU E5520 @ 2.27GHz model name : Intel(R) Xeon(R) CPU E5520 @ 2.27GHz ~$ cat /proc/cpuinfo | grep "cpu cores" cpu cores : 4 cpu cores : 4
如上,我們示例中的機器有2個處理器,每個處理器有4個核心。
由于HyperThreading技術和其他處理器增強功能,我們可能需要區分物理CPU和邏輯CPU:
# 獲取邏輯cpu數量(包括超線程邏輯cpu數量): ~$ lscpu -p | egrep -v '^#' | wc -l 4 # 獲得物理cpu/核心的數量: ~$ lscpu -p | egrep -v '^#' | sort -u -t, -k 2,4 | wc -l 8
我們也可以使用其他工具來獲取硬件信息,比如dmidecode,但是我們需要root權限:
~# dmidecode -t 4 | egrep 'Socket Designation|Count' Socket Designation: CPUSocket Core Count: 8 Thread Count: 8
如果運行上述命令,您會發現系統中存在多個CPU或多個內核,您還需要確保當前的Linux內核具有多處理器支持(SMP,Symmetric MultiProcessing):
$ uname -a Linux 7dgroup2 3.10.0-514.6.2.el7.x86_64 #1 SMP Thu Feb 23 03:04:39 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
最后,我們來看下查看cpu參數的命令
$ lscpu Architecture: x86_64 #架構 CPU op-mode(s): 32-bit, 64-bit #運行方式 Byte Order: Little Endian #字節順序 CPU(s): 2 #邏輯cpu顆數 On-line CPU(s) list: 0,1 #在線CPU Thread(s) per core: 2 #每個核心線程 Core(s) per socket: 1 #每個cpu插槽核數/每顆物理cpu核數 Socket(s): 1 #cpu插槽數 NUMA node(s): 1 #非統一內存訪問節點 Vendor ID: GenuineIntel #cpu廠商ID CPU family: 6 #cpu系列 Model: 63 #型號編號 Model name: Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz #型號名稱 Stepping: 2 #步進 CPU MHz: 2494.222 #cpu主頻 BogoMIPS: 4988.44 Hypervisor vendor: KVM #虛擬化架構 Virtualization type: full #cpu支持的虛擬化技術 L1d cache: 32K #一級緩存(具體為L1數據緩存) L1i cache: 32K #一級緩存(具體為L1指令緩存) L2 cache: 256K #二級緩存 L3 cache: 30720K #三級緩存 NUMA node0 CPU(s): 0,1
Linux 云性能測試服務 CPTS 任務調度 應用性能管理 APM
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。