【发布时间】:2019-12-17 20:37:08
【问题描述】:
Linux 利用剩余内存进行文件缓存
在我的应用程序(用 C++ 编写)中,我想不时将脏页显式刷新到磁盘 (使用 O_DIRECT 不适合我)
我试过 fflush(),但似乎不是我想要的
有没有办法将 OS 文件缓存的脏页刷新到磁盘?
谢谢
【问题讨论】:
Linux 利用剩余内存进行文件缓存
在我的应用程序(用 C++ 编写)中,我想不时将脏页显式刷新到磁盘 (使用 O_DIRECT 不适合我)
我试过 fflush(),但似乎不是我想要的
有没有办法将 OS 文件缓存的脏页刷新到磁盘?
谢谢
【问题讨论】:
您可以在 Linux 上使用 sync_file_range() 来鼓励刷新,但令人困惑的是您不能使用 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 样式调用(@987654323@ 等)也暗示您希望写回开始发生,但与 sync_file_range() 相比,以更严厉的方式进行(因为它们也强制刷新设备非易失性缓存)...
【讨论】: