访问块设备时,O_DIRECT 标志是否也绕过 Linux 页面缓存?

访问块设备时,O_DIRECT 标志是否也绕过 Linux 页面缓存?

我正在运行很多KVM虚拟机,它们使用以下命令打开硬盘映像O_DIRECT旗帜。

据我所知,根据手册页,在写入文件时,open()using将尝试绕过 Linux 页面缓存,但这也适用于块设备吗? O_DIRECT(例如,当硬盘映像是 LVM 卷或 ZFS zvol 时)

注意:这里的用例O_DIRECT是,来宾已经在维护自己的页面缓存,因此在主机上复制它是没有意义的。

答案1

看来答案是肯定的:使用 O_DIRECT 打开块设备也会绕过页面缓存。我在2009年找到了答案关于 Linux 页面缓存的博客文章

可以使用 Linux 中的 O_DIRECT 或 Windows 中的 NO_BUFFERING 绕过页面缓存,数据库软件经常这样做。

相关内容