近日,由 F2FS 维护者 Jaegeuk Kim 提交的补丁 f2fs: support large folio for immutable non-compressed case 已被合入 F2FS 的开发分支。这标志着 F2FS 文件系统在适配 Linux 内核 large folio 特性的道路上迈出了试探性的第一步。

该补丁实现的支持范围非常有限,仅针对不可修改(immutable)且非压缩的文件。这里的“不可修改”是通过设置文件的 immutable 属性来强制保证的,而非简单地去除写权限,从而在逻辑上规避了写入操作可能带来的复杂场景。
我们可以通过 f2fs_io 工具为文件设置此属性:
f2fs_io setflags immutable /data/testfile_read_seq
正是由于目标场景被严格限定,使得 Kim 的这次修改复杂度相对可控。补丁的核心变更主要集中在读路径上,新增了一个 f2fs_read_data_large_folio() 函数,用于读取一个 large folio。

当然,文件的 immutable 属性是可以被清除的:
f2fs_io clearflags immutable /data/testfile_read_seq
这就会打破文件“不可修改”的初始假定。目前,Kim 采用的解决方法是,在属性被清除后,必须强制清空页缓存(page cache)来绕过问题:

在页缓存被清空之前,一个刚被清除 immutable 标志的文件是无法被写入的,相关代码中增加了相应的检查逻辑。

这种做法略显别扭,但无论如何,整个社区在推动 F2FS 支持 large folios 的方向上总算是前进了一小步。尽管这一步的实用价值在当前看来可能并不显著,但它为后续更全面的支持奠定了基础。
值得一提的是,在整个开发和测试过程中,开发者 Nanzhe Zhao(南哲)发现并修复了多个相关的 Bug,这些修复提交同样可以在开发分支的日志中看到,体现了开源社区协作完善代码的过程。

对于关注 Linux内核 与文件系统发展的开发者来说,这是一个值得注意的技术动态。虽然距离 large folio 在 F2FS 中得到完整、高效的支持还有很长的路要走,但每一次代码提交都是构建未来基础设施的重要基石。你可以在 云栈社区 找到更多关于底层系统与性能优化的深度讨论。
|