可以同时使用mmap和O_DIRECT吗?

7
据我所知,当您使用mmap映射文件时,基本上是将该文件的页面直接映射到您的进程中的页面缓存中。而使用O_DIRECT可以绕过页面缓存。那么,是否有必要同时使用这两种方式呢?如果我的理解是正确的,它们如何协同工作?mmap似乎依赖于文件在页面缓存中,而O_DIRECT似乎会防止文件进入缓存(假设系统上没有其他程序打开该文件)。我在这个问题中找到了答案,但回答者似乎认为同时使用是很正常的。

那个其他的问题正在使用O_DIRECT,但是它使用的文件与正在映射的文件不同。 - Barmar
1
相关问题:https://dev59.com/X3nZa4cB1Zd3GeqPkgC1 - Barmar
@Barmar,你说如果它不是绿色的,就让它变成绿色的,但它并不是绿色的。如果文件(inode数据)不在页面中,则将其映射到dist位置。但是映射到dist位置是什么?这是内存页面分配和连接到磁盘块的过程,这正是页面缓存的作用。因此,如果它不在页面缓存中,它会填充页面缓存。当然,这是关于Linux内核的内容。 - fghj
无论如何,你的问题是它是否有效。试一试就知道了。设计只是一个微不足道的侧面问题。 - Barmar
1
它的工作原理是一个更好的问题,可以在unix.stackexchange.com上提问。这不会影响使用它的程序。 - Barmar
显示剩余7条评论
1个回答

1
我认为这没有多大意义。
O_DIRECT的意思是所有I/O都应尽快反映在存储中(无缓存)。
映射的页面是存储器(文件)在内存中的副本。每次从内存读取和写入都要反映一些I/O,这将对性能产生巨大影响。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接