【问题标题】:Can mmap and O_DIRECT be used together?mmap 和 O_DIRECT 可以一起使用吗?
【发布时间】:2016-01-31 11:33:07
【问题描述】:

据我了解,当您对文件进行 mmap 映射时,您基本上是将该文件的页面缓存中的页面直接映射到您的进程中,而当您使用 O_DIRECT 时,您会绕过页面缓存。两者一起使用有意义吗?如果我的理解是正确的,它甚至会如何工作? mmap 似乎依赖于页面缓存中的文件,而 O_DIRECT 似乎阻止它去那里(假设系统上没有其他任何东西打开文件)。我找到了this question,但回答者似乎认为这样做很正常。

【问题讨论】:

  • 另一个问题是使用O_DIRECT 和一个不同 文件而不是被映射的文件。
  • 你试过了吗?我的猜测是mmap() 会简单地忽略文件以O_DIRECT 模式打开的事实——该选项只会影响read()write() 调用的行为。
  • 我不认为“你基本上是从页面缓存映射页面”是正确的。 如果文件在页面缓存中,那么mmap 将使用它。但如果不是,它会从磁盘位置映射它。
  • 它是如何工作的对于 unix.stackexchange.com 来说是一个更好的问题。它不会影响使用它的程序。

标签: linux file io mmap


【解决方案1】:

我认为它没有多大意义。

O_DIRECT 表示所有 I/O 都应尽快反映在存储中(无缓存)。

映射页面是内存中存储(文件)的副本。反映每次对内存的读取和写入都必须执行一些 I/O,这将对性能造成巨大影响。

【讨论】:

    猜你喜欢
    • 2013-08-21
    • 2011-07-04
    • 2021-10-25
    • 2013-11-01
    • 2016-02-21
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多