传统的磁盘文件系统基准测试通常在单台设备上使用默认配置运行 `fio` 等工具。虽然这些测试对于衡量原始吞吐量很有用,但它们无法捕捉到现代写时复制(CoW)文件系统的行为,这类文件系统旨在跨多个设备管理复杂的数据结构。在 CoW 系统中,每一次写入操作都涉及更新元数据并可能移动数据块,从而产生额外的开销,而这些开销只有在特定的工作负载下才会变得明显,例如快照累积、压缩或冗余管理。由于经典基准测试忽略了这些“机制”成本,它们可能会提供误导性的信息,无法准确反映文件系统在优先考虑数据安全和高级功能的生产环境中的实际表现。
为了解决这个问题,`modern-fs-benchmark` 套件测量了单设备测试所忽略的特定行为。这包括“fsync 尾部延迟”,它捕捉了由 CoW 事务提交(例如 ZFS 的事务组或 Btrfs 的提交间隔)引起的周期性峰值,以及“快照老化”。后者衡量的是随着快照累积并导致碎片化而产生的性能下降。该套件还追踪“物理 I/O 放大”——即实际写入物理磁盘的字节数与应用程序请求的逻辑字节数之间的比例。这一指标揭示了冗余布局和文件系统开销的隐藏成本,提供了更清晰的视角,展示文件系统为了维护数据完整性而执行了多少“额外”工作。
这些现代文件系统的一个关键区别在于它们处理数据损坏的方式。传统的堆栈(如标准 RAID 阵列上的 ext4 或 XFS)缺乏端到端校验和;如果磁盘返回损坏的数据,阵列可能会在不报错的情况下将这些“虚假”数据提供给应用程序。相比之下,Btrfs、ZFS 和 bcachefs 会根据校验和验证每一次读取,并能够从校验位或副本中重建损坏的块。然而,这些功能也伴随着权衡,例如“接近满载”行为。由于 CoW 文件系统即使在执行删除操作时也需要可用空间,因此当它们接近容量上限时,可能会遇到瓶颈,导致文件系统变得无法写入。虽然这些系统提供了卓越的可靠性,但它们的性能与这些管理开销密不可分,而这些开销只有在它们旨在处理的多设备、高冗余工作负载下才会显现出来。
