CPU的緩存及拓撲結構的查看 詳解 軟件測試
今天忽然對CPU的Cache感興趣了,稍微了解了一下,做一下知識筆記吧。
包括CPU的各級Cache以及CPU的拓撲結構。
cpu的處理數據的速度是非常非?斓,但是,數據需要從硬盤中讀取出才能傳遞到CPU處理,然而硬盤的讀寫速度跟CPU的處理初速比,差的實在是成千上萬倍。
所以加入了內存這個配件,他的目的就是將暫時需要用到的程序數據等,暫時存儲在內存中。由于內存的讀寫速度遠遠大于硬盤,所以這個效率得到了非常大的提升。
但是,CPU的處理速度依然遠遠大于內存,CPU依然需要等待大量的時間從內存讀取數據,CPU性能被浪費,所以CPU引入了一級緩存,他的容量很小,只有幾十K左右,但他的讀寫速度卻已經與CPU處理速度非常接近了。
CPU緩存:緩存大小也是CPU的重要指標之一,而且緩存的結構和大小對CPU速度的影響非常大,CPU內緩存的運行頻率極高,一般是和處理器同頻運作,工作效率遠遠大于系統內存和硬盤。實際工作時,CPU往往需要重復讀取同樣的數據塊,而緩存容量的增大,可以大幅度提升CPU內部讀取數據的命中率,而不用再到內存或 者硬盤上尋找,以此提高系統性能。但是由于CPU芯片面積和成本的因素來考慮,緩存都很小。
L1 Cache(一級緩存)是CPU第一層高速緩存,分為數據緩存和指令緩存。內置的L1高速緩存的容量和結構對CPU的性能影響較大,不過高速緩沖存儲器均由靜態RAM組成,結構較復雜,在CPU管芯面積不能太大的情況下,L1級高速緩存的容量不可能做得太大。一般服務器CPU的L1緩存的容量通常在32—256KB。
L2 Cache(二級緩存)是CPU的第二層高速緩存,分內部和外部兩種芯片。內部的芯片二級緩存運行速度與主頻相同,而外部的二級緩存則只有主頻的一半。L2高速緩存容量也會影響CPU的性能,原則是越大越好,現在家庭用CPU容量最大的是512KB,而服務器和工作站上用CPU的L2高速緩存更高達 256-1MB,有的高達2MB或者3MB。
L3 Cache(三級緩存),分為兩種,早期的是外置,現在的都是內置的。而它的實際作用即是,L3緩存的應用可以進一步降低內存延遲,同時提升大數據量計算時處理器的性能。降低內存延遲和提升大數據量計算能力對游戲都很有幫助。而在服務器領域增加L3緩存在性能方面仍然有顯著的提升。比方具有較大L3緩存的配置利用物理內存會更有效,故它比較慢的磁盤I/O子系統可以處理更多的數據請求。具有較大L3緩存的處理器提供更有效的文件系統緩存行為及較短消息和處理器隊列長度。
無論是二級緩存、三級緩存還是內存都不能存儲處理器操作的原始指令,這些指令只能存儲在CPU的一級指令緩存中,而余下的二級緩存、三級緩存和內存僅用于存儲CPU所需數據。
一級緩存、二級緩存都是core這個級別獨享的;而三級緩存是socket獨享的(同一個socket上的多個core共享)
根據工作原理的不同,目前主流處理器所采用的一級數據緩存又可以分為實數據讀寫緩存和數據代碼指令追蹤緩存2種,它們分別被AMD和Intel所采用。不同的一級數據緩存設計對于二級緩存容量的需求也各不相同,下面讓我們簡單了解一下這兩種一級數據緩存設計的不同之處。
一、AMD一級數據緩存設計
AMD采用的一級緩存設計屬于傳統的“實數據讀寫緩存”設計;谠摷軜嫷囊患墧祿彺嬷饕糜诖鎯PU最先讀取的數據;而更多的讀取數據則分別存儲在二級緩存和系統內存當中。做個簡單的假設,假如處理器需要讀取“AMD ATHLON 64 3000+ IS GOOD”這一串數據(不記空格),那么首先要被讀取的“AMDATHL”將被存儲在一級數據緩存中,而余下的“ON643000+ISGOOD”則被分別存儲在二級緩存和系統內存當中。
需要注意的是,以上假設只是對AMD處理器一級數據緩存的一個抽象描述,一級數據緩存和二級緩存所能存儲的數據長度完全由緩存容量的大小決定,而絕非以上假設中的幾個字節!皩崝祿x寫緩存”的優點是數據讀取直接快速,但這也需要一級數據緩存具有一定的容量,增加了處理器的制造難度(一級數據緩存的單位制造成本較二級緩存高不少)。
二、Intel一級數據緩存設計
自P4時代開始,Intel開始采用全新的“數據代碼指令追蹤緩存”設計;谶@種架構的一級數據緩存不再存儲實際的數據,而是存儲這些數據在二級緩存中的指令代碼(即數據在二級緩存中存儲的起始地址)。假設處理器需要讀取“INTEL P4 IS GOOD”這一串數據(不記空格),那么所有數據將被存儲在二級緩存中,而一級數據代碼指令追蹤緩存需要存儲的僅僅是上述數據的起始地址。
由于一級數據緩存不再存儲實際數據,因此“數據代碼指令追蹤緩存”設計能夠極大地降CPU對一級數據緩存容量的要求,降低處理器的生產難度。但這種設計的弊端在于數據讀取效率較“實數據讀寫緩存設計”低,而且對二級緩存容量的依賴性非常大。
另外,cat /proc/cpuinfo中看到的cache一般來說是現實最大級別緩存的容量,可能是三級緩存(如果有)或者是二級緩存。
如果需要了解cpu的拓撲結構, 了解邏輯CPU和物理的CPU的映射關系,以及了解CPU的內部的硬件參數,比如說L1,L2,L3 cache 的大小等信息。這時cpuinfo就不夠用了,上面的信息不夠多;所幸的是Intel提供了這樣的一個工具來看CPU的拓撲結構。
參見: http://software.intel.com/en-us/articles/intel-64-architecture-processor-topology-enumeration/
下載下來編譯、運行有OK了。
./cpu_topology64.out
我的一臺測試服務器Intel Westmere-EP平臺,緩存相關信息如下:
L1D is Level 1 Data cache, size(KBytes)= 32, Cores/cache= 2, Caches/package= 6
L1I is Level 1 Instruction cache, size(KBytes)= 32, Cores/cache= 2, Caches/package= 6
L2 is Level 2 Unified cache, size(KBytes)= 256, Cores/cache= 2, Caches/package= 6
L3 is Level 3 Unified cache, size(KBytes)= 12288, Cores/cache= 12, Caches/package= 1
參考資料:
http://hi.baidu.com/kxw102/blog/item/aeef82fd278d4cf7fd037f28.html
http://en.wikipedia.org/wiki/CPU_cache
http://rdc.taobao.com/blog/cs/?p=460 (淘寶一個同學寫的關于CPU結構的查看)
文章來源于領測軟件測試網 http://www.k11sc111.com/