Veritas™ File System プログラマーズリファレンスガイド - Linux
- Veritas File System Software Developer's Kit
- FCL(File Change Log)
- マルチボリュームサポート
- 名前付きデータストリーム
- Veritas File System I/O
- シン再生
同時 I/O
同時 I/O(VX_CONCURRENT)はファイルアクセスの I/O 形式の 1 つです。この I/O 形式によって、複数のプロセスがほかの read() または write() の処理を妨げることなく、同じファイルへ読み書きできます。POSIX セマンティクスでは、ファイルに対する read() および write() の処理を、ほかの read() および write() の処理と一緒にシリアル化する必要があります。POSIX セマンティクスでは、読み取りは、書き込みが行われる前または後のどちらかにデータを読み取ります。VX_CONCURRENT アドバイザリをファイルに設定すると、キャラクタデバイスと同様に読み取りおよび書き込みがシリアル化されることはありません。データへの高速のアクセスを必要とし、同一のファイルに対して、重複する書き込みを実行しないアプリケーションが、通常このアドバイザリを使います。例として、データベースアプリケーションがあります。このようなアプリケーションでは、アプリケーションレベルで独自のロックを実行し、ファイルの同一領域への重複する書き込みを防止しています。
VX_CONCURRENT アドバイザリを使っている場合、同じファイルへの書き込み操作を調整し、書き込みの重複を防止することはアプリケーションまたはスレッドの役割です。同一ファイルへ重複して書き込みを行った場合、結果は予測できません。アプリケーションにとっては、同一ファイルの同一領域への同時書き込み操作を避けることが最善です。
VX_CONCURRENT アドバイザリをファイルに設定する場合、VxFS はファイルへの読み取りおよび書き込みに、ダイレクト I/O を実行します。したがって、同時 I/O にもダイレクト I/O と同じアラインメント必要条件があります。
ダイレクト I/Oを参照してください。
同時 I/O が有効な場合、読み取りおよび書き込みは次のように実行されます。
write() システムコールは、読み書きについて、排他ロックではなく共有ロックを取得します。
write() システムコールは、ユーザーデータをコピーし、システムページキャッシュのページに書き込む代わりに、ディスクに対してダイレクト I/O を実行します。
read() システムコールは、データをシステムページキャッシュ内のページに読み取ってページからユーザーバッファにコピーする代わりに、読み書きの共有ロックを取得し、ディスクからダイレクト I/O を実行します。
read() および write() のシステムコールは原子的になりません。このアプリケーションでは、2 つのスレッドが同時にファイルの同じ領域に書き込まないようにする必要があります。
同時 I/O(CIO)は、VX_CONCURRENT アドバイザリフラグを設定した VX_SETCACHE ioctl コマンドを使って、ファイル記述子と ioctl() 操作によって設定できます。同時 I/O を使うのは、このファイル記述子から実行された read() および write() 操作に限られます。ほかのファイル記述子から実行された read() および write() 操作は、POSIX セマンティクスに従います。VX_CONCURRENT アドバイザリは、ファイルの VX_SETCACHE ioctl 記述子によって設定できます。
CIO は VxFS のライセンス機能です。