Linux:脏页回写和并发写

3
背景:我正在Java中进行文件内存映射(共享)。
我在该文件的地址0处写入一些值。我理解页面缓存中相应的页面被标记为脏页,并且将根据dirty_ratio等设置稍后写入。
到目前为止还不错。
但是,当内核将脏页写回文件时,我想知道在再次在地址0处写入时会发生什么。我的进程是否会被阻塞等待写回完成?

你使用了哪些权限来进行内存映射文件?提供一小段代码会非常有帮助。 - user277465
-rw-rw-r--:至于代码,一旦我获得了内存映射文件缓冲区,我只是随意地使用buffer.putInt(addr, value)写入不同的值到文件中相同的地址,可能会多次写入。 - Marc Polizzi
1个回答

0

可能是这样。只有在设备级别的I/O请求中包含校验和时才是必要的。否则,第一次写入可能会被撕裂,但可以通过第二次写入进行纠正。

像往常一样,要仔细考虑您的安全性,以防止断电、内核崩溃等问题。

据称,在btrfs中可以避免等待。(同时,在传统的ext3文件系统中也是如此。但不适用于ext4或ext2)。

看起来这似乎是一个不断变化的目标。以上(据我所知)描述了这个“稳定页面写入”代码的第一个优化,是在它首次引入时收到投诉后进行的。提交说明提到了未来更改的几种可能性。

  1. bdi: 允许块设备声明它们需要稳定的页面写入
  2. mm: 仅在支持的设备上强制执行稳定的页面写入

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

有一个名为stable_pages_required的sysfs属性,您可以查看它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接