
XFS 文件系统在 Linux 7.0 内核中引入了一些有趣的新功能工作和性能调优,这些功能将于今年春天被 Fedora 44 和 Ubuntu 26.04 LTS 等系统使用。
首先是 XFS 在 Linux 7.0 中引入的新自主自愈功能。Darrick Wong 在其补丁系列中描述了这一健康监控功能:
“这个补丁集构建了新功能,用于向用户空间提供有关文件系统健康事件的信息。这是通过创建一个匿名文件来实现的,用户空间程序可以通过 read() 读取该文件以获取事件。通过挂钩 XFS 和 iomap 的各个部分来捕获事件,以便程序可以观察到元数据健康故障、文件 I/O 错误以及文件系统状态的主要变化(卸载、关机等)。
当事件发生时,挂钩函数将事件对象排队到每个事件匿名文件描述符中,以便后续处理。程序必须具有 CAP_SYS_ADMIN 权限才能打开匿名文件描述符,并且有一个最大事件延迟以防止资源过度消耗。这些事件本身可以作为 C 结构体从匿名文件描述符中读取,供 xfs_healer 守护进程使用。”
在用户空间,我们创建了一个新的守护程序,该程序将读取事件对象并自动启动修复。这个守护程序完全由 systemd 管理,并且只有在进行修复时才会阻止文件系统的卸载。它们由一个使用 fanotify 的启动服务自动启动。”
这一 XFS 功能依赖于几天前合并到用户空间的通用 I/O 错误报告”fserror”基础设施。他在自主自愈的拉取请求中结束道:”如果运气好,这一切都应该进行得非常顺利。”
另一个值得注意的 XFS 变化是父指针的性能改进。XFS 父指针用于在文件的扩展属性中存储其父目录和文件名的反向链接,这些链接可以在线 fsck 和相关操作期间使用。Darrick Wong 就这个补丁加快父指针操作的解释:
父指针增加了 28%的系统时间开销来创建 3200 万个完全空白的文件。删除它们会导致系统时间增加 56%。实际运行时间增加了 9%和 22%。
…
现在父指针创建时仅增加 8%的系统时间,删除时增加 19%。实际运行时间现在增加了 5%和 9%。通过为属性设置、移除和替换操作创建辅助工具,来缩小性能差距,这些辅助工具将尝试进行直接短形式更新,如果失败则回退到属性意图机制。我们可以使用相同的辅助工具来处理常规的 xattr 和父指针。”
Linuxeden开源社区