我想知道在什么情况下直接 I/O 传输会失败?
为此,我有以下三个子查询。根据“理解 Linux 内核”一书。
- Linux 提供了一种绕过页面缓存的简单方法:直接 I/O 传输。在每个 I/O 直接传输中,内核对磁盘控制器进行编程,以将数据直接从属于自缓存应用程序的用户模式地址空间的页面传输到/传输。
-- 所以要解释失败,需要检查应用程序是否具有自缓存功能?不确定如何做到这一点。
2.此外,书中说“当自缓存应用程序希望直接访问文件时,它会打开指定 O_DIRECT 标志的文件。在为 open() 系统调用提供服务时,dentry_open() 函数检查是否实现了 direct_IO 方法对于正在打开的文件的地址空间对象,并在相反的情况下返回错误代码”。
——除此之外,还有什么其他原因可以解释直接 I/O 故障?
3.这个命令“dd if=/dev/zero of=myfile bs=1M count=1 oflag=direct”会不会在linux中失败(假设有足够的磁盘空间)?