我开始研究 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
回复您的笔记:
- 网络利用率不应该是罪魁祸首,因为标准以太网帧最多为 1500 字节(不包括巨型帧)。读取性能下降似乎与 FS 和设备对齐问题有关。你能再检查一下吗?无论如何,这也可能是由于碎片增多造成的
- 较小的块不太适合缓存。但是,这可能是 Windows 缓存 iSCSI 磁盘的方式的副作用
- 有了更高的队列深度,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]