Linux将剩余内存用于其文件缓存
在我的应用程序(用C ++编写)中,我想不时将脏页显式地刷新到磁盘上 (使用O_DIRECT不适合我)
我尝试了fflush(),但似乎不是我想要的
有什么方法可以将OS文件缓存的脏页刷新到磁盘上?
谢谢
答案 0 :(得分:1)
您可以使用sync_file_range()
鼓励在Linux上进行刷新,但是令人困惑的您不能使用sync_file_range()
来保证文件的持久性/数据完整性-这只是一个提示,可能帮助冲洗工作(请参阅Postgres developer Andres Freund complaining about the sync_file_range()
's manpage and the reply from filesystem developer Jan Kara的Linux Plumbers Conference 2019视频)。简而言之:它可以帮助触发冲洗,但是您需要添加/使用其他东西来了解耐用性。
我相信所有常用的文件描述符sync
样式调用(fsync()
, fdatasync()
等)也暗示您希望开始进行写回,但是与sync_file_range()
相比,写回的方式更为繁重(因为它们也会强制刷新设备非易失性缓存)...