Linux mmap和O_DIRECT可以一起使用吗?

Linux mmap和O_DIRECT可以一起使用吗?,linux,file,io,mmap,Linux,File,Io,Mmap,据我所知,当您mmap一个文件时,您基本上是将该文件的页面缓存中的页面直接映射到您的进程中,而当您使用O_DIRECT时,您是在绕过页面缓存。将两者结合使用有意义吗?如果我的理解是正确的,它会如何工作?mmap似乎依赖于页面缓存中的文件,而O_DIRECT似乎阻止它进入页面缓存(假设系统上没有其他文件打开)。我发现了,但回答者似乎认为这样做是完全正常的。我认为这样做没有多大意义 O_DIRECT意味着所有I/O都应尽快反映在存储中(无缓存) 映射的页面是内存中存储(文件)的副本。反映每次从内存读

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

我认为这样做没有多大意义

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


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

另一个问题是使用
O\u DIRECT
与映射的文件不同。您尝试过吗?我猜
mmap()
会忽略文件是在
O\u DIRECT
模式下打开的这一事实——该选项只会影响
read()
write()
调用的行为。相关:我不认为“您基本上是从页面缓存映射页面”是正确的。如果文件在页面缓存中,则
mmap
将使用它。但如果不是,它会从磁盘位置映射它。它如何工作对于unix.stackexchange.com来说是一个更好的问题。它不会影响使用它的程序。