web-dev-qa-db-ja.com

Linuxでの直接I / O

Linux Mint13の/ opt(/ dev/sda6、ext4)でダイレクト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で使用するファイルシステムを指定できますか?

4
BerserkEVA

ext4にはdioマウントオプションはありませんが(AIXとSolarisにはあると思います)、_dioread_lock_と_dioread_nolock_マウントオプションがあります。 mount(8)マニュアルページから:

dioread_lock/dioread_nolock

Ext4がDIO読み取りロックを使用するかどうかを制御します。 dioread_nolockオプションが指定されている場合、ext4はバッファーの書き込み前に初期化されていないエクステントを割り当て、IOの完了後にエクステントを初期化されたものに変換します。

このアプローチにより、ext4コードはinodeミューテックスの使用を回避でき、高速ストレージでのスケーラビリティが向上します。ただし、これはデータジャーナリングでは機能せず、dioread_nolockオプションはカーネル警告で無視されます。 dioread_nolockコードパスは、エクステントベースのファイルにのみ使用されることに注意してください。制限があるため、このオプションはデフォルトでオフになっています(例:dioread_lock)。

つまり、他の人が述べたように、ダイレクトI/Oは通常、open(2)システムコールで_O_DIRECT_フラグを設定することで有効になります。つまり、マウントオプションではなく、アプリケーションによって制御されます。 _O_DIRECT_はext4でサポートされていますunless_data=journal_マウントオプションを使用している場合( ext4のドキュメントを参照 および このコミット )。

InnoDBの場合、_innodb_flush_method_パラメータを使用して_O_DIRECT_を有効にできることを知っていますが、MyISAMの同様の設定を知りませんか?

5
mjturner