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

您应该从两个方面来看待这个直方图。第一个也是最明显的是dedup它末尾的表达式。由于这只是简单的数学运算,因此没什么好说的。在您的情况下,重复数据删除只能节省 2% 的空间,并且由于您不使用压缩(首先您应该使用压缩,因为它可以节省空间并提高性能,因为使用 LZ4 等高效算法,I/O 比 CPU 时间要昂贵得多),这就是启用重复数据删除后您将获得的边际收益: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)中删除,这只会加速您的池。

所以,不。重复数据删除不值得,除非:

  • 您有极其昂贵的存储子系统
  • 您的数据可以轻松进行重复数据删除

相关内容