通常一個處理器包含多個核心(Core),集成 Cache 子系統(tǒng),內(nèi)存子系統(tǒng)通過內(nèi)部或外部總線與其通信。在經(jīng)典CPU中一般有兩個常用的組件:北橋(North Bridge)和南橋(South Bridge)。它們是處理器和內(nèi)存以及其他外設溝通的渠道。圖1給出了處理器、內(nèi)存、南北橋以及其他總線之間的關系。
圖1
從圖一可以看到:
1)處理器訪問內(nèi)存需要通過北橋。
2)處理器訪問所有的外設都需要通過北橋。
3)掛在南橋的所有設備訪問內(nèi)存也需要通過北橋。
那么CPU訪問南橋上的外部設備和北橋上的DDR內(nèi)存的訪問速率受CPU的主頻、Local Bus帶寬、南橋外設總線的速率、CPU取指令機制等多方面所影響。
處理器主頻和集成度在過去二十年里一直按照摩爾定律在發(fā)展,從單核到多核以及超線程。處理器的性能提高不少,同時處理器的功耗也正比于主頻的三次方在增加。因為使用的晶體管柵極材料存在漏電現(xiàn)象,高頻率下電子遷移顯著,勢必為導致產(chǎn)熱量增加,散熱帶了重大問題。CPU歡快的朝著頻率越來越高的方向發(fā)展,受到物理極限的挑戰(zhàn),又轉為核數(shù)越來越多的方向發(fā)展。由于所有CPU Core都是通過共享一個北橋來讀取內(nèi)存,隨著核數(shù)如何的發(fā)展,北橋在響應時間上的性能瓶頸越來越明顯當北橋出現(xiàn)擁塞時,所有的設備和處理器都要癱瘓。這種系統(tǒng)設計的另外一個瓶頸體現(xiàn)在對內(nèi)存的訪問上。不管是處理器或者顯卡,還是南橋的硬盤、網(wǎng)卡或者光驅,都需要頻繁訪問內(nèi)存,當這些設備都爭相訪問內(nèi)存時,增大了對北橋帶寬的競爭,而且北橋到內(nèi)存之間也只有一條總線。
為了改善對內(nèi)存的訪問瓶頸,出現(xiàn)了另外一種系統(tǒng)設計,內(nèi)存控制器并沒有被集成在北橋中,而是被單獨隔離出來以協(xié)調(diào)北橋與某個相應的內(nèi)存之間的交互。系統(tǒng)結構如圖2所示。
圖 2 所示的這種架構增加了內(nèi)存的訪問帶寬,緩解了不同設備對同一內(nèi)存訪問的擁塞問題,但是卻沒有改進單一北橋芯片的瓶頸的問題。
圖2
為了解決北橋北橋在響應時間上的性能瓶頸,把內(nèi)存控制器(原本北橋中讀取內(nèi)存的部分)也做個拆分,平分到了每個CPU上。于是NUMA(Non-Uniform Memory Access)就出現(xiàn)了。內(nèi)存控制器集成到CPU內(nèi)部,Intel第二代酷睿I系列以及將主板北橋合并到CPU內(nèi)部,所以Intel第二代酷睿I系列沒有北橋,只有南橋。AMD沒有吞并北橋。順便補充一下Intel 單個socket只支持單個node,AMD 單個socket配對多個node。(Node,socket,core,thread)是NUMA中的概念,linux下查看cpu參數(shù)通過如下命令:
a)lscpu
圖3
圖3可以看出CPU是小端模式,每個CPU有一個core,每一個core有一個thread。三級cache大小,F(xiàn)lags查看支持的大頁內(nèi)存,比如pse 代表支持2MB的內(nèi)存頁,pdpe1gb代表支持1G內(nèi)存頁。
b)cat /proc/cpuinfo
圖4
從圖4可以到Core ID、超線程數(shù)、Core的16進制編碼(在DPDK應用中會用到這些參數(shù))。
NUMA設計框架如圖5所示。紅色綠色箭頭代表訪問處理器本地內(nèi)存(Local memory),紅色箭頭訪問遠程內(nèi)存(remote memory),即其他處理器的本地內(nèi)存,需要通過額外的總線!
NUMA中,雖然內(nèi)存直接attach在CPU上,但是由于內(nèi)存被平均分配在了各個die上。只有當CPU訪問自身直接attach內(nèi)存對應的物理地址時,才會有較短的響應時間(后稱Local Access)。而如果需要訪問其他CPU attach的內(nèi)存的數(shù)據(jù)時,就需要通過inter-connect通道訪問,響應時間就相比之前變慢了(后稱Remote Access)。所以NUMA(Non-Uniform Memory Access)就此得名。
圖5
從前面分析發(fā)現(xiàn),確實提高了CPU訪問內(nèi)存和外設的速率,奈何CPU處理速率遠遠超過了內(nèi)存的吞吐速率,這里就帶來了CPU不必要的開銷。一般來說,當CPU從DDR中取指令時,大概要花費幾百個時鐘周期,在這幾百個時鐘周期內(nèi),處理器除了等待什么也不能做。在這種環(huán)境下,才提出了Cache的概念,其目的就是為了匹配處理器和內(nèi)存之間存在的巨大的速度鴻溝。
Cache 由三級組成,之所以對Cach 進行分級,也是從成本和生產(chǎn)工藝的角度考慮的。一級(L1)最快,但是容量最小,一級cache分為指令cache和數(shù)據(jù)cache,圖3中可以查看;三級(LLC, Last Level Cache)最慢,但是容量最大。當CPU需要訪問某個地址時候,首先在cache中目錄表中查詢是否有該內(nèi)容,有就直接取指令或者數(shù)據(jù),沒有就從DDR中取取指令或者數(shù)據(jù)。在cache有對應的數(shù)據(jù)簡稱指令命中,反之指令沒有命中。L3 cache命中,大約需要40個時鐘周期,L3 cache沒命中,一個內(nèi)存讀需要140個時鐘周期。
Cache 的預取指令分為時間局部性和空間局部性。時間局部性是指程序即將用到的指令/數(shù)據(jù)可能就是目前正在使用的指令數(shù)據(jù)。因此,當前用到的指令/數(shù)據(jù)在使用完畢之后以暫時存放在Cache中,可以在將來的時候再被處理器用到。空間局部性是指程序即將用到的指/數(shù)據(jù)可能與目前正在使用的指令/數(shù)據(jù)在空間上相鄰或者相近。因此,在處理器處理當前指令/數(shù)據(jù)時,可以從內(nèi)存中把相鄰區(qū)域的指令/數(shù)據(jù)讀取到Cache中,當處理器需要處理相鄰內(nèi)存區(qū)域的指令/數(shù)據(jù)時,可以直接從Cache中讀取,節(jié)省訪問內(nèi)存的時間。這里可以創(chuàng)建一個二維數(shù)組,然后順序橫向a[i][j]和豎向a[j][i]賦值計算時間做對比,由于a[j][i]地址是跳躍性的賦值,cache不能命中,所以消耗的時間遠遠大于連續(xù)地址的賦值。
提高CPU性能還可以采用多核并行計算,一個時鐘周期讀取N條指令。在軟件上也可以做適當?shù)南到y(tǒng)優(yōu)化和算法優(yōu)化,比如配置CPU 親和性,CPU 親和性(Core affinity)就是一個特定的任務要在某個定的 CPU 上盡量長時間地運行而不被遷移到其他處理器上的傾向性。
-
處理器
+關注
關注
68文章
19409瀏覽量
231207 -
cpu
+關注
關注
68文章
10905瀏覽量
213033
原文標題:CPU性能發(fā)展遇到的瓶頸
文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論