要看更多的文章,歡迎訪問個人我的博客: http://oldli.netes6
CPU是一個系統的核心所在,它推進了全部軟件的運行。api
通常咱們會說,這是一個4核CPU,或者是一個4核8線程的CPU,這是什麼意思呢?緩存
指機器上的插槽插的CPU個數。物理CPU的數量,能夠經過查詢系統中不重複的physical id
數量來判斷:bash
$ cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l 1
明顯看到個人機器上只有一個物理CPU,主板上插了一個CPU。性能
每一個CPU都會集成一個或者多個處理器芯片(稱爲Core,核心)。flex
CPU最初發展的時候是一個CPU一個處理核心,CPU的性能主要靠提升核心工做頻率來提升,可是僅僅提升單核芯片的速度會產生過多熱量且沒法帶來相應的性能改善。ui
爲了提高處理器的能效,因而發展出來了雙核心CPU(Dual-core processor
)和多核心的CPU(Multi-core processor
),在物理上是把2個或者更多的獨立處理器芯片封裝在一個單一的集成電路中。spa
在操做系統中,能夠看到具備相同physical id
的CPU是同一個物理CPU封裝的線程或核心(下面會講到線程)。操作系統
總物理核數 = 物理CPU個數 X 每顆物理CPU的核數.net
查看CPU核數:
$ cat /proc/cpuinfo| grep "cpu cores"| uniq cpu cores : 4
以上是個人電腦的CPU核心數,有4核物理核的CPU。
開始的時候CPU是一個核心一個線程,爲了進一步提高CPU的處理能力,Intel又引入了HT(Hyper-Threading,超線程)的技術,一個Core打開HT以後,在操做系統看來就是兩個核,固然這個核是邏輯上的概念,因此也被稱爲邏輯處理器(Logical Processor)。
「超線程」(Hyperthreading Technology)技術就是經過採用特殊的硬件指令,能夠把兩個邏輯內核模擬成兩個物理超線程芯片,在單處理器中實現線程級的並行計算,同時在相應的軟硬件的支持下大幅度的提升運行效能,從而實如今單處理器上模擬雙處理器的效能。其實,從實質上說,超線程是一種能夠將CPU內部暫時閒置處理資源充分「調動」起來的技術。
因此,邏輯CPU的數量有時會大於物理CPU的數量,是由於開了超線程技術,計算公式以下:
總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超線程數
在操做系統中查看邏輯CPU的個數:
$ cat /proc/cpuinfo| grep "processor"| wc -l 8
查看/proc/cpuinfo
能夠看到,分別各有2個processor
的core id
是同樣的,也即這2個邏輯CPU是同一個CPU核心的超線程。
查詢CPU是否啓用超線程:
$ cat /proc/cpuinfo | grep -e "cpu cores" -e "siblings" | sort | uniq cpu cores : 4 siblings : 8
cpu cores
指的是一個物理CPU有幾個核
siblings
指的是一個物理CPU有幾個邏輯CPU
若是cpu cores數量和siblings數量一致,則沒有啓用超線程,若是siblings是cpu cores的兩倍,則說明支持超線程,而且超線程已打開。
要實現HT的功能,除了CPU要支持外,還須要主板芯片組,主板BIOS,以及操做系統的支持。通常說來,最大發揮HT技術的運行效能還須要真正支持超線程技術的軟件。
雖然採用超線程技術能同時執行兩個線程,但它並不象兩個真正的CPU那樣,每一個CPU都具備獨立的資源。當兩個線程都同時須要某一個資源時,其中一個要暫時中止,並讓出資源,直到這些資源閒置後才能繼續。所以超線程的性能並不等於兩顆CPU的性能。
根據Intel提供的數據,這樣一個技術會使得設備面積增大5%,可是性能提升15%~30%。
爲何CPU能控制一個龐大而複雜的電腦系統?這就關乎到指令集。
CPU依靠指令來計算和控制系統,對電腦下達的每個命令都須要CPU根據預先設定好的某一條指令來完成。這些預先設定好的指令是預存在CPU中的。CPU依靠外來指令「激活」本身內存的指令,來計算和操控電腦。
每款CPU在設計時就規定了一系列與其硬件電路相配合的指令系統,這就是所謂的指令集。
說到指令,就不能不提指令週期。
指令週期是執行一條指令所須要的時間,是從取指令、分析指令到執行完所需的所有時間。它通常由若干個機器週期組成。
機器週期(也稱爲CPU週期)指計算機完成一個基本操做所須要的時間。例如,取指令、存儲器讀、存儲器寫等,這每一項工做稱爲一個基本操做。
機器週期還不是計算機最小最基本的時間單位,計算機中最基本的、最小的時間單位是時鐘週期,在一個時鐘週期內,CPU僅完成一個最基本的動做。
計算機之因此能自動地工做,是由於CPU能從存放程序的內存裏取出一條指令並執行這條指令;緊接着又是取指令,執行指令,如此周而復始,構成了一個封閉的循環。除非遇到停機指令,不然這個循環將一直繼續下去。
時鐘頻率(又譯:時鐘頻率速度,clock rate),是指同步電路中時鐘的基礎頻率,它以「若干次週期每秒」來度量,量度單位採用SI單位赫茲(Hz)。它是評定CPU性能的重要指標。
在電子技術中,脈衝信號是一個按必定電壓幅度,必定時間間隔連續發出的脈衝信號。脈衝信號之間的時間間隔稱爲週期;而將在單位時間(如1秒)內所產生的脈衝個數稱爲頻率。
時鐘頻率的單位有:Hz(赫茲)、kHz(千赫茲)、MHz(兆赫茲)、GHz【吉赫茲(1吉=1000000000)】。其中1GHz=1000MHz,1MHz=1000kHz,1kHz=1000Hz。
例如,一個5GHz的CPU每秒運行50億個時鐘週期。
主頻用來表示CPU的運算、處理數據的速度,單位是兆赫(MHz)或千兆赫(GHz)。一般,主頻越高,CPU處理數據的速度就越快。
CPU的主頻 = 外頻 X 倍頻係數
查看型號以及主頻:
$ cat /proc/cpuinfo | grep "model name" | cut -f2 -d: | uniq Intel(R) Core(TM) i7-3632QM CPU @ 2.20GHz
個人電腦的CPU最高頻率可達2.20GHZ。
查看當前執行頻率:
$ cat /proc/cpuinfo |grep MHz|uniq cpu MHz : 1218.250 cpu MHz : 1249.531 cpu MHz : 1208.453 cpu MHz : 1493.250 cpu MHz : 1341.140 cpu MHz : 1427.164 cpu MHz : 1318.023 cpu MHz : 1200.031
因爲開啓了CPU的節能特性,每次執行的頻率都會不同。CPU會自動調整當前的執行頻率。
外頻是CPU的基準頻率,單位是MHz。CPU的外頻決定着整塊主板的運行速度。
倍頻係數是指CPU主頻與外頻之間的相對比例關係。在相同的外頻下,倍頻越高CPU的頻率也越高。
CPU緩存(Cache Memory)是位於CPU與內存之間的臨時存儲器,它的容量比內存小的多可是交換速度卻比內存要快得多。
高速緩存的出現主要是爲了解決CPU運算速度與內存讀寫速度不匹配的矛盾,由於CPU運算速度要比內存讀寫速度快不少,這樣會使CPU花費很長時間等待數據到來或把數據寫入內存。
在緩存中的數據是內存中的一小部分,但這一小部分是短期內CPU即將訪問的,當CPU調用大量數據時,就可避開內存直接從緩存中調用,從而加快讀取速度。
CPU緩存能夠分爲一級緩存,二級緩存,部分高端CPU還具備三級緩存,每一級緩存中所儲存的所有數據都是下一級緩存的一部分,這三種緩存的技術難度和制形成本是相對遞減的,因此其容量也是相對遞增的。
在操做系統查看CPU緩存:
$ lscpu L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 6144K $ cat /sys/devices/system/cpu/cpu0/cache/index0/size 32K $ cat /sys/devices/system/cpu/cpu0/cache/index1/size 32K $ cat /sys/devices/system/cpu/cpu0/cache/index2/size 256K $ cat /sys/devices/system/cpu/cpu0/cache/index3/size 6144K
不一樣指令集(ISA)的CPU產生的/proc/cpuinfo
文件不同,基於X86指令集CPU的/proc/cpuinfo文件包含以下內容:
processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 58 model name : Intel(R) Core(TM) i7-3632QM CPU @ 2.20GHz stepping : 9 microcode : 0x15 cpu MHz : 1288.289 cache size : 6144 KB physical id : 0 siblings : 8 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 sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm ida arat epb pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveopt bugs : bogomips : 4389.72 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management:
processor : 系統中邏輯處理核的編號。對於單核處理器,則能夠認爲是其CPU編號,對於多核處理器則能夠是物理核、或者使用超線程技術虛擬的邏輯核
vendor_id : CPU製造商
cpu family : CPU產品系列代號
model : CPU屬於其系列中的哪一代的代號
model name : CPU屬於的名字及其編號、標稱主頻
stepping : CPU屬於製做更新版本
microcode : CPU微碼
cpu MHz : CPU的實際使用主頻
cache size : CPU二級緩存大小
physical id : 單個CPU的標號
siblings : 每顆物理cpu的邏輯核數,與cpu cores對比能夠確認cpu是否啓用超線程
core id : 當前物理核在其所處CPU中的編號,這個編號不必定連續
cpu cores : 每顆物理cpu的核數,即幾核CPU,每一個物理cpu具備幾個運算內核core
apicid : 用來區分不一樣邏輯核的編號,系統中每一個邏輯核的此編號必然不一樣,此編號不必定連續
initial apicid: 0
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: 對能源管理的支持