4

背景:在 Java 中,我正在内存映射文件(共享)。

我正在该文件的地址 0 处写入一些值。我了解 PAGE CACHE 中的相应 PAGE 被标记为 DIRTY,稍后将根据dirty_ratio 等设置写入。

到目前为止,一切都很好。

但是我想知道当内核将脏页写回文件时再次在地址 0 处写入时会发生什么。我的进程是否以某种方式阻塞等待写回完成?

4

1 回答 1

0

可能是。仅当设备级 I/O 请求在写入数据旁边包含校验和时才需要。否则,第一次写入可能会被撕裂,但可以通过第二次写入来纠正。

与往常一样,请仔细考虑电源故障、内核崩溃等的安全性。

据称在 btrfs 中避免了等待。(另外,碰巧的是,在遗留的 ext3 文件系统中。但不是 ext4 或 ext2)。

这看起来有点像一个移动的目标。上面(据我所知)描述了这个“稳定页面写入”代码的第一次优化,在它首次引入时的抱怨之后。提交描述提到了未来更改的几种可能性。

  1. bdi:允许块设备说它们需要稳定的页面写入
  2. mm:仅在后备设备需要时才强制执行稳定的页面写入

我的设备当前是否使用“稳定页面写入”?

您可以查看一个 sysfs 属性,称为stable_pages_required

于 2019-02-21T23:31:06.970 回答