【发布时间】: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 来说是一个更好的问题。它不会影响使用它的程序。