对于比较完整和/或非常分散的zpools,我使用metaslabdebugging( echo metaslab_debug/W1 | mdb -kw )来避免空间映射抖动,并导致严重的写入性能echo metaslab_debug/W1 | mdb -kw 。 这个问题本身似乎已经老了,而且已经被理解了 ,有传言说这个修补程序已经有一段时间了,就像大概应该帮助的碎片整理API一样,但是我找不到一个“官方”方法默认在生产代码中进行修复。
有什么我错过了吗?
一些环境数据:我的zpools的大小适中(通常小于10TB),大多数zfs数据集使用默认logging大小8K(实际上由于通常启用压缩而变化)。 多年来,我看到这个问题出现在不同版本的Solaris中,尤其是对于已经看到大量数据的老版本的zpools。 请注意,这与zpool 90% full performance wall ,因为碎片造成的空间映射撞击的空间利用率水平显着较低(我发现它在几个旧池中发生率为70%),
不幸的是,一句话:不。
在一个更长的词:有点。 在ZFS(Open-ZFS)的最新版本中,ZFSfind可用空间的方法有所改变,以稍微缓解问题 – 底层碎片依然存在,“修复”是对性能影响较小。
目前唯一可以使用的真正的“修复”是zfs将数据从池中发送出去,清除池中的数据,然后zfs将数据发送回去。 很明显,问题会在以后重新出现,这取决于您的工作量,以及如何快速分割空间地图。
还有其他潜在的修复/解决方法正在讨论/在作品中,但我当然不能给任何forms的ETA。