我正在尝试在 Linux Mint 13 上的 /opt (/dev/sda6, ext4) 上启用直接 I/O。我正在尝试的是:
mount -o dio,rw /dev/sda6 /opt
以 root 身份运行。
系统响应:
mount: wrong fs type, bad option, bad superblock on /dev/hda2
dmesg
正在报告:
EXT4-fs (sda6): Unrecognized mount option "dio" or missing value.
我不知道要设置哪个参数才能启用直接 I/O(即使 ext4 可以使用直接 I/O 进行挂载)。除此之外,如果 ext4 不支持直接 I/O,有人能指出 Linux 上可以使用的文件系统吗?
答案1
ext4 没有dio
mount 选项(我相信 AIX 和 Solaris 有),但它有dioread_lock
mountdioread_nolock
选项。mount(8)
手册页中写道:
dioread_lock/dioread_nolock
控制 ext4 是否应使用 DIO 读取锁定。如果指定了 dioread_nolock 选项,ext4 将在缓冲区写入之前分配未初始化的范围,并在 IO 完成后将范围转换为初始化范围。
这种方法允许 ext4 代码避免使用 inode 互斥锁,从而提高高速存储的可扩展性。但是,这不适用于数据日志记录,并且 dioread_nolock 选项将被忽略并发出内核警告。请注意,dioread_nolock 代码路径仅用于基于扩展的文件。由于此选项包含的限制,默认情况下它是关闭的(例如 dioread_lock)。
也就是说,正如其他人提到的那样,直接 I/O 通常是通过O_DIRECT
在open(2)
系统调用中设置标志来启用的 - 即,它由应用程序控制,而不是挂载选项。O_DIRECT
由 ext4 支持,除非您正在使用data=journal
mount 选项(请参阅ext4 文档和这次提交)。
对于 InnoDB,我知道innodb_flush_method
可以使用参数来启用O_DIRECT
,但我不知道 MyISAM 是否有类似的设置?