ダイレクト I/O 転送が失敗する状況を知りたいですか?
そのために、次の 3 つのサブクエリがあります。「Linuxカーネルを理解する」本によると..
- Linux は、ページ キャッシュをバイパスする簡単な方法を提供します。つまり、直接 I/O 転送です。各 I/O 直接転送で、カーネルはディスク コントローラーをプログラムして、セルフ キャッシュ アプリケーションのユーザー モード アドレス空間に属するページとの間でデータを直接転送します。
-- では、失敗を説明するには、アプリケーションにセルフ キャッシング機能があるかどうかを確認する必要がありますか? それがどのようにできるかわかりません。
2.さらに本には、「セルフキャッシングアプリケーションがファイルに直接アクセスしたい場合、O_DIRECTフラグを指定してファイルを開く.open()システムコールを処理している間、dentry_open()関数はdirect_IOメソッドが実装されているかどうかをチェックする.開かれているファイルの address_space オブジェクトに対して、逆の場合はエラー コードを返します。」
- これとは別に、直接の I/O 障害を説明できる他の理由はありますか?
3. このコマンド「dd if=/dev/zero of=myfile bs=1M count=1 oflag=direct」は、Linux で失敗することはありますか?