Linux
Linux 上的直接 I/O
我正在嘗試在 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=journal
mount 選項(請參閱ext4 文件和此送出)。對於 InnoDB,我知道該
innodb_flush_method
參數可用於啟用O_DIRECT
,但我不知道 MyISAM 的類似設置?