mmap和O_DIRECT可以一起用吗?
Can mmap and O_DIRECT be used together?
据我了解,当您映射一个文件时,您基本上是将该文件的页面缓存中的页面直接映射到您的进程中,而当您使用 O_DIRECT 时,您将绕过页面缓存。将两者一起使用是否有意义?如果我的理解是正确的,它会如何工作? mmap 似乎依赖于页面缓存中的文件并且 O_DIRECT 似乎阻止它去那里(假设系统上没有其他文件打开文件)。我找到了 this question 但回答者似乎认为这样做是完全正常的。
我觉得意义不大。
O_DIRECT 表示所有 I/O 应尽快反映在存储中(无缓存)。
映射的页面是内存中存储(文件)的副本。反映每次读取和写入内存都必须执行一些操作 I/O,这将对性能造成巨大影响。
据我了解,当您映射一个文件时,您基本上是将该文件的页面缓存中的页面直接映射到您的进程中,而当您使用 O_DIRECT 时,您将绕过页面缓存。将两者一起使用是否有意义?如果我的理解是正确的,它会如何工作? mmap 似乎依赖于页面缓存中的文件并且 O_DIRECT 似乎阻止它去那里(假设系统上没有其他文件打开文件)。我找到了 this question 但回答者似乎认为这样做是完全正常的。
我觉得意义不大。
O_DIRECT 表示所有 I/O 应尽快反映在存储中(无缓存)。
映射的页面是内存中存储(文件)的副本。反映每次读取和写入内存都必须执行一些操作 I/O,这将对性能造成巨大影响。