概述
L2快取位於CPU與記憶體之間的臨時存儲器,它的容量比記憶體小但交換速度快。在快取中的數據是記憶體中的一小部分,但這一小部分是短時間內CPU即將訪問的,當CPU調用大量數據時,就可避開記憶體直接從快取中調用,從而加快讀取速度。由此可見,在CPU中加入快取是一種高效的解決方案,這樣整個記憶體儲器(快取+記憶體)就變成了既有快取的高速度,又有記憶體的大容量的存儲系統了。快取對CPU的性能影響很大,主要是因為CPU的數據交換順序和CPU與快取間的頻寬引起的。
L2快取工作原理
快取的工作原理是當CPU要讀取一個數據時,首先從快取中查找,如果找到就立即讀取並送給CPU處理;如果沒有找到,就用相對慢的速度從記憶體中讀取並送給CPU處理,同時把這個數據所在的數據塊調入快取中,可以使得以後對整塊數據的讀取都從快取中進行,不必再調用記憶體。
正是這樣的讀取機制使CPU讀取快取的命中率非常高(大多數CPU可達90%左右),也就是說CPU下一次要讀取的數據90%都在快取中,只有大約10%需要從記憶體讀取。這大大節省了CPU直接讀取記憶體的時間,也使CPU讀取數據時基本無需等待。總的來說,CPU讀取數據的順序是先快取後記憶體。
L2快取的發展歷史
最早先的CPU快取是個整體的,而且容量很低,英特爾公司從Pentium時代開始把快取進行了分類。當時集成在CPU核心中的快取已不足以滿足CPU的需求,而製造工藝上的限制又不能大幅度提高快取的容量。因此出現了集成在與CPU同一塊電路板上或主機板上的快取,此時就把 CPU核心集成的快取稱為一級快取,而外部的稱為二級快取。一級快取中還分數據快取(D-Cache)和指令快取(I-Cache)。二者分別用來存放數據和執行這些數據的指令,而且兩者可以同時被CPU訪問,減少了爭用Cache所造成的衝突,提高了處理器效能。英特爾公司在推出Pentium 4處理器時,還新增了一種一級追蹤快取,容量為12KB.
發展過程
隨著CPU製造工藝的發展,二級快取也能輕易的集成在CPU核心中,容量也在逐年提升。現在再用集成在CPU內部與否來定義一、二級快取,已不確切。而且隨著二級快取被集成入CPU核心中,以往二級快取與CPU大差距分頻的情況也被改變,此時其以相同於主頻的速度工作,可以為CPU提供更高的傳輸速度。
二級快取是CPU性能表現的關鍵之一,在CPU核心不變化的情況下,增加二級快取容量能使性能大幅度提高。而同一核心的CPU高低端之分往往也是在二級快取上有差異,由此可見二級快取對於CPU的重要性。
CPU在快取中找到有用的數據被稱為命中,當快取中沒有CPU所需的數據時(這時稱為未命中),CPU才訪問記憶體。從理論上講,在一顆擁有二級快取的CPU中,讀取一級快取的命中率為80%。也就是說CPU一級快取中找到的有用數據占數據總量的80%,剩下的20%從二級快取中讀取。由於不能準確預測將要執行的數據,讀取二級快取的命中率也在80%左右(從二級快取讀到有用的數據占總數據的16%)。那么還有的數據就不得不從記憶體調用,但這已經是一個相當小的比例了。目前的較高端的CPU中,還會帶有三級快取,它是為讀取二級快取後未命中的數據設計的—種快取,在擁有三級快取的CPU中,只有約5%的數據需要從記憶體中調用,這進一步提高了CPU的效率。
為了保證CPU訪問時有較高的命中率,快取中的內容應該按一定的算法替換。一種較常用的算法是“最近最少使用算法”(LRU算法),它是將最近一段時間內最少被訪問過的行淘汰出局。因此需要為每行設定一個計數器,LRU算法是把命中行的計數器清零,其他各行計數器加1。當需要替換時淘汰行計數器計數值最大的數據行出局。這是一種高效、科學的算法,其計數器清零過程可以把一些頻繁調用後再不需要的數據淘汰出快取,提高快取的利用率。
CPU產品中,一級快取的容量基本在4KB到18KB之間,二級快取的容量則分為128KB、256KB、512KB、1MB等。一級快取容量各產品之間相差不大,而二級快取容量則是提高CPU性能的關鍵。二級快取容量的提升是由CPU製造工藝所決定的,容量增大必然導致CPU內部電晶體數的增加,要在有限的CPU面積上集成更大的快取,對製造工藝的要求也就越高。
不同的CPU使用方法
雙核心CPU的二級快取比較特殊,和以前的單核心CPU相比,最重要的就是兩個核心的快取所保存的數據要保持一致,否則就會出現錯誤,為了解決這個問題不同的CPU使用了不同的辦法:
I ntel雙核心處理器 的二級快取
目前Intel的雙核心CPU主要有Pentium D、Pentium EE、Core Duo三種,其中Pentium D、Pentium EE的二級快取方式完全相同。Pentium D和Pentium EE的二級快取都是CPU內部兩個核心具有互相獨立的二級快取,其中,8xx系列的Smithfield核心CPU為每核心1MB,而9xx系列的Presler核心CPU為每核心2MB。這種CPU內部的兩個核心之間的快取數據同步是依靠位於主機板北橋晶片上的仲裁單元通過前端匯流排在兩個核心之間傳輸來實現的,所以其數據延遲問題比較嚴重,性能並不盡如人意。
Core Duo使用的核心為Yonah,它的二級快取則是兩個核心共享2MB的二級快取,共享式的二級快取配合Intel的“Smart cache”共享快取技術,實現了真正意義上的快取數據同步,大幅度降低了數據延遲,減少了對前端匯流排的占用,性能表現不錯,是目前雙核心處理器上最先進的二級快取架構。今後Intel的雙核心處理器的二級快取都會採用這種兩個核心共享二級快取的“Smart cache”共享快取技術。
AMD雙核心處理器的二級快取
Athlon 64 X2 CPU的核心主要有Manchester和Toledo兩種,他們的二級快取都是CPU內部兩個核心具有互相獨立的二級快取,其中,Manchester核心為每核心512KB,而Toledo核心為每核心1MB。處理器內部的兩個核心之間的快取數據同步是依靠CPU內置的System Request Interface(系統請求接口,SRI)控制,傳輸在CPU內部即可實現。這樣一來,不但CPU資源占用很小,而且不必占用記憶體匯流排資源,數據延遲也比Intel的Smithfield核心和Presler核心大為減少,協作效率明顯勝過這兩種核心。不過,由於這種方式仍然是兩個核心的快取相互獨立,從架構上來看也明顯不如以Yonah核心為代表的Intel的共享快取技術Smart Cache。