ダイレクトI/Oは,ハード・ディスク装置(以下,ディスク)上のデータにアクセスする機構の一つです。データベース管理システム向けとして,カーネル2.4で導入されました。
通常,ディスク上のファイルにアクセスする場合,ファイル・キャッシュを経由します。このファイル・キャッシュのおかげで,キャッシュにヒットした際にはデータ読み取り速度が高速化します。また,ファイル・キャッシュを利用した遅延書き込み機能により,プロセスに対する書き込み処理性能が向上します。ディスクに書き込まれたファイルはファイル・システムにより管理されます。
ダイレクトI/Oを用いると,ディスク上のファイル(データ)にアクセスする際,ファイル・キャッシュを経由しません。データはアプリケーションなどのプロセスとディスク間で直接やり取りされます。
データベース管理システムなどは,その内部にファイル・キャッシュと同様の機構を備えています。そのため,ファイル・キャッシュを経由するとキャッシュの処理が2重になり,無駄な遅延が発生します。これでは,キャッシュによるアクセスの高速化が果たせません。そこで,ダイレクトI/Oのような,ファイル・キャッシュを経由せずにディスクに直接アクセスできる機構が必要になるわけです。
ファイル・キャッシュを経由しない同様の機構に「RAW I/O」があります。RAW I/Oは,ディスク全体をファイルとみなしてアクセスします。そのため,データの管理をファイル・システムで行うことができません。一方,ダイレクトI/Oはデータをファイルとして扱え,ファイル・システムによる管理が可能です(図1)。