首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linux页面缓存刷新顺序

linux页面缓存刷新顺序
EN

Stack Overflow用户
提问于 2014-11-03 03:42:17
回答 2查看 2.3K关注 0票数 5

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

所以如果我有两次手术。

代码语言:javascript
复制
write(fileA)
write(fileB)

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

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

EN

回答 2

Stack Overflow用户

发布于 2015-07-16 06:34:08

我认为fileB可以在fileA之前写入磁盘,因为写入将被绑定到块I/O请求中,并且可以由I/O调度程序在块设备层重新排序,以尽量减少磁盘查找。

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

票数 5
EN

Stack Overflow用户

发布于 2014-11-03 07:15:52

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

内核线程负责将脏页同步到磁盘。当系统正确地运行shutdown时,所有脏缓冲区都被同步/写入磁盘。但是,在发生突然停电的情况下,情况就不一样了,因为尚未刷新/同步到磁盘的数据显然丢失了。

如果应用程序中没有调用sync(),那么脏缓冲区就会在某些内核可调项上写入磁盘。您可以控制应用程序数据如何通过sysctl内核可调来同步(不活动的脏页)。您可能需要考虑阅读更多有关以下内容的内容:

vm.dirty_expire_centisecs -在将脏页写入磁盘之前,这些脏页必须使用多长时间(以1/100秒计) vm.dirty_writeback_centisecs -内核多久会唤醒BDI刷新线程,将脏页同步到磁盘上? vm.dirty_background_ratio -系统内存的百分比,当系统脏时,系统可以开始将数据写入磁盘。 vm.dirty_ratio -系统内存的百分比,当进程进行写入时,系统内存应该阻止将脏页写入磁盘。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26707442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档