Linux:脏页写回和并发写

问题描述 投票:2回答:1

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

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

到现在为止还挺好。

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

java linux linux-kernel memory-mapped-files page-caching
1个回答
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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.