Zfs

ZFS 解釋 zdb -S tank 的輸出

  • December 30, 2020

我想知道啟動 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)中刪除,這只會加速您的池。

所以不行。重複數據刪除不值得,除非:

  • 您擁有極其昂貴的儲存子系統
  • 您的數據可以輕鬆刪除重複數據

引用自:https://serverfault.com/questions/1045336