我正在测试一种新的 ZFS 配置,使用 z-std 进行日志存储和高度可压缩文件的存储。在我的 PC 上的虚拟机中,在 5 驱动器 raidz-1 上测试了该阵列,该虚拟机可以直接访问整个硬盘。
ZFS 2.0.2 在 Hyper-V Ubuntu VM 中运行,我正在通过 Samba 从 Windows 主机复制文件。它在 PC 上本地运行,因此网络传输速度应该不是问题。
当我传输大型可压缩文件时,传输本身非常突发。您可以在此处看到:
我猜想写入操作是在 TXG 中捕获、压缩,然后提交到磁盘。但是当 CPU 基本处于空闲状态并且 HDD 本身也没有真正得到利用时,会出现一些停机时间(这是预料之中的,因为 CPU 是压缩数据时的瓶颈)。
我能否以某种方式调整 ZFS,使其在压缩 TXG 时接受新数据?或者这是预期的最佳行为?如果感觉当 ZFS 不断接受和压缩数据时速度可能会更快。
答案1
默认情况下,ZFS 每 5 秒或 64 MB 脏数据聚合并刷新一次事务,具体取决于首先达到哪个限制。
事务被聚合到事务组 (TXG) 中,最多三个 TXG 可以同时“运行”:第一个处于打开状态(接受写入),第二个处于静止状态(关闭接受的写入),第三个处于刷新阶段(即写入磁盘)。换句话说,ZFS 确实不是accept 只写“每 5 秒”,正如你所描述的那样;相反,它冲洗每 5 秒刷新一次数据,除非存在高写入负载。