去年在 Linux 6.6 中合并的是多粒度时间戳,以解决在更新创建时间和修改时间时的当前粗粒度时间戳,即在每时一次时间戳中可能发生大量 I/O 活动。在 Linux 6.6 内核中,仅仅几周后,由于错误,多粒度时间戳就被删除了。多粒度代码被重新编写,现在仅仅一年多后,该代码已被重新合并到主线 Linux 内核中。
Christian Brauner 上周五发出了 VFS 多粒度时间戳拉取请求,然后昨天它被 Linus Torvalds 合并到 Linux 6.13 Git,没有任何大惊小怪或进一步的评论。所以现在它在改进后在主线有了第二次机会。Brauner 在拉取请求中写道:
“这是实施 multigrain 时间戳的又一次尝试。这一次得到了计时维护者的大力帮助,以减少对性能的影响。
Thomas 提供了一个 base 分支,其中包含 VFS 所需的计时接口。它充当多粒度时间戳工作
的基础…
Multigrain 时间戳允许内核在通过 ->getattr() 主动观察 inode 的属性时使用精细时间戳。借助此支持,文件可以获取精细时间戳,并在其之后修改另一个文件,以获得早于精细时间的粗粒度标记。如果发生这种情况,则文件可能看起来是按相反顺序修改的,这违反了 VFS 排序保证。为了防止这种情况,为 multigrain 时间戳维护一个下限值。每当分发细粒度时间戳时,都要记录它,当稍后分发粗粒度的时间戳时,请确保它们不早于该值。如果粗粒度时间戳早于细粒度 floor,则改为返回 floor 值。
请参阅此拉取请求,了解现已合并的 Linux 6.13 的 multigrain 时间戳代码。
转自 Multigrain Timestamps Try Again For Linux 6.13 – Now With Less Performance Impact – Phoronix