Linuxカーネルにバッファキャッシュに特定の割合のメモリのみを使用するように指示する方法はありますか?私/proc/sys/vm/drop_caches
は一時的にキャッシュをクリアするために使用できることを知っていますが、例えばメインメモリの50%以上に成長するのを防ぐ永続的な設定はありますか?
これを行う理由は、ディスクからのデータを常に提供し、数時間以内に物理メモリ全体をバッファキャッシュとして使い果たすCeph OSDを実行しているサーバーがあるためです。同時に、大量(数十GB)の物理メモリを割り当てるアプリケーションを実行する必要があります。一般的な信念に反して(バッファキャッシュに関するほぼすべての質問に与えられたアドバイスを参照)、クリーンキャッシュエントリを破棄してメモリを自動的に解放することは瞬時ではありません:バッファキャッシュがいっぱいになると、アプリケーションの起動に最大1分かかることがあります( *)キャッシュをクリアした後(を使用echo 3 > /proc/sys/vm/drop_caches
)、同じアプリケーションがほぼ瞬時に起動します。
(*)この1分間の起動時間中、アプリケーションは新しいメモリに障害が発生しますが、Vtuneによると呼ばれる関数によると、その時間の100%がカーネルで費やされますpageblock_pfn_to_page
。この機能は、巨大なページを見つけるために必要なメモリ圧縮に関連しているようで、実際に断片化が問題であると考えさせられます。