Linux

Linux 上的直接 I/O

  • July 10, 2015

我正在嘗試在 Linux Mint 13 上的 /opt (/dev/sda6, ext4) 上啟用 Direct I/O。我正在嘗試的是:

mount -o dio,rw /dev/sda6 /opt

作為根。

系統響應:

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 上使用的文件系統嗎?

ext4 沒有dio掛載選項(我相信 AIX 和 Solaris 有),但它有dioread_lock掛載dioread_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_DIRECT在系統呼叫中設置標誌來啟用的open(2)——即,它由應用程序控制,而不是掛載選項。O_DIRECT由 ext4 支持,除非您使用data=journalmount 選項(請參閱ext4 文件此送出)。

對於 InnoDB,我知道該innodb_flush_method參數可用於啟用O_DIRECT,但我不知道 MyISAM 的類似設置?

引用自:https://serverfault.com/questions/545708