mmap 和 O_DIRECT 可以一起使用吗?

Jos*_*vin 6 linux io mmap file

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

小智 1

我认为这没有多大意义。

O_DIRECT 意味着所有 I/O 应尽快反映在存储中(无需缓存)。

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