CPU的緩存L1、L2、L3

L1,L2,L3 指的都是CPU的緩存,他們比內存快,但是很昂貴,所以用作緩存,CPU查找數據的時候首先在L1,然後看L2,如果還沒有,就到內存查找一些服務器還有L3 Cache,目的也是提高速度。

高速緩衝存儲器Cache是位於CPU與內存之間的臨時存儲器,它的容量比內存小但交換速度快。在Cache中的數據是內存中的一小部分,但這一小部分是短時間內CPU即將訪問的,當CPU調用大量數據時,就可避開內存直接從Cache中調用,從而加快讀取速度。由此可見,在CPU中加入Cache是一種高效的解決方案,這樣整個內存儲器(Cache+內存)就變成了既有Cache的高速度,又有內存的大容量的存儲系統了。Cache對CPU的性能影響很大,主要是因爲CPU的數據交換順序和CPU與Cache間的帶寬引起的。


高速緩存的工作原理


1. 讀取順序

CPU要讀取一個數據時,首先從Cache中查找,如果找到就立即讀取並送給CPU處理;如果沒有找到,就用相對慢的速度從內存中讀取並送給CPU處理,同時把這個數據所在的數據塊調入Cache中,可以使得以後對整塊數據的讀取都從Cache中進行,不必再調用內存。

正是這樣的讀取機制使CPU讀取Cache的命中率非常高(大多數CPU可達90%左右),也就是說CPU下一次要讀取的數據90%都在Cache中,只有大約10%需要從內存讀取。這大大節省了CPU直接讀取內存的時間,也使CPU讀取數據時基本無需等待。總的來說,CPU讀取數據的順序是先Cache後內存。

2. 緩存分類

前面是把Cache作爲一個整體來考慮的,現在要分類分析了。Intel從Pentium開始將Cache分開,通常分爲一級高速緩存L1和二級高速緩存L2。

在以往的觀念中,L1 Cache是集成在CPU中的,被稱爲片內Cache。在L1中還分數據Cache(I-Cache)和指令Cache(D-Cache)。它們分別用來存放數據和執行這些數據的指令,而且兩個Cache可以同時被CPU訪問,減少了爭用Cache所造成的衝突,提高了處理器效能。

在P4處理器中使用了一種先進的一級指令Cache——動態跟蹤緩存。它直接和執行單元及動態跟蹤引擎相連,通過動態跟蹤引擎可以很快地找到所執行的指令,並且將指令的順序存儲在追蹤緩存裏,這樣就減少了主執行循環的解碼週期,提高了處理器的運算效率。

以前的L2 Cache沒集成在CPU中,而在主板上或與CPU集成在同一塊電路板上,因此也被稱爲片外Cache。但從PⅢ開始,由於工藝的提高L2 Cache被集成在CPU內核中,以相同於主頻的速度工作,結束了L2 Cache與CPU大差距分頻的歷史,使L2 Cache與L1 Cache在性能上平等,得到更高的傳輸速度。L2Cache只存儲數據,因此不分數據Cache和指令Cache。在CPU核心不變化的情況下,增加L2 Cache的容量能使性能提升,同一核心的CPU高低端之分往往也是在L2 Cache上做手腳,可見L2 Cache的重要性。現在CPU的L1 Cache與L2 Cache惟一區別在於讀取順序。

3. 讀取命中率

CPU在Cache中找到有用的數據被稱爲命中,當Cache中沒有CPU所需的數據時(這時稱爲未命中),CPU才訪問內存。從理論上講,在一顆擁有2級Cache的CPU中,讀取L1 Cache的命中率爲80%。也就是說CPU從L1 Cache中找到的有用數據佔數據總量的80%,剩下的20%從L2 Cache讀取。由於不能準確預測將要執行的數據,讀取L2的命中率也在80%左右(從L2讀到有用的數據佔總數據的16%)。那麼還有的數據就不得不從內存調用,但這已經是一個相當小的比例了。在一些高端領域的CPU(像Intel的Itanium)中,我們常聽到L3 Cache,它是爲讀取L2 Cache後未命中的數據設計的—種Cache,在擁有L3 Cache的CPU中,只有約5%的數據需要從內存中調用,這進一步提高了CPU的效率。

爲了保證CPU訪問時有較高的命中率,Cache中的內容應該按一定的算法替換。一種較常用的算法是“最近最少使用算法”(LRU算法),它是將最近一段時間內最少被訪問過的行淘汰出局。因此需要爲每行設置一個計數器,LRU算法是把命中行的計數器清零,其他各行計數器加1。當需要替換時淘汰行計數器計數值最大的數據行出局。這是一種高效、科學的算法,其計數器清零過程可以把一些頻繁調用後再不需要的數據淘汰出Cache,提高Cache的利用率。
發佈了117 篇原創文章 · 獲贊 294 · 訪問量 66萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章