【问题标题】:Linux : dirty page writeback and concurrent writeLinux:脏页写回和并发写
【发布时间】:2018-04-05 10:04:47
【问题描述】:

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

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

到目前为止一切顺利。

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

【问题讨论】:

  • 内存映射文件的权限是什么?一个 sn-p 的代码会很有帮助。
  • -rw-rw-r-- :至于代码:一旦我得到内存映射文件缓冲区,我只是 buffer.putInt( addr, value ) 很随机地可能会写入几次不同的值在文件中的同一地址。

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


【解决方案1】:

可能是。仅当设备级 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2021-10-20
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多