持久化資料¶
引言¶
更復雜的裝置對映器目標需要由核心管理的複雜元資料。在2010年末,我們看到各種不同的目標都在開發自己的資料結構,例如
Mikulas Patocka 的多快照實現
Heinz Mauelshagen 的精簡配置目標
另一個釋出到 dm-devel 的基於 btree 的快取目標
另一個基於 Daniel Phillips 設計的多快照目標
維護這些資料結構需要大量工作,因此如果可能的話,我們希望減少它們的數量。
持久化資料庫旨在為希望在裝置對映器目標中儲存元資料的人員提供可重用的框架。它目前被精簡配置目標和即將推出的分層儲存目標所使用。
概述¶
主要文件都在標頭檔案中,所有這些檔案都可以在 drivers/md/persistent-data 下找到。
塊管理器¶
dm-block-manager.[hc]
它提供對磁碟上固定大小塊中資料的訪問。有一個讀/寫鎖定介面,用於防止併發訪問,並將正在使用的資料保留在快取中。
持久化資料的客戶端不太可能直接使用它。
事務管理器¶
dm-transaction-manager.[hc]
它限制對塊的訪問並強制執行寫時複製語義。透過事務管理器獲取可寫塊的唯一方法是影子複製現有塊(即執行寫時複製)或分配一個新塊。在同一事務中會省略影子複製,因此效能合理。提交方法確保在寫入超級塊之前重新整理所有資料。發生電源故障時,您的元資料將保持最後一次提交時的狀態。
空間對映¶
dm-space-map.h dm-space-map-metadata.[hc] dm-space-map-disk.[hc]
用於跟蹤塊引用計數的磁碟資料結構。也充當新塊的分配器。目前有兩種實現:一種更簡單的用於管理不同裝置上的塊(例如,精簡配置的資料塊);另一種用於管理元資料空間。後者因為需要在其管理的同一個空間記憶體儲自己的資料而變得複雜。
資料結構¶
dm-btree.[hc] dm-btree-remove.c dm-btree-spine.c dm-btree-internal.h
目前只有一種資料結構,即分層 btree。計劃新增更多。例如,具有類似陣列介面的資料結構將得到廣泛應用。
這種 btree 是“分層”的,因為您可以將其定義為由巢狀 btree 組成,並接受多個鍵。例如,精簡配置目標使用兩層巢狀的 btree。第一層將裝置 ID 對映到對映樹,而對映樹又將虛擬塊對映到物理塊。
儲存在 btree 中的值可以具有任意大小。鍵始終為 64 位,儘管巢狀允許您使用多個鍵。