「每日分享」CPU一級緩存與二級緩存深度分析

點擊上方"java全棧技術"關注,每天學習一個java知識點

CPU緩存:通過優化的的讀取機制,可以使CPU讀取緩存的命中率非常高(大多數CPU可達90%左右),也就是說CPU下一次要讀取的數據90%都在緩存中,只有大約10%需要從內存讀取。這大大節省了CPU直接讀取內存的時間,也使CPU讀取數據時基本無需等待。

「每日分享」CPU一級緩存與二級緩存深度分析

總的來說,CPU讀取數據的順序是先緩存後內存。

CPU內核集成的緩存稱為一級緩存(L1 cache),而外部的稱為二級緩存(L2 Cache);後來隨著生產技術的不斷提高,最終二級緩存也被挪進了CPU當中。通常一級緩存中還分數據緩存(Data Cache, D-Cache)和指令緩存(Instruction Cache, I-Cache)。二者分別用來存放數據和執行這些數據的指令,而且兩者可以同時被CPU訪問,減少了爭用Cache所造成的衝突,提高了CPU效能。

CPU的一級緩存通常都是靜態RAM,速度非常的快,但是靜態RAM集成度低(存儲相同的數據,靜態RAM的體積是動態RAM的6倍),而且價格也相對較為昂貴(同容量的靜態RAM是動態RAM的四倍)。

擴大靜態RAM作為緩存是一個不太合算的做法,但是為了提高系統的性能和速度又必須要擴大緩存,這就有了一個折中的方法:在不擴大原來的靜態RAM緩存容量的情況下,僅僅增加一些高速動態RAM做為L2級緩存。高速動態RAM速度要比常規動態RAM快,但比原來的靜態RAM緩存慢,而且成本也較為適中。一級緩存和二級緩存中的內容都是內存中訪問頻率高的數據的複製品(映射),它們的存在都是為了減少高速CPU對慢速內存的訪問。

二級緩存是CPU性能表現的關鍵之一,在CPU核心不變化的情況下,增加二級緩存容量能使性能大幅度提高。而同一核心的CPU高低端之分往往也是在二級緩存上存在差異,由此可見二級緩存對CPU的重要性。

CPU在緩存中找到有用的數據被稱為命中,當緩存中沒有CPU所需的數據時(這時稱為未命中),CPU才訪問內存。從理論上講,在一顆擁有二級緩存的CPU中,讀取一級緩存的命中率為80%。也就是說CPU一級緩存中找到的有用數據佔數據總量的80%,剩下的20%從二級緩存中讀取。由於不能準確預測將要執行的數據,讀取二級緩存的命中率也在80%左右(從二級緩存讀到有用的數據佔總數據的16%)。那麼還有的數據就不得不從內存調用,但這已經是一個相當小的比例了。

目前的較高端CPU中,還會帶有三級緩存,它是為讀取二級緩存後未命中的數據設計的—種緩存,在擁有三級緩存的CPU中,只有約5%的數據需要從內存中調用,這進一步提高了CPU的效率,從某種意義上說,預取效率的提高,大大降低了生產成本卻提供了非常接近理想狀態的性能。除非某天生產技術變得非常強,否則內存仍會存在,緩存的性能遞增特性也仍會保留。


分享到:


相關文章: