由于txg_sync在Ubuntu 14.04上的ZFS 0.6.3性能下降

我在这里使用本地ZFS和“从Linux上安装的ZFS”。 安装不是问题,我正在使用两个WD 4TB红色硬盘的镜像configuration。 不幸的是我在写入磁盘arrays时遇到性能问题。 当阅读表演是确定的。

我遇到了这样的问题,即在大量写入arrays期间,复制进程每隔5秒停止大约5-10MB / s,如rsync报告的那样。 中间的速度是~75MB / s,这是其他文件系统,我期望从系统(我尝试btrfs,它得到〜85MB / s)内联。 看着iotop我发现复制txg_synctxg_sync执行/占用I / O的过程相一致。 这个问题似乎是“突发”I / O问题,似乎是ZFS的一个常见问题(请参见此处和此处 )。 我已经应用了第一个链接的选项

 options zfs zfs_prefetch_disable=1 

这对性能问题有所帮助,但并没有解决这些问题。 txg_sync的5s间隔似乎是vfs.zfs.txg.timeout =“5”(例如5s),这是Linux上ZFS的默认设置。

这是正常的行为还是有其他设置我可以尝试? 如果是的话,有什么build议? 请注意,我无法在两个链接中find许多选项…

编辑2:跟进一点:我使用的系统是惠普ProLiant微服务器N36L,我升级到8GB的ECC内存。 这里给出了用于创buildZFS卷的命令。 请注意,我正在使用-o ashift=12 (在zfsonlinux FAQ中find),这应该使ZFS与高级格式化磁盘的4096Byte块配合使用。

 $ zpool create -o ashift=12 -m /zpools/tank tank mirror ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E0871252 ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E3PKP1R0 $ zfs set relatime=on tank $ zfs set compression=lz4 tank $ zfs create -o casesensitivity=mixed tank/data 

/etc/modprob.d/zfs.conf添加了zfs_prefetch_disable选项以使更改永久化:

 options zfs zfs_prefetch_disable=1 

以便:

 $ cat /sys/module/zfs/parameters/zfs_prefetch_disable 1 

编辑1:根据要求,我添加了zpool get all输出。 请注意,我忘了提及,我打开了池上的压缩…

 $ zpool get all NAME PROPERTY VALUE SOURCE tank size 3.62T - tank capacity 39% - tank altroot - default tank health ONLINE - tank guid 12372923926654962277 default tank version - default tank bootfs - default tank delegation on default tank autoreplace off default tank cachefile - default tank failmode wait default tank listsnapshots off default tank autoexpand off default tank dedupditto 0 default tank dedupratio 1.00x - tank free 2.21T - tank allocated 1.42T - tank readonly off - tank ashift 12 local tank comment - default tank expandsize 0 - tank freeing 0 default tank feature@async_destroy enabled local tank feature@empty_bpobj active local tank feature@lz4_compress active local 

Pacoman,看起来,因为镜像中有两个两个WD-RED驱动器,所以将ZIL一致性组写入磁盘的IO导致高IO。 总是有一个ZIL(写caching)。 如果您没有任何LOG设备,则日志设备位于池本身,并且可以大到最大写入速度* 5秒。 您可能从ZIL读取数据,并且每5秒将数据提交到永久存储器。 问题:

  1. 你有SLOG设备吗? 这是理想的DRAM驱动器(HGST ZeusRAM等)。
  2. 你有任何caching设备读取? 理想情况下,一堆闪存,如480GB的PCIe卡。

我的build议是在游泳池以外的地方创build一个SLOG(即使启动设备比没有闪光的地方更好)。 这样你就不会每隔5秒就大力地读写镜子。