寫透與寫回的差異:快取寫入方式比較

寫入方式決定CPU寫入快取中的資料時要做什麼。寫透快取同時更新快取與主記憶體,因此記憶體永遠是最新的,但每次寫入都會產生往記憶體的通訊。寫回快取只更新快取,並在該快取列標上髒位元,等該列被逐出時才寫入記憶體。寫回較快,所需頻寬也少,但維持一致性較為複雜。

項目寫透寫回
寫入方式每次寫入,同時寫入快取與下一層記憶體階層寫入只更新快取並設定髒位元,記憶體的更新在逐出時
記憶體流量多。每次寫入都要送到外部少。對同一列的重複寫入合併成一次寫回
寫入速度若不處理則慢。寫入緩衝區可隱藏大部分延遲快。寫入以快取的速度完成
與記憶體的一致性記憶體永遠是最新的,因此與DMA或其他核心的共用較簡單在快取列被寫回之前,記憶體可能是舊的,因此對一致性需要更加留意
複雜度簡單複雜。髒位元、逐出時的寫回、一致性協定
逐出成本便宜。沒有要寫入的東西逐出髒的快取列,需要額外一次寫入記憶體
寫入未命中的策略通常為不配置寫入通常為配置寫入
主要用途部分L1快取、簡單或重視可靠度的系統現代大部分CPU的快取,尤其是L2與L3

數值為具代表性的大致參考值,會因世代或產品而異。

適用於什麼情況

寫透
簡單性與記憶體永遠最新,比寫入頻寬更重要時。
寫回
效能重要時。尤其對於重複寫入同一列的程式碼,效果很大。

常見問題

什麼是髒位元?

在寫回快取中,附加在每一列上、表示已被修改的位元。髒的快取列在被逐出時,必須寫回記憶體。

為什麼寫回比較快?

因為對同一列的重複寫入留在快取中,合併成對記憶體的一次寫入,所以記憶體流量減少。

寫入緩衝區有什麼作用?

在寫透快取中,將對記憶體的寫入排入佇列,讓處理器不必等待完成。

在多核心下,哪一種比較簡單?

寫透。因為記憶體永遠是最新的。寫回的記憶體可能是舊的,所以需要一致性協定等更多留意。

理解度檢測

在快取的寫入方式中,關於寫回(write-back)方式的說明,下列何者正確?

  1. A不寫入快取,只更新主記憶體
  2. B每次寫入時,一定同時更新快取與主記憶體兩者
  3. C先只更新快取,待該資料從快取被逐出時,再寫回主記憶體
查看答案與解析

正確答案:C. 先只更新快取,待該資料從快取被逐出時,再寫回主記憶體

在寫回方式中,寫入只對快取進行,已更新(dirty)的快取列被逐出時,才一併寫回主記憶體。對相同位置的多次寫入,只需一次寫回即可完成,因此對主記憶體的通訊量大幅減少,許多 CPU 的 L1〜L3 都採用此方式。其代價是主記憶體與快取的內容會暫時不一致,因此需要管理一致性與 DMA 之間的一致性。

前往記憶體階層與效能的練習題

相關名詞的解說

寫穿(Write-through)
寫入快取的同時,也寫入下層(主記憶體等)的方式。下層始終保持最新,但寫入的通訊量多,因此與寫入緩衝區組合使用。
快取記憶體
設置在 CPU 附近的高速、小容量記憶體。保存常用資料,以緩和與主記憶體之間的速度差。主要由 SRAM 製成。
快取一致性
在多核心 CPU 中,各核心的快取內有相同位址的資料時,維持其內容一致性的機制。當某個核心改寫時,藉由讓其他核心的舊副本失效等方式來實現。
快取行
快取與下層之間讀寫資料的單位。也稱為快取區塊。多數CPU為64位元組,位址的低位元表示行內的位置(位移)。

相關的比較