寫入配置與不寫入配置的差異:寫入未命中時的動作、流量、搭配方式比較
寫入配置與不寫入配置,是決定寫入發生快取未命中時,是否把該快取行放入快取的策略。寫入配置會先從下一層載入快取行,再於快取中寫入。不寫入配置則不載入快取行,直接把寫入送往下一層。這與決定寫入命中時何時傳到下一層的寫回、寫透(write-through)是不同的軸線,但一般會將寫入配置與寫回搭配,不寫入配置與寫透搭配。
| 項目 | 寫入配置 | 不寫入配置 |
|---|---|---|
| 寫入未命中時的動作 | 從下一層載入整條快取行放入快取,再寫入其中 | 不動快取,直接把寫入送往下一層 |
| 快取行的載入 | 需要。在多核心系統中,這是為取得獨占所有權而讀取(RFO),會先使其他核心的副本失效再寫入。因此儲存未命中在記憶體匯流排上看起來就像讀取 | 不需要。只把要寫入的資料送往下一層 |
| 常搭配的寫入方式 | 寫回。之後對已載入快取行的寫入會命中,不需與記憶體通訊即可吸收,因此能回收最初載入的成本 | 寫透。寫入反正都會傳到下一層,即使載入快取行也無法減少寫入的流量 |
| 與下一層之間的流量 | 對同一行多次寫入,或寫入後又讀回資料時,流量較少 | 每次未命中的寫入都會送往下一層。但不會產生多餘的載入 |
| 只寫入的大量資料(清除記憶體、輸出資料) | 只為了覆寫而先載入快取行,之後又寫回,流量約變為 2 倍。還會把有用的資料逐出快取 | 既不載入也不污染快取,因此適合這類資料 |
| 寫入後立刻讀取 | 快取行在快取中,因此會命中 | 快取行不在快取中,因此會未命中而重新載入 |
| 實作上的技巧 | 對只寫入的資料,使用不經過快取、把寫入集中後直接送往主記憶體的非暫存儲存(串流儲存)。部分 ISA 也有不讀取舊內容、直接將整條快取行清為零的指令 | 以寫入緩衝區隱藏寫入的延遲。緩衝區也常把對同一行的多次寫入合併成一次傳輸 |
| 使用場合 | 在寫回快取中很常見。CPU 的 L1~L3 快取大多是寫回方式 | 在寫透快取中很常見。例如背後有寫回 L2 的小型 L1 快取,或簡單的嵌入式處理器 |
數值為具代表性的大致參考值,會因世代或產品而異。