寫快取目標

寫快取目標將寫入快取到持久記憶體或 SSD 上。它不快取讀取,因為讀取通常被快取在普通 RAM 的頁快取中。

構造裝置時,第一個扇區應清零,或者第一個扇區應包含上次呼叫的有效超級塊。

建構函式引數

  1. 快取裝置型別 - “p” 或 “s”
    • p - 持久記憶體

    • s - 固態硬碟 (SSD)

  2. 將被快取的底層裝置

  3. 快取裝置

  4. 塊大小 (推薦 4096;最大塊大小為頁大小)

  5. 可選引數的數量 (帶引數的引數計為兩個)

    start_sector n (預設值: 0)

    從快取裝置開始處的偏移量,以 512 位元組扇區為單位

    high_watermark n (預設值: 50)

    當已用塊數量達到此水印時,開始回寫

    low_watermark x (預設值: 45)

    當已用塊數量低於此水印時,停止回寫

    writeback_jobs n (預設值: 無限制)

    限制回寫過程中正在傳輸的塊的數量。設定此值會降低迴寫吞吐量,但可能會改善讀取請求的延遲。

    autocommit_blocks n (預設值: 持久記憶體為 64,固態硬碟為 65536)

    當應用程式寫入此數量的塊而未發出 FLUSH 請求時,這些塊將自動提交

    autocommit_time ms (預設值: 1000)

    自動提交時間,以毫秒為單位。如果此時間過去且未收到 FLUSH 請求,資料將自動提交

    fua (預設啟用)

    僅適用於持久記憶體 - 將資料從持久記憶體回寫到底層裝置時使用 FUA 標誌

    nofua

    僅適用於持久記憶體 - 回寫資料時不使用 FUA 標誌,並在之後傳送 FLUSH 請求

    • 有些底層裝置使用 fua 效能更好,有些則使用 nofua。使用者應進行測試

    清理器

    當此選項被啟用(無論是透過建構函式引數還是透過訊息)時,快取將不會提升新的寫入(但是,對已快取塊的寫入會得到提升,以避免因寫入順序錯誤導致的資料損壞),並且它將逐漸回寫所有快取的資料。使用者空間隨後可以透過“dmsetup status”監控清理過程。當快取塊的數量降至零時,使用者空間可以解除安裝 dm-writecache 目標並將其替換為 dm-linear 或其他目標。

    max_age n

    指定塊的最大年齡,以毫秒為單位。如果一個塊在快取中儲存時間過長,它將被寫入底層裝置並被清理。

    僅元資料

    只有元資料被提升到快取。此選項可提高處理更重度的 REQ_META 工作負載的效能。

    pause_writeback n (預設值: 3000)

    如果在過去的 n 毫秒內有寫入 I/O 重定向到原始卷,則暫停回寫

狀態

  1. 錯誤指示器 - 如果沒有錯誤則為 0,否則為錯誤號

  2. 塊的數量

  3. 空閒塊的數量

  4. 正在回寫的塊的數量

  5. 讀取塊的數量

  6. 命中快取的讀取塊的數量

  7. 寫入塊的數量

  8. 命中未提交塊的寫入塊的數量

  9. 命中已提交塊的寫入塊的數量

  10. 繞過快取的寫入塊的數量

  11. 在快取中分配的寫入塊的數量

  12. 在空閒列表中被阻塞的寫入請求數量

  13. 重新整理請求的數量

  14. 丟棄塊的數量

訊息
flush

重新整理快取裝置。如果快取裝置成功重新整理且無錯誤,則訊息返回成功

flush_on_suspend

在下次暫停時重新整理快取裝置。當您要移除快取裝置時使用此訊息。移除快取裝置的正確步驟是

  1. 傳送“flush_on_suspend”訊息

  2. 載入一個非活動表,其線性目標對映到底層裝置

  3. 暫停裝置

  4. 請求狀態並驗證沒有錯誤

  5. 恢復裝置,以便它將使用線性目標

  6. 快取裝置現在處於非活動狀態,可以刪除

清理器

請參閱上面“清理器”建構函式文件。

clear_stats

清除狀態行上報告的統計資訊