请教各位 Linux 下 OpenZFS 的奇怪的 I/O 表现 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
gridsah
V2EX    程序员

请教各位 Linux 下 OpenZFS 的奇怪的 I/O 表现

  • &bsp;
  •   gridsah 2023-10-04 15:29:42 +08:00 1968 次点击
    这是一个创建于 818 天前的主题,其中的信息可能已经有所发展或是发生改变。

    帖接上回 t/977732 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 里,各位如果要冷数据传输到群晖的速度的话我再去测,这个操作有点费时间。

    各位有没有思路?

    10 条回复    2023-10-05 16:06:11 +08:00
    kokutou
        1
    kokutou  
       2023-10-04 15:34:48 +08:00 via Android
    是不是硬件有问题。。。
    gridsah
        2
    gridsah  
    OP
       2023-10-04 15:52:41 +08:00
    @kokutou #1 你还真别说..... 我把 zpool 里的一个盘格成了 ext4 ,冷备盘往这个盘里拷数据,写性能一样....

    这让我想起来 Gen10 的板载 raid 卡有 bug 来着,所有的 3.5 寸硬盘都接在这个 raid 卡上。
    gridsah
        3
    gridsah  
    OP
       2023-10-04 16:37:00 +08:00
    这 20M/s 的速度让我有一个可怕的想法.....
    是不是我脑残地把 usb 3.0 的线插到了 usb 2.0 的接口上.....
    等我去翻翻惠普的产品说明......
    gridsah
        4
    gridsah  
    OP
       2023-10-04 19:20:07 +08:00
    果然,我把数据线插到了 usb 2.0 的接口上。
    Gen10 背面 4 个 usb 接口长得一样,两两排布,左边的是 3.0 右边的是 2.0 。
    现在第一个问题解决了。

    第二个问题,sysstat 包中的 iostat 报告的 I/O 不对。还是没有头绪。
    oldshensheep
        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
    gridsah
        6
    gridsah  
    OP
       2023-10-05 14:36:20 +08:00
    @oldshensheep #5 我注意到了,但是 zpool iostat 显示负载消失之后,physical I/O 展示的负载依旧和负载消失前的值一样,并且,一直都显示有负载,关键这个值还在跳动,就像是真的有这样的负载一样。我查了一晚上文档,没有头绪。
    地铁、老头、看手机.jpg
    oldshensheep
        7
    oldshensheep  
       2023-10-05 15:47:33 +08:00   1
    iostat 和 zpool iostat 的行为是一样的,你要用 iostat 1 来表示每秒刷新,而不是用 watch iostat 。
    不然的话和 zpool iostat 一样显示的是自启动以来的平均值
    gridsah
        8
    gridsah  
    OP
       2023-10-05 15:51:08 +08:00
    @oldshensheep #7 zpool iostat 显示的是实时负载吧?
    我看 zpool 没有负载之后 zpool iostat 1 显示的一直是 0 值。
    oldshensheep
        9
    oldshensheep  
       2023-10-05 15:55:55 +08:00   1
    因为你加了 1 ,1 代表每秒刷新一次,并且显示的是之前秒内的平均值

    你用 iostat 1 就是和 zpool iostat 1 一样了
    gridsah
        10
    gridsah  
    OP
       2023-10-05 16:06:11 +08:00
    @oldshensheep #9 额,原来是这么回事。感谢解答。
    我已经准备上 btrfs 的灵车了
    ( PVE 还继续用 ZFS
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     972 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 55ms UTC 19:27 PVG 03:27 LAX 11:27 JFK 14:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86