LinuxでO_DIRECTを使用する

LinuxでO_DIRECTを使用する

この質問がプログラマ指向すぎる場合は、お知らせください。 Linux 2.6では、open()システムコールのO_DIRECTフラグに精通している人がいるかどうか疑問に思います。 Linusはその用途を軽視しますが、高性能ファイルの書き込みはその用途を表すようです。実際の経験とアドバイスを知りたいです。

追加情報: 使用しているアプリする独自のキャッシュを維持し、平均5倍以上の速度向上を実現します。ファイルに書き込むとき、キャッシュされたコンテンツはファイルシステムのキャッシュに書き込まれる必要があります。これは重複してパフォーマンスの問題を引き起こします。

ベストアンサー1

まあ、あなたは経験について質問しているので、質問はやや主観的であり、議論の余地がありますが、大丈夫です。

Linusは、人々が一般的にO_DIRECTに帰属する用途に言及している間、IMO Linusは基本的にこれらの用途に対して正しいと言いました。直接I / Oを実行してもデバイスからプログラムステートメントに直接データを渡すことはできません。また、効率性を高めるために、先ほど読んだ内容が再び必要な場合に備えて、再度読みたくないでしょう。したがって、一種のキャッシュが必要です。これはカーネルがO_DIRECTなしでページキャッシュのために提供することです!なぜそれを使用しないのですか?さらに、より多くのプロセスが同時に同じファイルにアクセスしようとすると、O_DIRECTが災害になるという利点もあります。

O_DIRECTには用途があります。何らかの理由でブロックデバイスから直接データをインポートする必要がある場合です。パフォーマンスとは何の関係もありません。

パフォーマンスを向上させるためにO_DIRECTを使用している人は、通常、ページキャッシュアルゴリズムが悪いシステムやPOSIX勧告メカニズムのないシステム、または他の人が言ったことを盲目的に繰り返す人から来ます。これらの問題を回避するためのソリューションはO_DIRECTです。 Linuxの哲学であるOTOHは、実際の根本的な問題を解決しなければならないということであり、根本的な問題は、オペレーティングシステムがページキャッシュ操作を正しく実行できないことです。

私はO_DIRECTを使用します私のコンピュータでメモリエラーを見つける単純なcatの実装です。これはO_DIRECTの有効な使用です。これはパフォーマンスとは関係ありません。

おすすめ記事