1. 程式人生 > >Cache寫機制

Cache寫機制

緩存 定義 更新 -a 內存 分配 dir clas 數據

Cache 寫機制分為:Write-through和Write-back

Write-through(直寫模式)

定義:在數據更新時,同時寫入緩存Cache和後端存儲(主存);

優點:操作簡單;

缺點:因為數據修改需要同時寫入存儲,數據寫入速度較慢。

對於寫缺失使用no write allocate policy(見下文)的write through 處理流程

技術分享圖片

Write-back(回寫模式)

定義:在數據更新時只寫入緩存Cache,只在數據被替換出緩存時,被修改(用dirty標記)的緩存數據才會被寫到後端存儲(主存);

優點:數據寫入速度快,因為不需要寫到後端存儲(主存);

缺點:一旦更新後的數據未被寫入存儲時出現系統掉電的情況,數據將無法找回。

對於寫缺失使用write allocate policy(見下文)的write back 的處理流程:

技術分享圖片

註意:上述兩種寫模式都是針對當緩存cache中存在要寫的數據的地址時的分配策略,然而,當要寫的數據的地址不在緩存cache中,即發生Write miss。

Write-miss(寫失效)

write-miss(即所要寫的數據的地址不在cache中)的處理方式有兩種:

no write allocate policy:將要寫的內容直接寫回main memory;

write allocate policy:將要寫的地址所在的塊先從main memory(主存)調入cache中,然後寫cache;

註意:拿L1 Dcache為例,因為對一個cache line的寫入一般不會剛好是一個cache line的長度(抓了trace看過,肉眼觀察是8個字節的訪問粒度居多),

一個cache line一般是64字節,你的一次register spilling只有幾個字節,也就是說你的一次寫入只更新了一個cache line的一小部分,其他部分的值必須保持和內存一致,

所以你不能在cache裏隨便找一個地方就寫,而是要先把舊值取上來,再寫入,這是write-allocate的做法。

Cache寫機制