4K 池块大小的 ZFS 性能奇怪吗?

4K 池块大小的 ZFS 性能奇怪吗?

我开始研究 ZFS,在旧的 HP MicroServer (N40L) 上使用 FreeNAS 进行测试。尚未获得额外的 RAM,因此它仅以 2 GB 运行,因此几乎没有缓存。

我在单个 1 TB SATA 磁盘上创建了一个池,创建了一个 zvol,并使用 iSCSI 将其导出。我刚刚在 Windows 10 上使用 CrystalDiskMark 运行了一些测试,在更改池块大小时我得到了奇怪的结果。

ZFS 16K 和 NTFS 4K

-----------------------------------------------------------------------
CrystalDiskMark 5.1.0 x64 (C) 2007-2015 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

   Sequential Read (Q= 32,T= 1) :   105.938 MB/s
  Sequential Write (Q= 32,T= 1) :    98.709 MB/s
  Random Read 4KiB (Q= 32,T= 1) :     8.330 MB/s [  2033.7 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :     6.243 MB/s [  1524.2 IOPS]
         Sequential Read (T= 1) :    93.946 MB/s
        Sequential Write (T= 1) :    72.780 MB/s
   Random Read 4KiB (Q= 1,T= 1) :     8.948 MB/s [  2184.6 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :     6.898 MB/s [  1684.1 IOPS]

  Test : 1024 MiB [X: 0.0% (0.2/849.9 GiB)] (x1)  [Interval=5 sec]
  Date : 2016/01/12 18:54:05
    OS : Windows 10 Professional [10.0 Build 10586] (x64)

与客户端 PC 中用作 SATA 磁盘的同一磁盘相比,这里的一切都如我所料。
- 由于 iSCSI 开销,顺序性能有所损失。
- 随机读取更好,有一些缓存。
- 随机写入更好,因为 COW 使得写入实际上不是随机的。

ZFS 4K 和 NTFS 4K

-----------------------------------------------------------------------
CrystalDiskMark 5.1.0 x64 (C) 2007-2015 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

   Sequential Read (Q= 32,T= 1) :    24.405 MB/s
  Sequential Write (Q= 32,T= 1) :    81.038 MB/s
  Random Read 4KiB (Q= 32,T= 1) :     3.048 MB/s [   744.1 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :    55.971 MB/s [ 13664.8 IOPS]
         Sequential Read (T= 1) :    42.362 MB/s
        Sequential Write (T= 1) :    45.292 MB/s
   Random Read 4KiB (Q= 1,T= 1) :     0.961 MB/s [   234.6 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :     9.576 MB/s [  2337.9 IOPS]

  Test : 1024 MiB [X: 0.0% (0.2/799.9 GiB)] (x1)  [Interval=5 sec]
  Date : 2016/01/12 19:10:22
    OS : Windows 10 Professional [10.0 Build 10586] (x64)

几点说明:
- 网络使用量不超过 600 Mb(Windows 10 上的任务管理器),因此比第一次测试中完全使用的要少。
- CPU 使用率大约是第一次测试的两倍,但仍然至少有 20% 处于空闲状态(FreeNAS 服务器上的最高值)

我没想到这一点!
- 顺序性能较低。也许是传输了更多较小的数据包,因此网络未得到充分利用?
- 随机读取较低。这实际上只是缓存较少,仍然超过磁盘性能。但为什么缓存较少?
- Q=32 时随机写入要好得多。我想说 ZFS 在之前的测试中写入 4K 时写入 16K(12K 为空)。真的是这样吗?

答案1

回复您的笔记:

  1. 网络利用率不应该是罪魁祸首,因为标准以太网帧最多为 1500 字节(不包括巨型帧)。读取性能下降似乎与 FS 和设备对齐问题有关。你能再检查一下吗?无论如何,这也可能是由于碎片增多造成的
  2. 较小的块不太适合缓存。但是,这可能是 Windows 缓存 iSCSI 磁盘的方式的副作用
  3. 有了更高的队列深度,Windows 和 FreeNAS IO 调度程序都有机会重新排序和合并多个写入。但这种优化似乎只适用于较小的 (4KB) IO 请求。也许较大的 (>= 16KB) IO 请求会以不同的方式处理。

答案2

如果您在 ZFS 中使用 zvol,非 Solaris 发行版的最佳做法是使用较大的块大小。在 Linux 下,我们创建块大小为 128K 的 zvol。

你能尝试做同样的事情吗?

答案3

我知道我没有足够的 RAM,所以不会缓存任何数据,但看起来 2 GB 甚至不足以将元数据存储在具有 4K 块大小的 RAM 中 - 块越多,元数据就越多。如果写入时元数据不在 RAM 中,则必须从磁盘读取元数据以找到可用空间,这会降低性能。

我买了 8 GB ECC RAM,并进行了更多测试,仍然是单磁盘。现在的结果很有意义,当 ZFS 和 NTFS 块大小匹配且顺序写入性能相同时,随机写入性能会更好。

块大小可能会影响连续速度,但这里受网络限制。如果我有额外的网卡来实现多路径,我会做更多测试。

ZFS 4K 和 NTFS 4K

   Sequential Read (Q= 32,T= 1) :   118.472 MB/s
  Sequential Write (Q= 32,T= 1) :   101.721 MB/s
  Random Read 4KiB (Q= 32,T= 1) :   115.943 MB/s [ 28306.4 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :    88.872 MB/s [ 21697.3 IOPS]
         Sequential Read (T= 1) :   102.555 MB/s
        Sequential Write (T= 1) :    80.744 MB/s
   Random Read 4KiB (Q= 1,T= 1) :     9.668 MB/s [  2360.4 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :     9.410 MB/s [  2297.4 IOPS]

ZFS 8K 和 NTFS 4K

   Sequential Read (Q= 32,T= 1) :   118.154 MB/s
  Sequential Write (Q= 32,T= 1) :   102.506 MB/s
  Random Read 4KiB (Q= 32,T= 1) :   113.806 MB/s [ 27784.7 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :    73.798 MB/s [ 18017.1 IOPS]
         Sequential Read (T= 1) :   106.324 MB/s
        Sequential Write (T= 1) :    91.004 MB/s
   Random Read 4KiB (Q= 1,T= 1) :    10.161 MB/s [  2480.7 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :     9.628 MB/s [  2350.6 IOPS]

ZFS 8K 和 NTFS 8K

   Sequential Read (Q= 32,T= 1) :   118.051 MB/s
  Sequential Write (Q= 32,T= 1) :    99.229 MB/s
  Random Read 4KiB (Q= 32,T= 1) :   113.327 MB/s [ 27667.7 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :    75.365 MB/s [ 18399.7 IOPS]
         Sequential Read (T= 1) :   106.110 MB/s
        Sequential Write (T= 1) :    87.242 MB/s
   Random Read 4KiB (Q= 1,T= 1) :     9.880 MB/s [  2412.1 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :     9.878 MB/s [  2411.6 IOPS]

ZFS 16K 和 NTFS 4K

   Sequential Read (Q= 32,T= 1) :   118.040 MB/s
  Sequential Write (Q= 32,T= 1) :   100.274 MB/s
  Random Read 4KiB (Q= 32,T= 1) :   114.780 MB/s [ 28022.5 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :     6.014 MB/s [  1468.3 IOPS]
         Sequential Read (T= 1) :   108.443 MB/s
        Sequential Write (T= 1) :    90.182 MB/s
   Random Read 4KiB (Q= 1,T= 1) :    11.281 MB/s [  2754.2 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :     8.229 MB/s [  2009.0 IOPS]

ZFS 16K 和 NTFS 8K

   Sequential Read (Q= 32,T= 1) :   118.046 MB/s
  Sequential Write (Q= 32,T= 1) :    99.386 MB/s
  Random Read 4KiB (Q= 32,T= 1) :   115.745 MB/s [ 28258.1 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :    51.101 MB/s [ 12475.8 IOPS]
         Sequential Read (T= 1) :   105.913 MB/s
        Sequential Write (T= 1) :    91.225 MB/s
   Random Read 4KiB (Q= 1,T= 1) :    10.244 MB/s [  2501.0 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :     9.373 MB/s [  2288.3 IOPS]

ZFS 16K 和 NTFS 16K

   Sequential Read (Q= 32,T= 1) :   118.046 MB/s
  Sequential Write (Q= 32,T= 1) :   101.422 MB/s
  Random Read 4KiB (Q= 32,T= 1) :   113.856 MB/s [ 27796.9 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :    40.821 MB/s [  9966.1 IOPS]
         Sequential Read (T= 1) :   107.572 MB/s
        Sequential Write (T= 1) :    89.345 MB/s
   Random Read 4KiB (Q= 1,T= 1) :    11.112 MB/s [  2712.9 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :     9.691 MB/s [  2366.0 IOPS]

有关本地连接的同一磁盘的信息 - NTFS 4K

   Sequential Read (Q= 32,T= 1) :   130.080 MB/s
  Sequential Write (Q= 32,T= 1) :   121.335 MB/s
  Random Read 4KiB (Q= 32,T= 1) :     1.005 MB/s [   245.4 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :     1.290 MB/s [   314.9 IOPS]
         Sequential Read (T= 1) :   129.997 MB/s
        Sequential Write (T= 1) :   128.324 MB/s
   Random Read 4KiB (Q= 1,T= 1) :     0.406 MB/s [    99.1 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :     1.307 MB/s [   319.1 IOPS]

相关内容