在 ZFSonLinux 上禁用缓存

在 ZFSonLinux 上禁用缓存

使用 ZFS 来利用一些可用选项并管理卷,而不是 RAID。我在 zpool 中添加了一个逻辑设备 (HW RAID)。

ZFS ARC 的性能似乎不如我的 HW RAID 缓存,因此我尝试禁用它,看看是否可以产生与在 HW RAID 设备上运行的基准测试类似的结果,但 ZFS 卷上的性能会受到影响。

我尝试禁用主缓存和次缓存,但实际上这损害了性能,它没有像我预期的那样解决使用硬件 RAID 缓存的问题。所以我很困惑。我的硬件 RAID 缓存是否无法与 ZFS 一起使用?也许主缓存和次缓存不是需要修改的正确参数。

配置 带有回写 BBU 缓存的 HP P410i RAID10。

具有 RAID 中的单个逻辑设备的 Zpool

创建了一个测试稀疏 zvol 来测试设备速度 (/dev/zd0)

更新此问题 性能不足是由 ZFS 开销引起的。当 ZoL 的 ARC(primarycache)被禁用时,此时会有极大的开销,尤其是在随机写入时。我不确定这是 ZoL 特有的还是 ZFS 普遍存在的。如果您希望减少 ARC 大小但保持磁盘性能,我建议至少保留 primarycache=metadata。

答案1

我将 ZFS 与硬件 RAID 结合使用,并利用 HW RAID 控制器的闪存支持写入缓存(而不是 ZIL 设备),并利用 ZFS ARC 缓存进行读取。

ZFS 使用硬件 RAID 的最佳实践

为什么您觉得 ZFS 性能不佳?您能分享一下您的zfs get all pool/filesystem输出以及您所说的基准吗?这可能只是一个调整问题。

编辑:

Linux 上的 ZFS 默认设置不太好。您需要进行一些调整。

请阅读我发布的工作流程:与 ext4 结合的透明压缩文件系统

它们的关键部分是ashift价值和volblocksizezvol。

此外,你需要修改你的/etc/modprobe.d/zfs.conf

例子:

# zfs.conf for an SSD-based pool and 96GB RAM
options zfs zfs_arc_max=45000000000
options zfs zfs_vdev_scrub_min_active=48
options zfs zfs_vdev_scrub_max_active=128
options zfs zfs_vdev_sync_write_min_active=64
options zfs zfs_vdev_sync_write_max_active=128
options zfs zfs_vdev_sync_read_min_active=64
options zfs zfs_vdev_sync_read_max_active=128
options zfs zfs_vdev_async_read_min_active=64
options zfs zfs_vdev_async_read_max_active=128
options zfs zfs_top_maxinflight=160

编辑:

好吧,我的建议是始终使用 lz4 压缩,使用 volblocksize 值 128k,将 ARC 限制为 RAM 的 40% 或更低,调整我发布的 zfs.conf 中的值以适应口味(如果您使用 10k SAS 磁盘,可能会将所有值减少 50%)并启用tuned-adm 框架tuned-adm profile enterprise-storage

相关内容