メモリ圧縮に関するLWN記事Linuxカーネルでメモリ圧縮を呼び出すことができることを示します。
ノード番号を/proc/sys/vm/compact_nodeに書き込んで、指定されたNUMAノードで圧縮が行われるようにします。
いつシステムエントリにノード番号を書き込む必要がありますか?私の言うことは、何を検出したり読んだりして、システムエントリにノードを書き込む必要があることを意味しますか?私の標準は何でなければならないか。システム項目を作成する前に、これをどのように測定する必要がありますか?
(…)もう一つの問題は、親ページを割り当てようとしてシステムが失敗することです。この場合、直接リサイクルを介してページを解放するよりも圧縮が優れた代替手段として機能します。圧縮アルゴリズムは、明示的なトリガーなしでアイドル状態を維持します。ページを移動すると費用が発生するため、必要でない場合は避けるのが最善です。
システムが失敗することを許可するということはどういう意味ですか?どのような面で失敗しましたか?この失敗をどのように検出できますか?失敗は、より高い順序のページを割り当てるための単純な要求が拒否されたことを意味しますか?この場合、圧縮アルゴリズムは自動的に実行されますか?
私の要件:システムの状態とメモリの断片化を理解してメモリ圧縮をトリガーしたいです。実際に実行する前に圧縮が役立つことを確認したいと思います。
ベストアンサー1
ほとんどの場合、カーネル内に割り当てられるメモリは、ページサイズより小さいか、物理メモリではなく仮想メモリでのみ連続的に割り当てられます。論文によると、より高い順序のページ割り当てが失敗した場合(つまり、カーネルが複数のページを要求する場合)物理メモリ内の連続) は自動的に圧縮をトリガします。これは非常に珍しいことなので、頻繁に発生してはいけません。
連続ページを使用するためにカーネルが必要でない限り、測定これはあなたのワークロードのパフォーマンスにとって非常に重要な(または少なくとも関連している)ので、邪魔しないことが最善です。