帖接上回 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 里,各位如果要冷数据传输到群晖的速度的话我再去测,这个操作有点费时间。
各位有没有思路?
1
kokutou 2023-10-04 15:34:48 +08:00 via Android
是不是硬件有问题。。。
|
2
gridsah OP @kokutou #1 你还真别说..... 我把 zpool 里的一个盘格成了 ext4 ,冷备盘往这个盘里拷数据,写性能一样....
这让我想起来 Gen10 的板载 raid 卡有 bug 来着,所有的 3.5 寸硬盘都接在这个 raid 卡上。 |
3
gridsah OP 这 20M/s 的速度让我有一个可怕的想法.....
是不是我脑残地把 usb 3.0 的线插到了 usb 2.0 的接口上..... 等我去翻翻惠普的产品说明...... |
4
gridsah OP 果然,我把数据线插到了 usb 2.0 的接口上。
Gen10 背面 4 个 usb 接口长得一样,两两排布,左边的是 3.0 右边的是 2.0 。 现在第一个问题解决了。 第二个问题,sysstat 包中的 iostat 报告的 I/O 不对。还是没有头绪。 |
5
oldshensheep 2023-10-05 13:35:51 +08:00 1
iostae 的问题其实 openzfs 的官方文档上有写的
zpool iostat Displays logical I/O statistics for the given pools/vdevs. Physical I/O statistics may be observed via iostat https://openzfs.github.io/openzfs-docs/man/master/8/zpool-iostat.8.html |
6
gridsah OP @oldshensheep #5 我注意到了,但是 zpool iostat 显示负载消失之后,physical I/O 展示的负载依旧和负载消失前的值一样,并且,一直都显示有负载,关键这个值还在跳动,就像是真的有这样的负载一样。我查了一晚上文档,没有头绪。
地铁、老头、看手机.jpg |
7
oldshensheep 2023-10-05 15:47:33 +08:00 1
iostat 和 zpool iostat 的行为是一样的,你要用 iostat 1 来表示每秒刷新,而不是用 watch iostat 。
不然的话和 zpool iostat 一样显示的是自启动以来的平均值 |
8
gridsah OP @oldshensheep #7 zpool iostat 显示的是实时负载吧?
我看 zpool 没有负载之后 zpool iostat 1 显示的一直是 0 值。 |
9
oldshensheep 2023-10-05 15:55:55 +08:00 1
因为你加了 1 ,1 代表每秒刷新一次,并且显示的是之前秒内的平均值
你用 iostat 1 就是和 zpool iostat 1 一样了 |
10
gridsah OP |