【问题标题】:ZFS Blocksize (recordsize) and primarycache issueZFS 块大小(记录大小)和主缓存问题
【发布时间】:2014-10-02 01:07:29
【问题描述】:

在这个网站上:http://www.patpro.net/blog/index.php/2014/03/19/2628-zfs-primarycache-all-versus-metadata/

此人表明,通过将primarycache 切换为全部或元数据,他在使用防病毒软件时获得了截然不同的读取性能。

但是,他也表明读取带宽也有很大差异。

我创建了 2 个全新的数据集,它们的 primarycache=none 和 compression=lz4,我在每个数据集中复制了一个 4.8GB 的​​文件(2.05x 压缩率)。然后我在第一个上设置 primarycache=all,在第二个上设置 primarycache=metadata。 我使用在另一个终端中运行的 zpool iostat 将第一个文件放入 /dev/null 中。最后,我以同样的方式分类第二个文件。

对于primarycache=all 的数据集,读取带宽列的总和(几乎)正好是磁盘上文件的物理大小(du 输出):2.44GB。 对于另一个数据集,primarycache=metadata,读取带宽列的总和是......等待它...... 77.95GB。

然后他说一位匿名用户是这样解释的:

clamscan 读取一个文件,获取 4k(页面大小?)的数据并对其进行处理,然后读取下一个 4k,等等。

然而,ZFS 不能只读取 4k。默认情况下它读取 128k(记录大小)。由于没有缓存(您已将其关闭),其余数据将被丢弃。

128k / 4k = 32

32 x 2.44GB = 78.08GB

我不太明白匿名用户的解释。我仍然对为什么读取带宽有如此大的差异感到困惑。

那么为什么这个ZFS实验显示primarycache是all时,读取带宽是2.44GB,而只是元数据时是77.95GB?调优 ZFS 有什么影响?如果这个人可能减少他的记录大小,他会得到不同的结果吗?

关于 ZFS 的记录大小是可变的说法呢?

【问题讨论】:

    标签: filesystems zfs


    【解决方案1】:

    博主 Patrick 进行的测试是将 4.8 GB 文件(压缩到 2.44 GB)“cat”到 /dev/null 并观察读取文件需要多长时间。

    关键是“primarycache=metadata”也可以表示“cache=off”,因为实际文件不会存储在缓存中。当“primarycache=all”时,系统会读取整个文件一次并将其存储在缓存中(通常是 RAM,然后在 L2 SSD 缓存填满时)。当“cat”或“clamscan”查找文件时,他们可以在那里找到它,并且不需要从磁盘再次读取。

    当 cat 将文件写入 /dev/null 时,它不只是将其写入单个 2.44 GB 块中,它一次写入一点点,然后它会检查缓存中的下一位,然后它多写一点,等等。

    在缓存关闭的情况下,该文件将需要从磁盘中重新读取很多次,因为它被写入 /dev/null(或 stdout,任何地方)——这就是“128k/4k = 32”的逻辑.

    ZFS 以 128k 块在磁盘上写入文件,但论坛发帖者发现“clamscan”(和“cat”,至少在该用户的 FreeBSD 机器上)以 4k 块处理数据。因此,如果没有缓存,每个 128k 块将不得不被提供 32 次而不是一次。 (clamscan 拉出块 #1,128k 大,使用第一个 4k;再次需要块 #1,因为没有缓存,它再次从磁盘读取块;取出第二个 4k,将其余的扔掉;等等)

    结果是:

    [1] 出于任何原因,也许永远不要使用“primarycache=metadata”。

    [2] 当块大小不匹配时,可能会导致性能问题。 如果 clamscan 读取 128k 块,则读取单个文件不会有(显着?)差异。 OTOH,如果您不久之后再次需要该文件,缓存仍会保留其数据块,并且不需要再次从磁盘中提取。

    ...

    这里有一些受论坛帖子启发的测试来说明。这些示例发生在 zfs 数据集上,记录大小设置为 128k(默认值),primarycache 设置为元数据,并以不同的块大小复制 1G 虚拟文件,首先是 128k,然后是 4,然后是 8。(向右滚动,我已经将我的复制命令与 iostat 读数对齐)。

    请注意,当块大小不匹配时,读取与写入的比率会急剧增加,读取带宽会大幅上升。

        root@zone1:~# zpool iostat 3
                       capacity     operations    bandwidth
        pool        alloc   free   read  write   read  write
        ----------  -----  -----  -----  -----  -----  -----
        rpool        291G   265G      0     21  20.4K   130K
        rpool        291G   265G      0      0      0      0
        rpool        291G   265G      0    515      0  38.9M            ajordan@zone1:~/mnt/test$ mkfile 1G test1.tst   
        rpool        291G   265G      0  1.05K      0   121M
        rpool        292G   264G      0    974      0   100M
        rpool        292G   264G      0    217      0  26.7M
        rpool        292G   264G      0    516      0  58.0M
        rpool        292G   264G      0      0      0      0
        rpool        292G   264G      0      0      0      0
        rpool        292G   264G      0     96      0   619K
        rpool        292G   264G      0      0      0      0
        rpool        292G   264G      0      0      0      0
        rpool        292G   264G      0      0      0      0
        rpool        292G   264G      0      0      0      0
        rpool        292G   264G      0      0      0      0
        rpool        292G   264G      0      0      0      0
        rpool        292G   264G      0      0      0      0
        rpool        292G   264G      0      0      0      0
        rpool        292G   264G    474      0  59.3M      0            ajordan@zone1:~/mnt/test$ dd if=test1.tst of=test1.2 bs=128k
        rpool        292G   264G    254    593  31.8M  67.8M                
        rpool        292G   264G    396    230  49.6M  27.9M                
        rpool        293G   263G    306    453  38.3M  45.2M                8192+0 records in
        rpool        293G   263G    214    546  26.9M  62.0M                8192+0 records out
        rpool        293G   263G    486      0  60.8M      0
        rpool        293G   263G    211    635  26.5M  72.9M
        rpool        293G   263G    384    235  48.1M  29.2M
        rpool        293G   263G      0    346      0  37.2M
        rpool        293G   263G      0      0      0      0
        rpool        293G   263G      0      0      0      0
        rpool        293G   263G      0      0      0      0
        rpool        293G   263G      0      0      0      0
        rpool        293G   263G      0      0      0      0
        rpool        293G   263G      0      0      0      0
        rpool        293G   263G      0      0      0      0
        rpool        293G   263G      0      0      0      0
        rpool        293G   263G  1.05K     70   134M  3.52M            ajordan@zone1:~/mnt/test$ dd if=test1.tst of=test1.3 bs=4k
        rpool        293G   263G  1.45K      0   185M      0                
        rpool        293G   263G  1.35K    160   173M  10.0M
        rpool        293G   263G  1.44K      0   185M      0
        rpool        293G   263G  1.31K    180   168M  9.83M
        rpool        293G   263G  1.36K    117   174M  9.20M
        rpool        293G   263G  1.42K      0   181M      0
        rpool        293G   263G  1.26K    120   161M  9.48M
        rpool        293G   263G  1.49K      0   191M      0
        rpool        293G   263G  1.40K    117   179M  9.23M
        rpool        293G   263G  1.36K    159   175M  9.98M
        rpool        293G   263G  1.41K     12   180M   158K
        rpool        293G   263G  1.23K    167   157M  9.63M
        rpool        293G   263G  1.54K      0   197M      0
        rpool        293G   263G  1.36K    158   175M  9.70M
        rpool        293G   263G  1.42K    151   181M  9.99M
        rpool        293G   263G  1.41K     21   180M   268K
        rpool        293G   263G  1.32K    132   169M  9.39M
        rpool        293G   263G  1.48K      0   189M      0
        rpool        294G   262G  1.42K    118   181M  9.32M
        rpool        294G   262G  1.34K    121   172M  9.73M
        rpool        294G   262G    859      2   107M  10.7K
        rpool        294G   262G  1.34K    135   171M  6.83M
        rpool        294G   262G  1.43K      0   183M      0
        rpool        294G   262G  1.31K    120   168M  9.44M
        rpool        294G   262G  1.26K    116   161M  9.11M
        rpool        294G   262G  1.52K      0   194M      0
        rpool        294G   262G  1.32K    118   170M  9.44M
        rpool        294G   262G  1.48K      0   189M      0
        rpool        294G   262G  1.23K    170   157M  9.97M
        rpool        294G   262G  1.41K    116   181M  9.07M
        rpool        294G   262G  1.49K      0   191M      0
        rpool        294G   262G  1.38K    123   176M  9.90M
        rpool        294G   262G  1.35K      0   173M      0
        rpool        294G   262G  1.41K    114   181M  8.86M
        rpool        294G   262G  1.29K    155   165M  10.3M
        rpool        294G   262G  1.50K      7   192M  89.3K
        rpool        294G   262G  1.43K    116   183M  9.03M
        rpool        294G   262G  1.52K      0   194M      0
        rpool        294G   262G  1.39K    125   178M  10.0M
        rpool        294G   262G  1.28K    119   164M  9.52M
        rpool        294G   262G  1.54K      0   197M      0
        rpool        294G   262G  1.39K    120   178M  9.57M
        rpool        294G   262G  1.45K      0   186M      0
        rpool        294G   262G  1.37K    133   175M  9.60M                
        rpool        294G   262G  1.38K    173   176M  10.1M                
        rpool        294G   262G  1.61K      0   207M      0
        rpool        294G   262G  1.47K    125   189M  10.2M
        rpool        294G   262G  1.56K      0   200M      0
        rpool        294G   262G  1.38K    124   177M  10.2M
        rpool        294G   262G  1.37K    145   175M  9.95M
        rpool        294G   262G  1.51K     28   193M   359K
        rpool        294G   262G  1.32K    171   169M  10.1M
        rpool        294G   262G  1.55K      0   199M      0
        rpool        294G   262G  1.29K    119   165M  9.48M
        rpool        294G   262G  1.11K    110   142M  8.36M
        rpool        294G   262G  1.43K      0   183M      0
        rpool        294G   262G  1.36K    118   174M  9.32M
        rpool        294G   262G  1.49K      0   190M      0
        rpool        294G   262G  1.35K    118   173M  9.32M
        rpool        294G   262G  1.32K    146   169M  10.1M
        rpool        294G   262G  1.07K     29   137M   363K                262144+0 records in
        rpool        294G   262G      0     79      0  4.65M                262144+0 records out
        rpool        294G   262G      0      0      0      0
        rpool        294G   262G      0      0      0      0
        rpool        294G   262G      0      0      0      0
        rpool        294G   262G      0      0      0      0
        rpool        294G   262G      0      0      0      0
        rpool        294G   262G      0      0      0      0
    
    
    
        root@zone1:~# zpool iostat 3
                       capacity     operations    bandwidth
        pool        alloc   free   read  write   read  write
        ----------  -----  -----  -----  -----  -----  -----
        rpool        292G   264G      0     21  22.6K   130K
        rpool        292G   264G      0      0      0      0
        rpool        292G   264G      0      0      0      0
        rpool        292G   264G  1.03K      0   131M      0            ajordan@zone1:~/mnt/test$ dd if=test8k.tst of=test8k.2 bs=8k
        rpool        292G   264G  1.10K    202   141M  16.4M
        rpool        292G   264G  1.25K     25   161M   316K
        rpool        292G   264G    960    215   120M  15.5M
        rpool        292G   264G  1.25K      0   160M      0
        rpool        292G   264G     1K    210   128M  14.8M
        rpool        292G   264G   1010    159   126M  14.3M
        rpool        292G   264G  1.28K      0   164M      0
        rpool        292G   264G  1.08K    169   138M  15.6M
        rpool        292G   264G  1.25K      0   161M      0
        rpool        292G   264G  1.00K    166   128M  15.3M
        rpool        293G   263G    998    201   125M  15.1M
        rpool        293G   263G  1.19K      0   153M      0
        rpool        293G   263G    655    161  82.0M  14.2M
        rpool        293G   263G  1.27K      0   162M      0
        rpool        293G   263G  1.02K    230   130M  12.7M
        rpool        293G   263G  1.02K    204   130M  15.5M
        rpool        293G   263G  1.23K      0   157M      0
        rpool        293G   263G  1.11K    162   142M  14.8M
        rpool        293G   263G  1.26K      0   161M      0
        rpool        293G   263G  1.01K    168   130M  15.5M
        rpool        293G   263G  1.04K    215   133M  15.5M
        rpool        293G   263G  1.30K      0   167M      0
        rpool        293G   263G  1.01K    210   129M  16.1M
        rpool        293G   263G  1.24K      0   159M      0
        rpool        293G   263G  1.10K    214   141M  15.3M
        rpool        293G   263G  1.07K    169   137M  15.6M
        rpool        293G   263G  1.25K      0   160M      0
        rpool        293G   263G  1.01K    166   130M  15.0M
        rpool        293G   263G  1.25K      0   160M      0
        rpool        293G   263G    974    230   122M  15.8M
        rpool        293G   263G  1.11K    160   142M  14.4M
        rpool        293G   263G  1.26K      0   161M      0
        rpool        293G   263G  1.06K    172   136M  15.8M
        rpool        293G   263G  1.27K      0   162M      0
        rpool        293G   263G  1.07K    167   136M  15.4M
        rpool        293G   263G   1011    217   126M  15.8M
        rpool        293G   263G  1.22K      0   156M      0
        rpool        293G   263G    569    160  71.2M  14.6M                131072+0 records in
        rpool        293G   263G      0      0      0      0                131072+0 records out
        rpool        293G   263G      0     98      0  1.09M
        rpool        293G   263G      0      0      0      0
        rpool        293G   263G      0      0      0      0
        rpool        293G   263G      0      0      0      0
    

    【讨论】:

    • 真棒回答谢谢。我猜块大小应该总是匹配的。但是对于可变工作负载,块大小应该是多少?高估平均工作负载块大小还是低估平均工作负载块大小更好?
    • 嗯,我看到您在上面也问过这个问题——“ZFS 的记录大小是可变的说法怎么样?” -- 记录大小是一个可变属性,因为文件系统将以该大小(假设默认值,128k)或更少保存块。如果文件大于 128k,它将被分成 128k 块。尝试将记录大小与存储的块大小相匹配,或者是它的倍数(从不小于)——这是一个很大的话题,这里有一个不错的链接:link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2021-09-17
    • 2011-03-25
    • 1970-01-01
    相关资源
    最近更新 更多