Linux 上的直接 I/O

Ber*_*EVA 4 linux filesystems ext4 io

我正在尝试在 Linux Mint 13 上的 /opt (/dev/sda6, ext4) 上启用直接 I/O。我正在尝试的是:

mount -o dio,rw /dev/sda6 /opt
Run Code Online (Sandbox Code Playgroud)

作为根。

系统响应如下:

mount: wrong fs type, bad option, bad superblock on /dev/hda2
Run Code Online (Sandbox Code Playgroud)

dmesg 正在报告:

EXT4-fs (sda6): Unrecognized mount option "dio" or missing value.
Run Code Online (Sandbox Code Playgroud)

我不知道要设置哪个参数来启用直接 I/O(即使 ext4 可以使用直接 I/O 进行安装)。除此之外,如果 ext4 不支持直接 I/O,有人可以指出在 Linux 上使用的文件系统吗?

mjt*_*ner 5

ext4 没有dio挂载选项(我相信 AIX 和 Solaris 有)但它有dioread_lockdioread_nolock挂载选项。从mount(8)手册页:

dioread_lock/dioread_nolock

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

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

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

对于 InnoDB,我知道该innodb_flush_method参数可用于 enable O_DIRECT,但我不知道 MyISAM 有类似的设置?