linux页面缓存刷新顺序

时间:2014-11-03 03:42:18

标签: linux-kernel page-caching

在我们将数据写入磁盘之前有页面缓存。

所以,如果我有两个操作。

write(fileA)
write(fileB)

然后如果系统突然关机。 我们不主动调用sync()调用。

我想知道我们写入fileB的数据是否有可能刷新到磁盘,而我们写入fileA的数据是否还没有刷新到磁盘?

2 个答案:

答案 0 :(得分:5)

我相信fileB可以在fileA之前写入磁盘,因为写入将被捆绑到块I / O请求中,并且可以由I / O调度程序在块设备层重新排序以尝试最小化磁盘搜索。

有关I / O调度程序(电梯)的更多信息,请参阅内核文档: http://lxr.free-electrons.com/source/Documentation/block/biodoc.txt#L885

答案 1 :(得分:0)

要简短地回答您的问题,您可能需要考虑在sync()之后在应用程序中调用fsync()write()系统调用,以确保数据同步到磁盘立即

flush(或pdflush)内核线程负责将脏页同步到磁盘。当系统正确 shutdown 时,所有脏缓冲区都会同步/写入磁盘。但是,在突然断电的情况下,这是不一样的,因为尚未刷新/同步到磁盘的数据明显丢失。

如果您未在应用程序中调用sync(),则在某些内核可调参数上将脏缓冲区写入磁盘。您可以通过sysctl内核可调参数来控制应用程序数据的同步方式(非活动脏页)。您可能需要考虑阅读以下内容:

  

vm.dirty_expire_centisecs - 脏了多少(1/100秒)   页面必须在将它们写入磁盘之前

     

vm.dirty_writeback_centisecs - 内核唤醒的频率   BDI-flush线程将脏页同步到磁盘上

     

vm.dirty_background_ratio - 系统内存的百分比   脏,然后系统可以开始将数据写入磁盘

     

vm.dirty_ratio - 脏的时候系统内存的百分比   进行写入的进程应该阻塞写出脏页面   磁盘