操作系統-存儲管理(3)高速緩存Cache


存儲器的組織形式:
數據總是在相鄰兩層之間復制傳送,最小傳送單位是定長塊,互為副本(不刪除)
⭐️指令和數據有時間局部性和空間局部性。
 
高速緩沖存儲器Cache
介於CPU和主存儲器間的高速小容量存儲器,由靜態存儲芯片SRAM組成,容量較小但比主存DRAM技術更加昂貴而快速, 接近於CPU的速度。CPU往往需要重復讀取同樣的數據塊, Cache的引入與緩存容量的增大,可以大幅提升CPU內部讀取數據的命中率,從而提高系統性能。通常由高速存儲器、聯想存儲器、地址轉換部件、替換部件等組成。
  • 聯想存儲器:根據內容進行尋址的存儲器(馮氏模型中是按照地址進行尋址,但在高速存儲器中往往只存有部分信息,此時需要根據內容進行檢索)
  • 地址轉換部件:通過聯想存儲器建立目錄表以實現快速地址轉換。命中時直接訪問Cache;未命中時從內存讀取放入Cache
  • 替換部件:在緩存已滿時按一定策略進行數據塊替換,並修改地址轉換部件
早期采用外部(Off-chip)Cache,不做在CPU內而是獨立設置一個Cache;
現在采用片內(On-chip)Cache,將Cache和CPU作在一個芯片上,且采用多級Cache,同時使用L1 Cache和L2 Cache,甚至有L3 Cache。
(1)一般L1 Cache都是分立Cache,分為數據緩存和指令緩存,可以減少訪存沖突引起的結構冒險,這樣多條指令可以並行執行;內置;其成本最高,對CPU的性能影響最大
多級Cache的情況下,L1 Cache的命中時間比命中率更重要
(2)一般L2 Cache都是聯合Cache,這樣空間利用率高
沒有L3 Cache的情況下,L2 Cache的命中率比命中時間更重要(缺失時需從主存取數,並要送L1和L2 cache)
(3)L3 Cache多為外置,在游戲和服務器領域有效;但對很多應用來說,總線改善比設置L3更加有利於提升系統性能
 
例:Intel Core i7處理器的Cache架構
i-cache和d-cache都是32KB、8路、4個時鍾周期;
L2 cache:256KB 、8路、11個時鍾周期。
所有核共享的L3 cache:8MB、16路、30~40個時鍾周期。
Core i7中所有cache的塊大小都是64B
 
鑒於程序執行與數據訪問的一致性原理,存儲管理軟件使用Cache可以大幅提升程序執行效率。
主存映射:
Cache越大,Miss率越低,但成本越高
把主存空間划分成大小相等的主存塊(Block),Cache也被分成相同大小的塊,稱為Cache行(line)或槽(Slot)。
Block大小與Cache大小有關,且不能太大,也不能太小:采用大的Block能很好地利用空間局部性,但需要花費較多的時間來存取,缺失損失會變大。
將主存塊和Cache行按照以下三種方式進行映射
  • 直接(Direct)映射/模映射:每個主存塊映射到Cache的固定行
Cache標記(tag)指出對應行取自哪個主存塊群號。
有效位V,為1表示有效;開機或復位時,使所有行的有效位V=0;進程切換或DMA傳送時,通過使V=0來沖刷Cache。
操作系統內核可以使用“cache沖刷”指令
特點:容易實現,命中時間短,無需考慮淘汰問題;但不夠靈活,Cache存儲空間得不到充分利用,命中率低
例子:
Block大小為16B,Cache共4K2^12行。
如何判斷命中:中間的12位作為index索引找到對應行,拿地址中的tag和該行的tag對比,tag相等且V=1則hit
如果取32位word,塊內地址高2位決定取塊內哪個word,低2位決定取word四個字節中的哪一個
  • 全相聯(Full Associate):每個主存塊映射到Cache的任一行
按內容訪問,是相聯存取方式
特點:同時比較所有Cache項的標志,無需Cache索引;命中時間長;沒有沖突缺失,因為只要有空閑Cache塊,都不會發生沖突;每一行都需要比較器,比較器位數長,占用容量增加。
  • 組相聯(Set Associate):每個主存塊映射到Cache固定組中任
將Cache所有行分組,把主存塊映射到Cache固定組的任一行中。也即:組間模映射、組內全映射。映射關系為:
Cache標記(tag)指出對應行取自哪個主存塊群號。
N-路組相聯(N-way set associative):N 個直接映射的行並行操作
例如:2-路組相聯
  1. Cache Index 選擇其中的一個Cache行集合(共2行)
  2. 對這個集合中的兩個Cache行的Tag並行進行比較 
  3. 根據比較結果確定信息在哪個行,或不在Cache中
特點:結合直接映射和全相聯映射的優點。當Cache組數為1時,變為全相聯映射;當每組只有一個槽時,變為直接映射。
           每組2或4行(稱為2-路或4-路組相聯)較常用。
           通常每組4行以上很少用,只有在較大容量的L2 Cahce和L3 Cahce中使用 4-路以上。
 
  可能的位置 關聯度 缺失率 命中時間 tag位數
直接映射 唯一映射 最低,為1 最高 最小 最小
全相聯映射 任意映射 最高,為Cache行數 最低(關聯度越高命中率越高) 最大 標記=主存塊號
N-路組相聯映射 N-路映射 居中,為N     路數翻倍,增加1位
 
Cache替代算法:
  • 先進先出FIFO (first-in-first-out)
FIFO的命中率並不隨組的增大而提高。
  • 最近最少用LRU ( least-recently used)
LRU的命中率隨組的增大而提高。
LRU具體實現時,並不是通過移動塊來實現的,而是通過給每個cache行設定一個計數器,根據計數值來記錄這些主存塊的使用情況。這個計數值稱為LRU位。
計數器變化規則:
  1. 每組4行時,計數器有2位。計數值越小則說明越被常用。命中時,被訪問行的計數器置0,比其低的計數器加1,其余不變。
  2. 未命中且該組未滿時,新行計數器置為0,其余全加1。
  3. 未命中且該組已滿時,計數值為3的那一行中的主存塊被淘汰,新行計數器置為0,其余加1。
計數值為0的行中的主存塊最常被訪問,計數值為3的行中的主存塊最不經常被訪問,先被淘汰。
顛簸/乒乓(Thrashing / PingPong)現象:當分塊局部化范圍(即:某段時間集中訪問的存儲區)超過了Cache存儲容量時,命中率變得很低。極端情況下,假設地址流是1、2、3、4、1、2、3、4、1……而Cache每組只有3行,那么,不管是FIFO,還是LRU算法,其命中率都為0。
  • 最不經常用LFU ( least-frequently used)
  • 隨機替換算法(Random)
 
以下情況會出現 Cache一致性問題
  1. 因為Cache中的內容是主存塊副本,當對Cache中的內容進行更新時,就存在Cache和主存如何保持一致的問題。
  2. 當多個設備都允許訪問主存時。I/O設備可直接讀寫內存時,如果Cache中的內容被修改,則I/O設備讀出的對應主存單元的內容無效;若I/O設備修改了主存單元的內容,則Cache中對應的內容無效。
  3. 當多個CPU都帶有各自的Cache而共享主存時。某個CPU修改了自身Cache中的內容,則對應的主存單元和其他CPU中對應的內容都變為無效。
解決cache一致性問題的關鍵是處理好寫操作。通常有兩種寫操作方式:
  • 全寫法Write Through(通寫法、寫直達法、直寫法):
若寫命中,則同時寫cache和主存
若寫不命中,則有以下兩種處理方式:
(1)Write Allocate (寫分配):先在主存塊中更新相應存儲單元, 然后分配一個cache行,將更新后的主存塊裝入分配的cache行中。該方法試圖利用空間局部性,但每次寫不命中都要從主存讀一個塊。
(2)Not Write Allocate (非寫分配):直接寫主存單元,不把主存塊裝入到Cache。該方法可以減少讀入主存塊的時間, 但沒有很好利用空間局部性。
全寫法在替換時不必將被替換的cache內容寫回主存, 而且cache和主存的一致性能得到充分保證。但即使很少的存儲指令也會極大增加CPI。
可以在 Cache 和 Memory之間加一個Write Buffer(寫緩沖) ,它是一個FIFO隊列,一般有4項,在存數頻率不高時效果好。
CPU同時寫數據到Cache和Write Buffer;存控(Memory controller)將緩沖內容寫主存
當頻繁寫時,易使寫緩存飽和,發生阻塞。可以加一個二級Cache或者使用Write Back方式的Cache
  • 回寫法Write Back(一次性寫方式、寫回法):只寫cache不寫主存,缺失時一次寫回,每行有個修改位dirty bit臟位,大大降低主存帶寬需求,控制可能很復雜
由於回寫法沒有同步更新cache和主存內容, 所以存在cache和主存內容不一致而帶來的潛在隱患。 通常需要其他的同步機制來保證存儲信息的一致性。
總結:寫不命中時,直寫Cache可用非寫分配或寫分配;回寫Cache一定用寫分配
 
總結:
最好的情況是hit、hit、hit,此時,不需要訪問主存
最壞的情況是miss、miss、miss需訪問磁盤、並訪存至少2次
hit、hit、miss和miss、hit、hit訪存1次
miss、hit、miss不需訪問磁盤、但訪存至少2次


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM