这套基准的看点在它测的负载。它持续运行,每两小时一轮,覆盖 26 个配置,累计 595 次运行。对照组是 ext4/xfs 叠 md/LVM,被测的是 btrfs、ZFS、bcachefs 的多设备冗余布局。它不重测顺序读写带宽,专盯经典基准不覆盖的领域,冗余拓扑、快照老化、透明压缩、原生加密、降级重建、静默损坏自愈、接近写满时的行为。要选存储栈的架构师和运维,可以拿它当起点。
经典基准到底漏掉了什么
经典测试通常在同一台机器上做默认 mkfs,然后顺序读写加 IOPS。这样的数字回答不了运维每天遇到的提问。阵列里掉一块盘,写入还剩多少。叠了一百个快照,随机覆写的带宽掉到什么程度。开了加密,校验和还剩多少意义。写满到 95%,谁先撞墙。这套基准把这些问题做成固定阶段,工作负载与 FIO 参数公开,脚本可复跑。文件系统建立之前它先测一遍宿主机上的同一微负载,低于校准地板的机器直接判失败,换机重跑。
写时复制的开销落在哪
ZFS 改数据要逐层换父块,最后换 uberblock,一组变更在事务组里提交,事务组默认 5 秒。两个后果,崩溃时最多丢一个组的事务,小随机写要承受读改写放大,默认 128 KiB 的 recordsize 会把一次 4 KiB 覆读变成整个记录的读改写。btrfs 有 reflink,一次 2 GB 的克隆在该基准的一轮里实测 12 毫秒。三家的分歧大多能追到这两类机制上。
老化为什么比裸盘顺序读写更能区分文件系统
老化测试每轮覆写一小块并拍一个快照,让碎片化逐轮累积。真实 NVMe 硬件、内核 6.18 的环境里,btrfs 用 7.0 版工具、ZFS 用 2.4.3、bcachefs 用 1.38.8,btrfs 的镜像布局跑满 100 轮,从 119.6 MiB/s 升到 179.8 MiB/s,bcachefs 两副本从 136.2 到 169.3,擦除编码从 99.8 到 126.5。ZFS 的镜像在默认 recordsize 下只跑 10 轮,从 81.8 掉到 39.3 MiB/s,末段掉得最狠。裸盘顺序读写看不出这个分歧,几家的顺序写都在每秒数 GB 量级。CI 环境里同一条曲线也在,那是托管虚拟机加 loop 设备的环境,累计 595 次运行的数值只能看形状与比例,绝对值不作数。
加密和校验和为什么互相影响
写时复制文件系统大多自带端到端校验和,读到数据先算一遍再交给应用。ZFS 的按数据集加密用 AES-256-GCM,bcachefs 的整文件系统加密用 ChaCha20/Poly1305,认证加密之后校验和变成了密码学消息鉴别码,篡改与静默损坏落到同一个检测面上。btrfs 没有原生加密,只能每设备套一层 LUKS。真实硬件上另有参照,XFS 叠 LVM 再叠 dm-integrity,顺序写只剩 106.1 MiB/s,随机读几乎不受影响,16,298 IOPS。dm-integrity 这类按扇区加校验和的层会带来开销,这属于通用行为,膨胀比例随块大小与实现而变,用前自己测。
掉一块盘之后重建要等多久
在托管虚拟机的 loop 阵列里,重建到备件的墙钟时间大致这样,bcachefs 两副本 22 秒、btrfs 镜像 23 秒、ZFS 镜像 26 秒、RAIDZ1 34 秒、RAIDZ2 51 秒、bcachefs 擦除编码 58 秒,md 系因为整块成员重新同步,普遍在 85 秒以上。真实 NVMe 上更快,ZFS 镜像 6 秒、bcachefs 两副本 4 秒、擦除编码 7 秒,带 dm-integrity 的 XFS 叠 LVM 要 44 秒。差异来自写时复制文件系统只搬活跃数据,md 不管内容整盘同步。真实硬件上 btrfs 的降级与重建数据还缺失,造故障的方式在真实盘上不成立,这件事还在待办里。
静默损坏靠什么发现
scrub 和 resilver 是两件事。scrub 扫全部数据,目的是发现静默错误,再按冗余重建;resilver 只处理已知过期的数据。真实 NVMe 上,XFS 叠 LVM 叠 dm-integrity 这一组跑完整 scrub 用了 84 秒,未检出也未修复,被跟踪的 2 GB 文件完好;ZFS 镜像用了 6 秒,同样完好。带 dm-integrity 的经典栈是这一轮里唯一通过破坏注入的经典组合,ext4/xfs 叠 md/LVM 的多个配置要么读回坏数据,要么恰好轮转到好副本。冗余阵列防的是盘坏掉,盘说谎要另一套机制。
照这套数据做决定,认一条就够,同一任务内的比值与曲线形状可信,跨机器比绝对带宽没有意义。偏数据可靠性的归档场景,优先选带端到端校验和的冗余布局,加密和压缩都放进文件系统内解决。对延迟敏感的场景,先调 recordsize 这类 I/O 粒度参数,再谈换文件系统。留在经典栈也可以,dm-integrity 能补上检测这一环,代价自己量。