Zfs
ZFS 解釋 zdb -S tank 的輸出
我想知道啟動 zfs 重複數據刪除是否會為我支付費用,所以我執行了該命令
zdb -S tank
,但我知道我需要一些幫助來解釋輸出。Simulated DDT histogram: bucket allocated referenced ______ ______________________________ ______________________________ refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE ------ ------ ----- ----- ----- ------ ----- ----- ----- 1 49.2M 6.15T 6.15T 6.14T 49.2M 6.15T 6.15T 6.14T 2 352K 42.0G 42.0G 42.0G 725K 86.3G 86.3G 86.4G 4 7.99K 913M 913M 916M 37.7K 4.20G 4.20G 4.21G 8 1.43K 161M 161M 161M 14.6K 1.58G 1.58G 1.58G 16 623 67.1M 67.1M 67.4M 12.2K 1.32G 1.32G 1.33G 32 73 7.37M 7.37M 7.43M 2.65K 268M 268M 270M 64 717 4.23M 4.23M 7.46M 48.3K 392M 392M 611M 128 4 257K 257K 266K 689 40.9M 40.9M 42.6M 256 2 128K 128K 133K 802 57.8M 57.8M 59.3M 512 2 1K 1K 10.7K 1.37K 703K 703K 7.32M 4K 1 128K 128K 128K 7.31K 935M 935M 934M 16K 1 512B 512B 5.33K 20.0K 10.0M 10.0M 107M 64K 1 128K 128K 128K 93.0K 11.6G 11.6G 11.6G 512K 1 128K 128K 128K 712K 89.0G 89.0G 88.9G Total 49.6M 6.19T 6.19T 6.18T 50.9M 6.34T 6.34T 6.33T dedup = 1.02, compress = 1.00, copies = 1.00, dedup * compress / copies = 1.03
提前致謝。
您應該查看此直方圖的兩件事。第一個也是最明顯的一個是
dedup
它末尾的表達式。沒什麼好說的,因為它是簡單的數學。在您的情況下,重複數據刪除只會節省 2% 的空間,並且由於您不使用壓縮(首先應該這樣做,因為它可以節省空間並提高性能,因為 I/O 比 CPU 時間成本高得多)像 LZ4 這樣的高效算法,這是啟用重複數據刪除後的邊際收益:2~3%。當有效空間節省高於 2.0 並且您的儲存子系統非常昂貴時,重複數據刪除開始變得有價值,以至於記憶體和 CPU 都可以浪費在處理重複數據刪除上。例如,我們談論的是企業 NVMe 池。
但這要付出什麼代價呢?
這是我提到的第二件事。第一個命中將在您的 RAM 中。您需要將重複數據刪除表儲存在 RAM 上。如果沒有 RAM 來保存它,系統就會崩潰,您將無法掛載池。較新版本的 ZFS(如 OpenZFS 2.0)有一些進步,但我不知道這方面是否有任何變化。
考慮到這一點,您只需獲得塊的總數,即第一列的最後一行:
49.6M
由於每個 dedup 表需要 320 字節,您只需將塊數乘以給定 dedup 表所需的空間,您將獲得所需的 RAM 量:
49.6M * 320 bytes = 15.872MB ~ 15.5GB
因此,您將浪費近16GB的系統 RAM 來對非重複數據刪除友好的數據進行重複數據刪除。這 16GB 將從系統的重要部分(如 ARC)中刪除,這只會加速您的池。
所以不行。重複數據刪除不值得,除非:
- 您擁有極其昂貴的儲存子系統
- 您的數據可以輕鬆刪除重複數據