![zfs:zpool 空间图抖动 - 有修复吗?](https://linux22.com/image/620699/zfs%EF%BC%9Azpool%20%E7%A9%BA%E9%97%B4%E5%9B%BE%E6%8A%96%E5%8A%A8%20-%20%E6%9C%89%E4%BF%AE%E5%A4%8D%E5%90%97%EF%BC%9F.png)
对于相当满和/或非常碎片化的 zpools,我使用 metaslab 调试 ( echo metaslab_debug/W1 | mdb -kw
) 来避免空间映射抖动以及由此导致的严重写入性能下降。问题本身似乎是老的和理解,有传言称修复“正在进行中”一段时间以来,就像碎片整理 API 一样,它应该也应该有帮助,但我找不到在生产代码中默认修复它的“官方”方法。
我是否遗漏了什么?
一些环境数据:我的 zpools 大小适中(通常小于 10 TB),并且大多数 zfs 数据集中的 zvols 使用默认记录大小 8K(由于通常启用压缩,因此实际上是可变的)。多年来,我已经看到这个问题出现在不同版本的 Solaris 中,尤其是那些已经看到大量数据的旧 zpools。请注意,这与由于zpool 90% full performance wall
空间利用率明显较低时发生碎片命中而导致的空间图抖动不同(我曾在几个旧池中看到这种情况发生在 70% 时)
答案1
不幸的是,一句话:不行。
长话短说:有点。ZFS 查找可用空间的方法在最新版本的 ZFS(Open-ZFS)中有所改变,以在一定程度上缓解该问题 - 底层碎片仍然存在,“修复”是它对性能的影响较小。
目前唯一真正的“修复”方法是 zfs 将数据从池中发送出去,清除池,然后 zfs 将数据发送回来。显然,根据您的工作量以及您对空间图进行碎片化的速度,问题会在以后再次出现。
还有其他潜在的修复/解决方法正在讨论/进行中,但我当然无法给出任何形式的预计到达时间。