Linux:脏页写回和并发写

时间:2017-10-24 14:36:53

标签: java linux linux-kernel memory-mapped-files page-caching

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

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

到目前为止一切顺利。

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

1 个答案:

答案 0 :(得分:0)

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

一如既往,请仔细考虑您的电源故障,内核崩溃等安全性。

据称在btrfs中避免了等待。 (此外,偶然地,在旧版ext3文件系统中。但不是ext4或ext2)。

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

  1. bdi: allow block devices to say that they require stable page writes
  2. mm: only enforce stable page writes if the backing device requires it

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

您可以查看一个名为stable_pages_required

的sysfs属性。