如何确保数据到达存储器,绕过内存/caching/缓冲IO?

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

Solutions Collecting From Web of "如何确保数据到达存储器,绕过内存/caching/缓冲IO?"

请参阅“ 确保数据到达磁盘” 。

总之,最安全的策略是在适当的地方使用O_DIRECT + fsync()。

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

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

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