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

时间:2013-01-17 17:55:04

标签: linux performance storage performance-testing

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

2 个答案:

答案 0 :(得分:1)

请参阅“Ensuring data reaches disk。”

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

答案 1 :(得分:0)

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

  1. 打开文件时使用O_SYNC标志,以便写入将被阻塞,直到将其写入底层持久存储。
  2. 执行常规文件操作并在确保将更改写入存储设备时调用fsync。
  3. 请记住,如果您使用的是mmap,那么msync将是一种更好的方法。