web-dev-qa-db-ja.com

Linuxファイルシステムのキャッシュから特定のファイルをドロップしますか?

Linuxファイルシステムキャッシュからすべてを削除する ができることはわかっていますが、特定のファイルを1つだけ削除する方法はありますか?または、ファイルがキャッシュされないようにしますか?または、プロセスが書き込んだファイルをキャッシュしないように指示しますか?

たくさんの小さなファイルを読み、大きなファイルを書き込むプロセスがあります。ディスクシークを回避するために小さなファイルをキャッシュに保持したいのですが、大きなファイルをキャッシュする必要はありません。

24
Jay Hacker

@geekosaurの回答を展開すると、LD_PRELOADとプログラムを使用してO_DIRECTの使用を強制できます。ここでは http://arighi.blogspot.com/2007/04/how-to-bypass-buffer-cache -in-linux.html

そのコードは、すべてのファイルに対してO_DIRECTを強制します。ただし、__do_wrap_openにstrncmpロジックを追加するだけで、O_DIRECTを選択的に適用できます。

免責事項:私はこれをテストしていません。

3
Mark Wagner

O_DIRECTフラグを使用して個々のファイルを開くことができます(man 2 openを参照)—そのマンページの[〜#〜] notes [〜#〜]セクションを注意深く読み、考慮してくださいO_SYNCも必要かどうか。

2
geekosaur