你覺得你的多核CPU都是真的嗎?多核「假象」

提到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:主板上真正安裝的CPU的個數,經過physical id能夠查查看
  • 物理核:一個CPU會集成多個物理核心,經過core id能夠查看到物理核的序號
  • 邏輯核: intel運用了超線程技術,一個物理核能夠被虛擬出來多個邏輯核,processor是邏輯核序號

好了,咱們瞭解完cpu的基本概念後,來找一臺機器真正看一下。在linux系統下,經過 cat /proc/cpuinfo能夠看到CPU更爲詳細的信息,在操做系統的視角看來是有24個邏輯核,可是在物理上頗有可能多個邏輯覈對應的是同一個物理核。以下所示例子:redis

實際查看你的CPU

  • 查看物理CPU
#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是經過超線程技術把一個物理核虛擬出來了多個,故而操做系統層面看到的比實際的物理核要多。咱們尋找一下證據服務器

  • 查看邏輯CPU
#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核只是一個「假象」性能


file


開發內功修煉之CPU篇專輯:ui


個人公衆號是「開發內功修煉」,在這裏我不是單純介紹技術理論,也不僅介紹實踐經驗。而是把理論與實踐結合起來,用實踐加深對理論的理解、用理論提升你的技術實踐能力。歡迎你來關注個人公衆號,也請分享給你的好友~~~spa

本文由博客羣發一文多發等運營工具平臺 OpenWrite 發佈
相關文章
相關標籤/搜索