关于这个问题,我有一个相关的问题,但是它太复杂,太大了,所以我决定将问题分为NFS和本地问题。我也曾尝试在zfs-discuss邮件列表中询问此问题,但收效甚微。
大纲:我的设置方式和期望
- 我有一个带有4个磁盘的ZFS池。2TB RED配置为2条带区镜像(RAID 10)。在Linux上,为zfsonlinux。没有缓存或日志设备。
- 跨镜像平衡数据(对于ZFS很重要)
- 每个磁盘可以并行方式以147MB /秒读取(原始w / dd),从而提供588MB /秒的组合吞吐量。
- 我预计基于相似的4TB RED磁盘的基准,每个磁盘的顺序数据写入速度约为115MB /秒,读取速度为138MB /秒,并且每秒写入速度为50MB /秒。我期望读写速度不低于100MB /秒,因为这些天任何磁盘都可以做到。
- 我以为在负载读取或写入顺序数据的情况下,所有4个磁盘上的IO利用率都会达到100%。而且磁盘将以超过100MB /秒的速度输出,而利用率为100%。
- 我以为该池将使我在单个磁盘上获得大约2倍的写入,2倍的重写和4倍的读取性能- 我错了吗?
- NEW我以为在同一池上的ext4 zvol与ZFS的速度差不多
我实际上得到了什么
我发现该池的读取性能未达到我的预期
几天前池中的bonnie ++基准
版本1.97 ------顺序输出-------顺序输入--随机- 并发1-每Chr--块--重写--每Chr--块--寻求- 机器尺寸K /秒%CP K /秒%CP K /秒%CP K /秒%CP K /秒%CP /秒%CP 伊戈尔63G 99 99 232132 47 118787 27 336 97 257072 22 92.7 6
单个4TB RED驱动器上的bonnie ++本身在zpool中
版本1.97 ------顺序输出-------顺序输入--随机- 并发1-每Chr--块--重写--每Chr--块--寻求- 机器尺寸K /秒%CP K /秒%CP K /秒%CP K /秒%CP K /秒%CP /秒%CP 伊戈尔63G 101 99 115288 30 49781 14 326 97 138250 13 111.6 8
据此,基于单个4TB RED驱动器(它们是两倍)的结果,读取和重写速度是适当的。但是,我期望的读取速度约为550MB /秒(是4TB驱动器速度的4倍),我至少希望约为400MB /秒。相反,我看到的速度约为260MB /秒
bonnie ++从现在开始,同时收集以下信息。与以前不太一样,没有任何变化。
版本1.97 ------顺序输出-------顺序输入--随机- 并发1-每Chr--块--重写--每Chr--块--寻求- 机器尺寸K /秒%CP K /秒%CP K /秒%CP K /秒%CP K /秒%CP /秒%CP 伊戈尔63G 103 99 207518 43 108810 24 342 98 302350 26 256.4 18
写入期间使用zpool iostat。对我来说似乎还可以。
容量操作带宽 池分配免费读写写写 -------------------------------------------- ------ ---- ----- ----- ----- ----- pool2 1.23T 2.39T 0 1.89K 1.60K 238M 镜子631G 1.20T 0 979 1.60K 120M ata-WDC_WD20EFRX-68AX9N0_WD-WMC300004469--0 1007 1.60K 124M ata-WDC_WD20EFRX-68EUZN0_WD-WCC4MLK57MVX--0 975 0 120M 镜子631G 1.20T 0 953 0 117M ata-WDC_WD20EFRX-68AX9N0_WD-WCC1T0429536--0 1.01K 0 128M ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M0VYKFCE--0 953 0 117M
重写期间使用zpool iostat。我想我似乎还可以。
容量操作带宽 池分配免费读写写写 -------------------------------------------- ------ ---- ----- ----- ----- ----- pool2 1.27T 2.35T 1015 923 125M 101M 镜子651G 1.18T 505465 62.2M 51.8M ata-WDC_WD20EFRX-68AX9N0_WD-WMC300004469--198438 24.4M 51.7M ata-WDC_WD20EFRX-68EUZN0_WD-WCC4MLK57MVX--306384 37.8M 45.1M 镜子651G 1.18T 510457 63.2M 49.6M ata-WDC_WD20EFRX-68AX9N0_WD-WCC1T0429536--304371 37.8M 43.3M ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M0VYKFCE--206423 25.5M 49.6M
我不知道这是怎么回事
读取期间使用zpool iostat
容量操作带宽 池分配免费读写写写 -------------------------------------------- ------ ---- ----- ----- ----- ----- pool2 1.27T 2.35T 2.68K 32 339M 141K 镜子651G 1.18T 1.34K 20 169M 90.0K ata-WDC_WD20EFRX-68AX9N0_WD-WMC300004469--748 9 92.5M 96.8K ata-WDC_WD20EFRX-68EUZN0_WD-WCC4MLK57MVX--623 10 76.8M 96.8K 镜子651G 1.18T 1.34K 11 170M 50.8K ata-WDC_WD20EFRX-68AX9N0_WD-WCC1T0429536--774 5 95.7M 56.0K ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M0VYKFCE--599 6 74.0M 56.0K
iostat -x在同一读取操作期间。请注意IO%如何不是100%。
设备:rrqm / s wrqm / sr / sw / s rkB / s wkB / s avgrq-sz avgqu-sz await r_await w_await svctm%util 标准偏差0.60 0.00 661.30 6.00 83652.80 49.20 250.87 2.32 3.47 3.46 4.87 1.20 79.76 sdd 0.80 0.00 735.40 5.30 93273.20 49.20 251.98 2.60 3.51 3.51 4.15 1.20 89.04 sdf 0.50 0.00 656.70 3.80 83196.80 31.20 252.02 2.23 3.38 3.36 6.63 1.17 77.12 sda 0.70 0.00 738.30 3.30 93572.00 31.20 252.44 2.45 3.33 3.31 7.03 1.14 84.24
zpool和测试数据集设置:
- 一次休息
- 压缩已关闭
- ashift为0(自动检测-我的理解是这样还可以)
- zdb表示磁盘全部偏移= 12
- 模块-选项zfs zvol_threads = 32 zfs_arc_max = 17179869184
- 同步=标准
编辑-2015年10月30日
我做了更多测试
- 数据集bonnie ++ w / recordsize = 1M =写入226MB,读取392MB 更好
- 带记录大小的数据集dd = 1M =写入260MB,读取392MB 更好
- zvol w / ext4 dd bs = 1M = 128MB写入,107MB读取为什么这么慢?
- 数据集2并行处理=写入227MB,读取396MB
- dd direct io在数据集和zvol上没有区别
随着记录容量的增加,我对性能更加满意。池中几乎每个文件都超过1MB。所以我就这样离开。磁盘仍然没有达到100%的利用率,这使我怀疑它是否仍然可以更快。现在我想知道为什么zvol性能如此糟糕,因为这是我(轻度)使用的东西。
我很乐意提供评论/答案中要求的任何信息。在我的另一个问题中还发布了大量信息:在同一服务器上的NFS / CIFS目录之间缓慢复制
我完全意识到,我可能只是不了解某些内容,而这可能根本不是问题。提前致谢。
明确地说,问题是:为什么ZFS池没有我期望的那么快?也许还有其他问题吗?
dd
查看获得什么样的性能。您可能还想尝试直接IO,因为您要达到流式传输速度,其中来自缓存的双重缓冲会影响性能。FWIW,理论总原始4磁盘读取性能的3/4是好的。
%util
数字。