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