Linux 上的直接 I/O

Linux 上的直接 I/O

我正在尝试在 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 没有diomount 选项(我相信 AIX 和 Solaris 有),但它有dioread_lockmountdioread_nolock选项。mount(8)手册页中写道:

dioread_lock/dioread_nolock

控制 ext4 是否应使用 DIO 读取锁定。如果指定了 dioread_nolock 选项,ext4 将在缓冲区写入之前分配未初始化的范围,并在 IO 完成后将范围转换为初始化范围。

这种方法允许 ext4 代码避免使用 inode 互斥锁,从而提高高速存储的可扩展性。但是,这不适用于数据日志记录,并且 dioread_nolock 选项将被忽略并发出内核警告。请注意,dioread_nolock 代码路径仅用于基于扩展的文件。由于此选项包含的限制,默认情况下它是关闭的(例如 dioread_lock)。

也就是说,正如其他人提到的那样,直接 I/O 通常是通过O_DIRECTopen(2)系统调用中设置标志来启用的 - 即,它由应用程序控制,而不是挂载选项。O_DIRECT由 ext4 支持,除非您正在使用data=journalmount 选项(请参阅ext4 文档这次提交)。

对于 InnoDB,我知道innodb_flush_method可以使用参数来启用O_DIRECT,但我不知道 MyISAM 是否有类似的设置?

相关内容