【问题标题】:How to ensure data reaches storage, bypassing memory/cache/buffered-IO?如何确保数据到达存储,绕过内存/缓存/缓冲 IO?
【发布时间】:2013-01-17 17:55:04
【问题描述】:

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

【问题讨论】:

    标签: linux performance storage performance-testing


    【解决方案1】:

    参见“Ensuring data reaches disk”。

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

    【讨论】:

      【解决方案2】:

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

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

      请记住,如果您使用的是 mmap,那么 msync 将是执行相同操作的更好方法。

      【讨论】:

        猜你喜欢
        • 2010-12-11
        • 1970-01-01
        • 2015-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-26
        相关资源
        最近更新 更多