如何确保数据到达存储,绕过内存/缓存/缓冲io



在Linux中,如何确保我的系统write()调用(和类似的write- io调用/变体)到达非易失性存储,绕过内存/缓存/缓冲io ?

请参见"确保数据到达磁盘"。

简而言之,最安全的策略是在适当的点使用O_DIRECT + fsync()。

使用O_DIRECT可以达到目的,但对于大多数应用程序来说,这可能是低效的,除非您正在管理应用程序中的整个文件缓存/缓冲。通常有两种方法。

  1. 在打开文件时使用O_SYNC标志,这样写操作将阻塞,直到它被写入底层持久存储。
  2. 执行正常的文件操作,当你想确保更改被写入存储设备时调用fsync。

请记住,如果您正在使用mmap,那么msync将是更好的方法。

最新更新