OK、あなたは経験を求めます、これは質問を少し主観的で議論的なものにしますが、まずまずです。
Linusは、人々が通常O_DIRECTに帰属する用途について言及していること、そしてそれらの用途については、IMO Linusがほとんど正しいと述べました。直接I / Oを行う場合でも、デバイスとの間でデータを直接プログラムステートメントに転送することはできません。(プログラムまたはデバイスによって)いっぱいになり、システムコールを介して相手側に転送されるバッファが必要です。また、それを効率的にするために、再び必要になったときのために、今読んだばかりのものを読み直したくないでしょう。そのため、何らかのキャッシュが必要になります...まさに、ページキャッシュであるO_DIRECTなしでカーネルが提供するものです!なぜそれを使用しないのですか?また、より多くのプロセスが同じファイルに同時にアクセスしたい場合にも利点があります。O_DIRECTを使用すると災害になります。
そうは言っても、O_DIRECTには次の用途があります。何らかの理由でブロックデバイスから直接データを取得する必要がある場合。パフォーマンスとは関係ありません。
パフォーマンスのためにO_DIRECTを使用する人は、通常、不正なページキャッシュアルゴリズムを備えたシステム、POSIXアドバイスメカニズムを持たないシステム、または他の人が言ったことを不注意に繰り返す人です。これらの問題を回避するために、O_DIRECTがソリューションでした。Linux(OTOH)には、実際の根本的な問題を修正するという哲学があります。根本的な問題は、ページキャッシングで悪い仕事をしたOSでした。
catの簡単な実装にO_DIRECTを使用して、マシンのメモリエラーを見つけました。これは、O_DIRECTの有効な使用方法の1つです。それはパフォーマンスとは何の関係もありませんでした。