Linuxで特定のファイルのファイルシステムキャッシュを無効にできますか?

Linuxで特定のファイルのファイルシステムキャッシュを無効にできますか?

私は大容量ファイルを持っており、ディスクI / O容量で読み取ることに同意します。他のファイルのための無料のファイルシステムキャッシュをしたいです。 Linuxで特定のファイルのファイルシステムキャッシュをオフにできますか?ネイティブlib + javaを介してプログラムでこれを実行したいと思います。

ベストアンサー1

ファイルの開いているインスタンスではこれを実行できますが、ファイル自体では永久に実行することはできません。開いているファイルの各インスタンスに対して直接IOを使用してこれを実行できます。 Javaでこれを行う方法はわかりませんが、CとC ++では呼び出しO_DIRECTにフラグを渡すことができます。open()

ただし、これを行うと、いくつかの潜在的な問題が発生する可能性があります。

  • これは一部のファイルシステムでは非常に危険です。特に、現在のバージョンのBTRFSは、ファイル書き込み時に直接IOに深刻な問題があります。
  • 何らかの形式の同期を使用しない限り、直接IOと通常のキャッシュI / Oを混在させることはできません。呼び出し前または前fsync()の一部の直接IO読み取りに対してキャッシュされた書き込みが表示されないことがあり、キャッシュされたfdatasync()IO読み取りに対して直接IO書き込みが表示されないことがあります。一度

ただし、一時的にデータをキャッシュに保存できる場合は、別のアプローチがあります。 POSIX fadviseインターフェース(posix_fadviseLinuxのシステムコールを介して)を使用してファイルを読み取った後、ファイル内のデータが必要ないことをカーネルに通知できます。このフラグを使用すると、POSIX_FADV_DONTNEEDキャッシュから特定のファイルの特定の領域を削除するようにカーネルに指示できます。ファイルの処理中に実際にこれを行うことができます(ブロックを読み取ったposix_fadvise後、すぐにファイルの適切な領域を呼び出して)。呼び出す領域は、システムのページサイズに合わせてソートする必要があります。これは、リアルタイム拡張機能を備えたすべてのPOSIX互換システム(ほとんどすべてのPOSIX互換システム)で実行できるため、一般的に好ましい移植可能な作業方法です。

おすすめ記事