本文主要是關于二級緩存的介紹,并探討了二級緩存的速度大小及其大小上限。
二級緩存速度如何
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高速緩存更高達25。
我們都知道,CPU的運算速度是非常快的,而且遠比硬盤要快的多,這樣在實際運算過程中就產生了一個問題,由于硬盤的讀寫速度遠遠跟不上CPU的運算速度,這樣在這兩者之間就會出現斷檔,也就是CPU在處理完一部分數據后就沒用工作可做,要等待硬盤把后續數據傳輸過來之后才能繼續工作,這樣顯然會影響CPU的工作效率,這才最初期的電腦當中體現的還不是很明顯,隨著電腦的發展,這種斷檔越來越大,于是就產生了內存,內存的原理就是一個緩沖存儲,電腦在運行程序時,先將要處理的數據由硬盤轉移到內存中,然后再由內存傳送給CPU,由于內存的速度要遠大于硬盤(但是也還是趕不上CPU的運算速度),所以之前我們提到的斷檔問題就在一定程度上得到了結局,不過由于存儲原理和制作工藝、還有成本的問題,內存并不能夠像硬盤用作大容量數據存儲。
以上的內存的原理,接下來的高速緩存就類似了,由于內存的速度也比不上CPU的運算速度,所以就誕生了Cache,與內存和硬盤這類存儲設備不同,Cache是集成在CPU內部的,而且制作工藝更加先進,所以速度非常之快,從LZ的軟件測試結果中也能看出來,它能夠更好的解決硬盤和CPU的斷檔問題,但是由于Cache的制作工藝更加困難,所以直到現在還處在MB級別上。
其實在一個程序的運行當中,有部分數據是需要反復運算的,也就是說有一部分數據的使用頻率高,于是電腦會根據使用頻率的不同,把最常用到得一部分數據放在Cache中,其次在內存,最后才在硬盤上,這樣CPU在計算時,首先掃描Cache,如果沒有找到所需要的數據,它才會一次掃描內存和硬盤,這樣就可以大量減少數據檢索、傳輸的速度,也就是減少數據存儲與計算間的斷檔。
隨著技術的發展,Cache中也出現了一級Cache、二級Cache之分,在高端CPU中,還會有三級Cache,他們都是為了減少數據斷檔,提高CPU的速度而存在的,一級最快,二級次之,三級再次,但是只要是Cache,都肯定要比內存的硬盤更快,LZ試想一下,按照我上段所說的計算原理,如果你只有一級Cache,這樣CPU如果在Cache中沒有找到要用的數據,它就會到速度比Cache慢上很多的內存中去尋找,這樣數據的檢索與傳輸速度立刻就降下了一大截,而如果你有二級甚至三級Cache的話,CPU會按照一級Cache——>二級Cache——>三級Cache——>內存——>硬盤的順序尋找數據,這樣就可以最大程度的減少數據斷檔了。
二級緩存最大多少
在現階段的CPU產品中,一級緩存的容量基本在4KB到64KB之間,二級緩存的容量分為128KB、256KB、512KB、1MB、2MB等。一級緩存容量各產品之間相差不大,而二級緩存容量則是提高CPU性能的關鍵。二級緩存容量的提升是由CPU制造工藝所決定的,容量增大必然導致CPU內部晶體管數的增加,要在有限的CPU面積上集成更大的緩存,對制造工藝的要求也就越高歷年來Intel都是通過二級緩存的大小來劃分產品線,初期只有奔騰和賽揚兩種規格,到了酷睿2時代Intel達到了登峰造極的境界:僅僅是雙核產品就擁有512K、1M、2M、3M、4M、6M多達六個版本,四核產品也有4M、6M、8M、12M四個版本,令人眼花繚亂!而三級緩存從2MB增加到6MB!
二級緩存多大合適
英特爾處理器在游戲方面歷來就是二級緩存非常的敏感,其實這與一級緩存的設計是分不開的。英特爾的處理器采用的是“數據代碼指令追蹤緩存”設計,基于這種架構設計的的一級緩存不存儲實際的數據,而僅僅存儲這些數據在二級緩存中的指令代碼,如此一來,所有數據都將被存儲到二級緩存中,而一級數據所需要存儲的僅僅是數據在二級緩存中的起始地址而已。由于一級數據緩存不再存儲實際數據,因此該設計能夠在很大程度上降處理器對一級緩存容量的要求,進而降低處理器的生產難度和成本,這也就可以解釋了為什么酷睿2處理器的一級緩存僅僅為32KB+32KB。此時我們也就可以知道這種設計的弊端,那就是處理器對于二級緩存的容量會有很大的依賴,也因此使得英特爾處理器對于二級緩存非常的敏感。
AMD處理器的一級緩存設計采用的是傳統的“實數據讀寫緩存”設計,基于該設計的一級緩存主要用于存儲CPU最先讀取的數據,而其余的預讀取數據則分別存儲在二級緩存和系統內存當中。這種設計的有點在于更加直接快速的讀取數據,缺點在于對一級緩存的容量有更高的要求,同時增加了處理器的制造難度和成本(因為一級緩存集成在處理器內核的內部,二級緩存則獨立存在于處理器內核的外部,并且一級緩存的成本要高于二級緩存)。以AMD Athlon 64處理器為例,由于其已經具備了64KB一級指令緩存和64KB一級數據緩存,只要處理器的二級緩存容量大于等于128KB就能夠存儲足夠的數據和指令,正是因為這個設計,讓AMD的處理器對于二級緩存并不如英特爾處理器那樣敏感。
通過前面的測試我們對于二級緩存對英特爾酷睿2處理器性能的影響有了一個清楚的認識,在網絡辦公、音視頻編解碼處理等方面,當二級緩存達到一定的容量時,提高二級緩存容量并不會給處理器帶來什么明顯的性能提升。而在3D游戲這種對處理器浮點運算能力要求很高的應用中,二級緩存的增加無疑會更好的提高性能。當然在這里我們還有一點是不能否認的,那就是更高的二級緩存對于多核心處理器來說還是具有無法替代的助力。
我們知道,CPU執行指令時,會將執行結果放在一個叫“寄存器”的元件中,由于“寄存器”集成在CPU內部,與ALU等構成CPU的重要元件,因此寄存器中的指令很快被CPU所訪問,但畢竟寄存器的容量太小,CPU所需的大量指令和數據還在內存(RAM)當中,所以CPU為了完成指令操作,需要頻繁地向內存發送接收指令、數據。
由于內存的處理速度遠遠低于CPU,所以傳統的系統瓶頸在這里就產生了,CPU在處理指令時往往花費很多時間在等待內存做準備工作。
為了解決這個問題,人們在CPU內集成了一個比內存快許多的“Cache”,這就是最早的“高速緩存”。
L1高速緩存是與CPU完全同步運行的存儲器,也就是我們常說的一級緩存,如果CPU需要的數據和指令已經在高速緩存中了,那么CPU不必等待,直接就可以從一級緩存(L1)中取得數據,如果數據不在L1中,CPU再從二級緩存(L2)中提取數據,大大提高了系統的工作效率。
沒有CPU緩存前
我們可以形象地把CPU的運算單元想象成是一間坐落在城市中心的工廠,把內存看成是工廠設置在郊區的一間面積很大的倉庫A。
工廠生產所需要的原材料每次都要花時間去遠處的倉庫A調運,而且到達倉庫后,還要等待倉庫準備好材料,中間浪費了不少時間。這就是CPU頻率未變的情況下,CPU與內存的數據交換不同步的現象。
而突然有一天,由于資金短缺,倉庫A從近郊區“搬到”了遠郊區,這樣原料和成品在工廠與倉庫A之間的運輸所花費的時間就更長了,工廠生產所需的原料供應不足,經常處于空運轉的狀態下。這就是說當CPU頻率增加后,CPU與內存交換數據等待需時間會變得更長
增加L1 Cache
要解決CPU與內存交換數據不同步這個系統瓶頸問題,其中一個辦法是在靠近工廠的市區設置一個小型的倉庫B(L1 Cache)。
平時把生產最迫切需要、用得最多的原材料(指令和數據)從倉庫A(內存)調配到倉庫B(L1 Cache),這樣工廠生產所需要的原材料就可以很快地調配過來,減少空運轉的時間。當所需的原材料在倉庫B中找不到(緩存未命中)時,仍然要到倉庫A(內存)里調配,雖然無可避免地使工廠又進入空運轉,或部分空運轉(CPU等待若干個時鐘周期),但這樣畢竟使等待時間大大降低了。
小知識:緩存有一個“預讀”功能,也就是可以通過一定的算法,猜測接下來所要的數據,并預先取入緩存。
再添L2 Cache
隨著CPU的頻率提高,與內存之間交換數據不同步的現象更明顯了,可以理解為倉庫A(內存)搬離郊區,遷到更遠的地方了。解決這一問題的一個更好的辦法就是在城市的邊緣再設立一個比倉庫B大的倉庫C,也就是我們說的二級緩存。
它的作用是把郊區之外的倉庫A(內存)中最迫切用的材料(指令)運到倉庫C,而工廠如果在倉庫B中找不到所需的材料,就可以到倉庫C中找,而不必老遠跑到倉庫A那里找,節省了不少時間。
通常情況下,L2包括L1所有的數據,另外還有一些附加的數據。換言之,L1與L2、L2與內存之間是子母關系,所以CPU緩存的出現更有效地解決了CPU空等待所造成的資源浪費問題。
結語
關于二級緩存的相關介紹就到這了,如有不足之處歡迎指正。
評論
查看更多