ZFSはzdb -S tankの出力を解釈します

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

前もって感謝します。

答え1

このヒストグラムで注目すべき点が 2 つあります。1 番目で最も明白なのは、dedupヒストグラムの末尾にある式です。単純な数学なので、これについて言うことはあまりありません。あなたの場合、重複排除によって節約できるスペースは 2% だけです。また、圧縮を使用していないため (圧縮は、LZ4 のような効率的なアルゴリズムでは CPU 時間よりも I/O のコストの方がはるかに高いため、スペースを節約し、パフォーマンスを向上させるため、最初に使用する必要があります)、重複排除を有効にした後の限界利益は 2 ~ 3% です。

重複排除は、有効なスペース節約が 2.0 より大きく、ストレージ サブシステムが非常に高価で、重複排除を処理するためだけにメモリと CPU を浪費しても問題ない場合に価値を持ち始めます。ここでは、エンタープライズ NVMe プールを例に説明します。

しかし、これにはどんな代償が伴うのでしょうか?

これが私が言及した 2 番目の点です。最初の影響は RAM にあります。重複排除テーブルを RAM に保存する必要があります。それを保持する RAM がない場合、システムはクラッシュし、プールをマウントできなくなります。ZFS の新しいバージョン (OpenZFS 2.0 など) にはいくつかの進歩がありますが、この点に関して何か変更があったかどうかはわかりません。

これを念頭に置いて、最初の列の最後の行にあるブロックの合計数を取得します。49.6M

各重複排除テーブルには 320 バイトが必要なので、ブロック数と特定の重複排除テーブルに必要なスペースを掛け合わせるだけで、必要な RAM の量がわかります。

49.6M * 320 bytes = 15.872MB ~ 15.5GB

つまり、ほとんど無駄になる16ギガバイト重複排除に対応していないデータの重複排除のためだけに、システム RAM の 16 GB が消費されます。この 16 GB は、プールを高速化する ARC などのシステムの重要な部分から削除されます。

したがって、いいえ。重複排除は次の場合を除いて価値がありません。

  • 非常に高価なストレージサブシステムがある
  • データの重複を簡単に排除できます

関連情報