我想知道是否有办法迫使块设备绕过linux缓冲区缓存(即直接IO),并将请求直接传递给底层。我知道可以用O_DIRECT标志打开文件来实现这一点,但是我的程序不是块设备的用户,而是一个文件系统。到目前为止,我还没有幸运地告诉各种FSes使用直接IO。
总之,我想要不使用原始设备的原始设备功能(因为它们在我的发行版Fedora中被废弃了)。
如果这是重要的,我的块设备是一个网络块设备。任何帮助都将不胜感激。
发布于 2011-11-06 14:20:21
您可以通过安装同步选项来实现这一点。
来自mount(8)-man页面:
sync All I/O to the filesystem should be done synchronously. In case
of media with limited number of write cycles (e.g. some flash
drives) "sync" may cause life-cycle shortening.发布于 2011-11-15 03:30:32
我认为如果不使用O_DIRECT或原始设备,就不可能有直接的I/O。在挂载上使用同步选项也不会绕过缓冲区缓存。
因为您不能从文件系统中设置它,所以您必须修改您的程序,以便使用O_DIRECT或mmap()和get ()来获得类似的行为。
“我知道可以使用O_DIRECT标志来打开文件,但我的程序不是块设备的用户,而是文件系统。”
不要担心您的程序不是用户,O_DIRECT为open()工作,而open()是基于文件的。
https://serverfault.com/questions/313386
复制相似问题