Cache原始意義是指存取速度比一般隨機存取記憶體(RAM)快的一種RAM,通常它不像系統主記憶體那樣使用DRAM技術,而使用昂貴但較快速的SRAM技術。
何謂Cache?
Cache是用於減少處理器存取記憶體所需平均時間的機制,通常是使用SRAM技術。
為何需要Cache?
隨著技術的提升,近幾十年CPU的運算速度不斷提升,而主記憶體(DRAM)受限於技術及成本,在存取資料的速度上並沒有顯著的成長,因此CPU的處理速度與主記憶體的讀取速度之間的差異越來越大。如上圖所示,CPU與記憶體效能之間的鴻溝逐年增長。
CPU會將欲執行的程式與處理的資料先載入主記憶體中,但DRAM屬於破壞性讀取,因此速度慢且效率差,為了解決這樣的情形,開始將主記憶體裡的資料先複製在CPU與主記憶體之間一種能夠被快速存取的記憶體裡(SRAM),也就是我們所稱的 CPU Cache。
當CPU處理資料時,它會先到Cache中去尋找,如果資料因之前的操作已經讀取而被暫存其中,就不需要再從主記憶體中讀取資料,以減少CPU在主記憶體存取資料時所需要耗費的時間。
Cache的分級
由上圖可知,Cache越上層的記憶體越貴、速度越快、容量越小。越下層記憶體越便宜、速度慢、但容量越大。
CPU中常見的cache有L1、L2、L3 cache,L1與L2 cache都是由CAM(Content Addressable Memory)為主體的tag和SRAM組成的,但是L1是為了更快的訪問速度而優化過的,相對的它也更貴且更耗電;L2是為提供更大的容量優化的,相對來說也較便宜和省電。
而L1 cache又分為了L1d與L1i,分別用來儲存資料與指令。L2 cache是不區分指令和資料的,L3 cache多個核心共用一個,通常也不區分指令和資料。還有一種cache叫TLB,主要用來儲存MMU使用的頁表,通常我們講cache的時候是不算它的。
L1 cache為何需要區分 L1d 與 L1i cache?
也許這個問題用下方pipeline演示會更容易理解。
當CPU同一時間需要儲存結果與擷取指令時,如何能同時讀寫呢?
為了讓擷取指令和儲存結果能夠同時被CPU訪問,減少CPU多核心、多線存爭用Cache造成的衝突、提高處理器的效能,因此區分了L1d與L1i cache。
L1i cache通常是放在CPU核心的指令預取單元附近的,L1d cache則通常放在CPU核心的load/store單元附近;L2 cache是放在CPU pipeline之外的。
L1/L2 Cache速度差别
- L1 cache: 3 cycles
- L2 cache: 11 cycles
- L3 cache: 25 cycles
- Main Memory: 100 cycles
那麼L1與L2 cache都是使用SRAM作為存儲介質,為何說L1比L2快呢?有幾個主要原因:
1.存儲容量不同導致
L1的容量通常較L2小,容量越大的SRAM存取的速度就越慢。
2.離CPU遠近導致
通常L1 cache離CPU核心需要資料的地方更近,而L2 cache則處於邊緩位置,存取資料時,L2 cache需要通過更遠的銅線甚至更多的電路,從而增加了延時。
3.製造目的不同
同前面說過的,L1更加注重速度;L2注重節能和容量。
CPU Cache工作原理
POL(Principle of Locality)
程式運行時對記憶體的存取呈現局部性(Locality)特徵。這種局部性既包括空間局部性(Spatial Locality),也包括時間局部性(Temporal Locality)。Cache正是利用這兩個局部性特點,將程序最常使用的指令與數據放在離CPU流水線最近的地方,以便在需要時最快地獲取這部分指令與數據。
之所以提出空間局部性、時間局部性是由於大多數的存取都集中在極少數的指令或資料上,其他的指令或資料則很少被取用。為了讓快取記憶體只需很小的空間就可存放這些少數重複的指令或資料,提高擊中率使平均存取時間接近快取記憶體時間、提高效能。
時間的局部性(Temporal Locality)
一個記憶體位址被存取後,不久會再度被存取。
如:迴圈、副程式、堆疊…等
空間的局部性(Spatial Locality)
一個記憶體位址被存取後,不久其附近的記憶體位址也會被存取。
如:循序指令、陣列、相關的變數
快取SRAM和主記憶體DRAM的區別
CPU Cache基本由SRAM構成,主記憶體的DRAM其實是SDRAM(同步動態隨機存取記憶體),是DRAM的一種。
DRAM 只含一個晶體管和一個電容器,集成度非常高,可以輕鬆做出大容量,但是因為靠電容器來儲存信息,所以需要不斷刷新補充電容器的電荷,充電放電之間的時間差導致了DRAM比SRAM的反應要緩慢的多。
SRAM相比DRAM的複雜度要高許多,所以導致SRAM的集成度很低。前期CPU Cache不能集成進CPU內部也有這個原因。
SRAM的特點是快,有電就有資料,不需要刷新時間所以凸顯其資料傳輸速度很快,缺點就是佔據面積大、成本高。假如一個DRAM佔據一個單位的地方,一個SRAM就要佔據六個單位的地方。
參考資料
- 解決 preact-router 資源請求路徑錯誤的問題 - 2022 年 6 月 24 日
- [楓之谷私服] 潮流轉蛋機 NPC 腳本優化 - 2022 年 6 月 19 日
- [楓之谷私服] 簡單的飛天椅子(坐騎)改法 v120 - 2022 年 6 月 19 日