Linuxファイルシステムキャッシュからすべてを削除する ができることはわかっていますが、特定のファイルを1つだけ削除する方法はありますか?または、ファイルがキャッシュされないようにしますか?または、プロセスが書き込んだファイルをキャッシュしないように指示しますか?
たくさんの小さなファイルを読み、大きなファイルを書き込むプロセスがあります。ディスクシークを回避するために小さなファイルをキャッシュに保持したいのですが、大きなファイルをキャッシュする必要はありません。
@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を選択的に適用できます。
免責事項:私はこれをテストしていません。
O_DIRECT
フラグを使用して個々のファイルを開くことができます(man 2 open
を参照)—そのマンページの[〜#〜] notes [〜#〜]セクションを注意深く読み、考慮してくださいO_SYNC
も必要かどうか。