我想知道啟動 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
提前致謝。
答案1
您應該查看此直方圖的兩件事。第一個也是最明顯的一個是dedup
它結尾的表達式。沒有什麼好說的,因為它是簡單的數學。在您的情況下,重複資料刪除只會節省2% 的空間,而且由於您不使用壓縮(您應該先使用壓縮,因為它可以節省空間並為您提供效能,因為I/O 比CPU 時間成本更高)像 LZ4 這樣的高效演算法),這就是啟用重複資料刪除後您將獲得的邊際增益:2~3%。
當有效空間節省高於 2.0 並且您的儲存子系統非常昂貴,以至於可以浪費記憶體和 CPU 來處理重複資料刪除時,重複資料刪除就開始變得有價值。例如,我們正在討論企業 NVMe 池。
但這要付出什麼代價呢?
這是我提到的第二件事。第一個命中將在您的 RAM 中。您需要將重複資料刪除表儲存在 RAM 上。如果沒有 RAM 來容納它,系統就會崩潰,並且您將無法安裝該池。新版本的 ZFS(如 OpenZFS 2.0)有一些進步,但我不知道這方面是否有任何變化。
考慮到這一點,您只需獲得區塊的總數,即第一列的最後一行:49.6M
由於每個重複資料刪除表需要 320 字節,因此您只需將區塊數乘以給定重複資料刪除表所需的空間,即可獲得所需的 RAM 量:
49.6M * 320 bytes = 15.872MB ~ 15.5GB
所以你幾乎會浪費16 GB系統 RAM 只是為了對非重複資料刪除友善的資料進行重複資料刪除。這 16GB 將從系統的重要部分(例如 ARC)中刪除,這只會加速您的池。
所以不行。重複資料刪除不值得,除非:
- 您擁有極為昂貴的儲存子系統
- 您的資料可以輕鬆地進行重複資料刪除