帖接上回 https://www.v2ex.com/t/977732 https://www.v2ex.com/t/977930
我在 Debian12 (6.1 kernel) 上装了 OpenZFS (zfs-kmod-2.1.12-2~bpo12+1),功能看起来没有什么问题。
系统正常启动,池的创建和销毁,SLOG 和 cache 的添加、删除,ZFS 属性变更,都没啥问题。
建好 zpool (4x8T raidz1),加入 slog 和 cache ,创建对应 dataset ,接上我的冷备盘,用 ro 参数挂载冷备盘的 ext4 分区开始往 zpool 搬数据 (rsync)。冷备盘和 zpool 的磁盘型号相同,硬盘盒是世特力 2 盘位的硬盘底座。
第一个奇怪的问题出现了,我从冷备盘往系统盘 (Intel S3710 200G) 拷数据,可以正常跑满冷备盘的读带宽 280M/s ,但是我往 dataset 同步数据时候 rsync 显示的速度只有 20M/s 以下 (17-19M/s)。倒是,命令启动的瞬间可以跑满冷备盘的读带宽。而且在 zpool dataset 之间转移数据性能表现看起来是正常的。
我以为是 async I/O 没开,zfs set sync=disabled <zpool>
,I/O 速度没变。从这里开始感觉有点奇怪了,然后我使用 zfs set sync=always <zpool>
让所有 I/O 先打在 SLOG 上,I/O 速度也没变。这里测完我怀疑 OpenZFS 对这个版本的内核有兼容问题。
但这套硬件在 FreeBSD 13.2 上正常的速度是,async I/0 可以长时间维持在至少 100M/s (1G 网口) 的速度,上限我没测。sync I/O 在两条傲腾 16G 的加持下,可以长时间维持在 55M/s 。
rsync 跑了 8h 之后数据只同步了 750G 。这个写入性能显然不对。
也肯定不是我 rsync 参数写的有问题,因为 rsync 的官方文档也是我翻译的 https://note.lishouzhong.com/article/translation/sitemap-index.html
第二个奇怪的问题是,我用 zpool iostat -v 1
看到 I/O 表现可以和 rsync 显示的值对应上。但是我从 watch iostat
看到的 I/O 表现是,我打断 rsync 的传输之后,iostat 依旧显示硬盘有 I/O 而且和刚才 rsync 的传输速度接近,并且 I/O 一直不会回归正常 (这个正常是指相对于系统盘显示的只有几 K/s 的速度)。
而且哪怕 SLOG 在 zpool iostat -v 1
显示没有 I/O ,它在 iostat 也显示有 I/O 操作,I/O 速度和 SLOG 正常的工作速度相同。并且只要有一次 I/O ,iostat 就显示 SLOG 一直有 I/O 。cache 也一样,一直显示有写入操作。而且速度看起来像是真的,因为那个数字一直在小范围上下波动。
总结起来就是,iostat 显示的 I/O 指标有问题,并且看起来像是真的; zpool iostat 显示的 I/O 指标和期望相同,没有问题。
至于读性能的话,已经拷进 zpool 的数据可以以跑满 1G 网口的速度被传输到群晖上。但我可以确定我用于测试的,传往群晖数据都在内存的 ARC 里,各位如果要冷数据传输到群晖的速度的话我再去测,这个操作有点费时间。
各位有没有思路?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.