目前,我的ZFS重复数据删除表有多大?


21

我已经阅读了很多有关为ZFS重复数据删除计划RAM需求的信息。我刚刚升级了文件服务器的RAM,以在ZFS zvols上支持一些非常有限的重复数据删除,因此我无法在其上使用快照和克隆(因为它们是zvols格式化为不同的文件系统),但是将包含很多重复的数据。

我想确保添加的新RAM将支持我打算做的有限重复数据删除。在计划中,我的数字看起来不错,但我想确定

如何确定实时系统上ZFS重复数据删除表(DDT)的当前大小?我阅读了此邮件列表主题,但不清楚它们如何获得这些数字。(我可以在zdb tank必要时发布输出,但我正在寻找可以帮助他人的通用答案)

Answers:


17

您可以使用该zpool status -D poolname命令。

输出看起来类似于:

root@san1:/volumes# zpool status -D vol1
  pool: vol1
 state: ONLINE
 scan: scrub repaired 0 in 4h38m with 0 errors on Sun Mar 24 13:16:12 2013

DDT entries 2459286, size 481 on disk, 392 in core

bucket              allocated                       referenced          
______   ______________________________   ______________________________
refcnt   blocks   LSIZE   PSIZE   DSIZE   blocks   LSIZE   PSIZE   DSIZE
------   ------   -----   -----   -----   ------   -----   -----   -----
     1    2.23M   35.6G   19.0G   19.0G    2.23M   35.6G   19.0G   19.0G
     2     112K   1.75G   1005M   1005M     240K   3.75G   2.09G   2.09G
     4    8.03K    129M   73.8M   73.8M    35.4K    566M    324M    324M
     8      434   6.78M   3.16M   3.16M    4.61K   73.8M   35.4M   35.4M
    16      119   1.86M    811K    811K    2.33K   37.3M   15.3M   15.3M
    32       24    384K   34.5K   34.5K    1.13K   18.1M   1.51M   1.51M
    64       19    304K     19K     19K    1.63K   26.1M   1.63M   1.63M
   128        7    112K      7K      7K    1.26K   20.1M   1.26M   1.26M
   256        3     48K      3K      3K     1012   15.8M   1012K   1012K
   512        3     48K      3K      3K    2.01K   32.1M   2.01M   2.01M
    1K        2     32K      2K      2K    2.61K   41.7M   2.61M   2.61M
    2K        1     16K      1K      1K    2.31K   36.9M   2.31M   2.31M
 Total    2.35M   37.5G   20.1G   20.1G    2.51M   40.2G   21.5G   21.5G

最重要的字段是分配的块和引用块。在上面的示例中,我的重复数据删除率很低。40.2G存储在磁盘上37.5G的空间中。相当于231万个区块的空间中的251万个区块。

要获取表的实际大小,请参见:

DDT条目2459286,磁盘上大小481,核心392

2459286 * 392 = 964040112字节除以1024和1024得到:RAM中的919.3MB


1
致歉。在您提供的示例中,我如何确定dedpue 表的大小,特别是它消耗了多少RAM / L2ARC?
2013年

1
查看更新的帖子。
ewwhite

1
我特别喜欢@ewwhite的示例DDT,因为它也构成了一个根本无法使用重复数据删除的比率示例。我希望zfs发送/接收该池中的数据集,从重复数据删除的数据集到非重复数据删除的数据集,并感到很幸运,它们仍然足够小,可以进行管理。:)小心您的zvols将重复数据删除。作为块级重复数据删除,单个偏移量差异可能会使整个问题变得更糟。如果我有任何建议,可以在TEST实验室中/ before /将ZFS重复数据删除放入任何生产环境中进行测试。
2013年

constantin.glez.de/blog/2011/07/zfs-dedupe-或 -not-dedupe具有一些有关计算您从dedup赢得的预期胜利和预期成本的良好信息。
jlp

这个答案需要更新,还不够完整。参见以下详细答案
Stilez

5

在阅读了原始的电子邮件线程和@ewwhite的答案后,我认为此问题需要更新的答案,因为上面的答案仅覆盖了一半。

例如,让我们使用池中的输出。我使用了命令zdb -U /data/zfs/zpool.cache -bDDD My_pool。在我的系统上,我需要额外的-Uarg来定位该池的ZFS缓存文件,FreeNAS将其存储在与正常存储位置不同的位置。您可能需要这样做,也可能不需要。通常zdb不要-U先尝试,如果遇到缓存文件错误,请使用find / -name "zpool.cache"或类似方法查找所需的文件。

这是我的实际输出,并在下面进行了解释:

DDT-sha256-zap-duplicate: 771295 entries, size 512 on disk, 165 in core

bucket              allocated                       referenced
______   ______________________________   ______________________________
refcnt   blocks   LSIZE   PSIZE   DSIZE   blocks   LSIZE   PSIZE   DSIZE
------   ------   -----   -----   -----   ------   -----   -----   -----
     2     648K   75.8G   68.6G   68.8G    1.39M    165G    149G    149G
     4    71.2K   8.07G   6.57G   6.62G     368K   41.7G   34.1G   34.3G
     8    28.1K   3.12G   2.34G   2.36G     281K   31.0G   23.1G   23.4G
    16    5.07K    424M    232M    241M     110K   9.10G   5.06G   5.24G
    32    1.09K   90.6M   51.8M   53.6M    45.8K   3.81G   2.21G   2.28G
    64      215   17.0M   8.51M   8.91M    17.6K   1.39G    705M    739M
   128       38   2.12M    776K    872K    6.02K    337M    118M    133M
   256       13    420K   21.5K     52K    4.63K    125M   7.98M   18.5M
   512        3      6K      3K     12K    1.79K   3.44M   1.74M   7.16M
    1K        1    128K      1K      4K    1.85K    237M   1.85M   7.42M
    2K        1     512     512      4K    3.38K   1.69M   1.69M   13.5M

DDT-sha256-zap-unique: 4637966 entries, size 478 on disk, 154 in core

bucket              allocated                       referenced
______   ______________________________   ______________________________
refcnt   blocks   LSIZE   PSIZE   DSIZE   blocks   LSIZE   PSIZE   DSIZE
------   ------   -----   -----   -----   ------   -----   -----   -----
     1    4.42M    550G    498G    500G    4.42M    550G    498G    500G


DDT histogram (aggregated over all DDTs):

bucket              allocated                       referenced
______   ______________________________   ______________________________
refcnt   blocks   LSIZE   PSIZE   DSIZE   blocks   LSIZE   PSIZE   DSIZE
------   ------   -----   -----   -----   ------   -----   -----   -----
     1    4.42M    550G    498G    500G    4.42M    550G    498G    500G
     2     648K   75.8G   68.6G   68.8G    1.39M    165G    149G    149G
     4    71.2K   8.07G   6.57G   6.62G     368K   41.7G   34.1G   34.3G
     8    28.1K   3.12G   2.34G   2.36G     281K   31.0G   23.1G   23.4G
    16    5.07K    424M    232M    241M     110K   9.10G   5.06G   5.24G
    32    1.09K   90.6M   51.8M   53.6M    45.8K   3.81G   2.21G   2.28G
    64      215   17.0M   8.51M   8.91M    17.6K   1.39G    705M    739M
   128       38   2.12M    776K    872K    6.02K    337M    118M    133M
   256       13    420K   21.5K     52K    4.63K    125M   7.98M   18.5M
   512        3      6K      3K     12K    1.79K   3.44M   1.74M   7.16M
    1K        1    128K      1K      4K    1.85K    237M   1.85M   7.42M
    2K        1     512     512      4K    3.38K   1.69M   1.69M   13.5M
 Total    5.16M    638G    576G    578G    6.64M    803G    712G    715G

dedup = 1.24, compress = 1.13, copies = 1.00, dedup * compress / copies = 1.39

这意味着什么,并计算出实际的dedup表大小:

输出显示两个子表,一个子表用于存在重复项的块(DDT-sha256-zap-duplicate),一个子表用于不存在重复项的块(DDT-sha256-zap-unique)/。它们下面的第三张表给出了这两项的总和,下面有一个摘要行。仅查看“总计”行和摘要将为我们提供所需的信息:

出现多次的所有块的DDT大小 (“ DDT-sha256-zap-duplicate”)
771295 entries, size 512 bytes on disk, 165 bytes in RAM ("core")

唯一块的DDT大小 (“ DDT-sha256-zap-unique”)
4637966 entries, size 478 bytes on disk, 154 bytes in RAM ("core")

所有DDT条目的DDT统计总数,重复+唯一 (“在所有DDT上汇总的DDT直方图”)

                    allocated                       referenced
          (= disk space actually used)      (= amount of data deduped 
                                                 into that space)
______   ______________________________   ______________________________
         blocks   LSIZE   PSIZE   DSIZE   blocks   LSIZE   PSIZE   DSIZE

 Total    5.16M    638G    576G    578G    6.64M    803G    712G    715G

总结
dedup = 1.24, compress = 1.13, copies = 1.00, dedup * compress / copies = 1.39

让我们做一些数字运算。

  • 块计数的工作方式如下:与重复块相关的条目数= 771295,与唯一块相关的条目数= 4637966,DDT表中的总条目数应为771295 + 4637966 =5409261。因此,以百万为单位的块数(二进制百万)即!)为5409261 /(1024 ^ 2)= 515.8万。在摘要中,我们发现总共516万个块

  • 所需的RAM的工作方式如下:重复块的771295条目每个在RAM中占据165字节,唯一块的4637966条目每个在RAM中占据154字节,因此,现在dedup表所需的总RAM = 841510439字节= 841510439 / (1024 ^ 2)兆字节= 803 MB = 0.78 GB RAM

    (可以使用相同的方法,使用“磁盘上的大小”数字来计算出磁盘上的大小。显然,ZFS正在尝试有效地使用磁盘I / O,并利用了DDT占用的磁盘空间不足这一事实。通常来说,这不是问题。因此,ZFS似乎只是为每个条目分配了一个完整的512字节扇区,或者沿着这些行分配了一些内容,而不是仅为154或165字节,以保持高效。这可能不包括对多个副本保存在磁盘上,这是ZFS通常所做的。)

  • 存储的数据总量以及从中删除数据的好处:从DDT的总数统计中,仅使用磁盘上分配的578 GBytes(“ 578G”)存储了715 Gbytes(“ 715G”)的数据。因此,我们的dedup空间节省比率为(715 GB数据)/(重复数据删除后使用的578 GB空间) = 1.237 x,这是摘要所告诉我们的(“ dedup = 1.24”)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.