提到CPU核數,相信絕大部分的同窗想到的都是top命令,直接到本身的服務器上看一下是多少個核。看到的核越多,貌似笑的越開心。好比說說個人CPU,用top命令展開之後,看到了有24核。那麼事實真是你想象的這麼美好嗎?php
# top top - 17:04:51 up 882 days, 1:16, 1 user, load average: 0.05, 0.05, 0.00 Tasks: 596 total, 1 running, 595 sleeping, 0 stopped, 0 zombie Cpu0 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu3 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu4 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st ...... Cpu23 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
那麼是否就說明個人機器安裝的CPU真的有24核?其實不是的,咱們經過top命令看到的CPU核也叫作邏輯核。 說到這裏咱們先來普及一下基本概念:linux
好了,咱們瞭解完cpu的基本概念後,來找一臺機器真正看一下。在linux系統下,經過 cat /proc/cpuinfo
能夠看到CPU更爲詳細的信息,在操做系統的視角看來是有24個邏輯核,可是在物理上頗有可能多個邏輯覈對應的是同一個物理核。以下所示例子:redis
#cat /proc/cpuinfo | grep "physical id" | sort | uniq physical id : 0 physical id : 1
能夠看出,該實機有兩個物理CPU。緩存
#cat /proc/cpuinfo| grep "cpu cores"| uniq cpu cores : 6
cpu cores表示每一個cpu有6個物理核心,由於有2個物理CPU,因此該機器總共只有12個物理核。而不是top命令裏看到的24個,整整少了一半。 Intel是經過超線程技術把一個物理核虛擬出來了多個,故而操做系統層面看到的比實際的物理核要多。咱們尋找一下證據服務器
#cat /proc/cpuinfo | grep -E "core id|process|physical id" processor : 0 physical id : 0 core id : 0 ...... processor : 12 physical id : 0 core id : 0 ...... processor : 23 physical id : 1 core id : 10
processor就是邏輯核的序號,能夠看出該機器總共有24個邏輯核。你們注意看processor 0和processor 12的physical id、core id都是同樣的,也就說他們他們也處在同一個物理核上。可是他們的processor編號卻不同,一個是0,一個是12。這就是說,這兩個核其實是一個核,只是經過虛擬技術虛擬出來的而已。函數
超線程裏的2個邏輯核其實是在一個物理核上運行的,模擬雙核心運做,共享該物理核的L1和L2緩存。物理計算能力並無增長,超線程技術只有在多任務的時候才能提高機器核總體的吞吐量。並且據Intel官方介紹,相比實核,平均性能提高只有20-30%左右。也就是說,在我剛纔的機器上看到的24核的處理能力,總體上只比不開超線程的12核性能高30%。讓咱們再用開發者使用的進程來看,因爲你的進程被其它進程分享了L一、L2,這就致使cache miss變多,性能會比不開超線程要差。工具
因此說,操做系統看到的24核只是一個「假象」。性能
開發內功修煉之CPU篇專輯:ui
個人公衆號是「開發內功修煉」,在這裏我不是單純介紹技術理論,也不僅介紹實踐經驗。而是把理論與實踐結合起來,用實踐加深對理論的理解、用理論提升你的技術實踐能力。歡迎你來關注個人公衆號,也請分享給你的好友~~~spa
本文由博客羣發一文多發等運營工具平臺 OpenWrite 發佈