我想知道是否有办法强制一个块设备绕过Linux缓冲区caching(即直接IO),并将请求直接传递给底层。 我知道可以使用O_DIRECT标志打开文件来实现这一点,但我的程序不是块设备的用户,文件系统是。 到目前为止,我还没有任何运气告诉各种FS使用直接IO。
总之,我需要裸设备的function,而不使用原始设备(因为它们在我的发行版,Fedora中已被弃用)。
如果这很重要,我的块设备是一个networking块设备。 任何帮助,将不胜感激。
您可以通过使用同步选项进行安装来实现此目的。
从mount(8)
-man页面:
sync All I/O to the filesystem should be done synchronously. In case of media with limited number of write cycles (eg some flash drives) "sync" may cause life-cycle shortening.
我不认为有可能没有使用O_DIRECT或裸设备直接I / O。 在挂载上使用同步选项也不会绕过缓冲区caching。
因为你不能从文件系统中设置它,你必须修改你的程序来使用O_DIRECT或mmap()和madvise()来获得类似的行为。
“我知道可以使用O_DIRECT标志来打开一个文件来实现这一点,但是我的程序不是块设备的用户,而是一个文件系统。
不要担心你的程序不是用户,O_DIRECT适用于open(),反正它是基于文件的。