回答:
カーネル2.6.28以降、LinuxはSplit Least Recent Used(LRU)ページ置換戦略を使用しています。プログラムテキストや共有ライブラリなどのファイルシステムソースを持つページは、ファイルキャッシュに属します。ファイルシステムバッキングのないページは匿名ページと呼ばれ、アプリケーションなどに予約されたスタックスペースなどのランタイムデータで構成されます。通常、ファイルキャッシュに属するページは、メモリから削除する方が安価です(必要に応じてディスクから簡単に読み戻すことができるため) 。匿名ページにはファイルシステムのバッキングがないため、ページを保存するスワップスペースがない限り、プログラムが必要とする限り、メモリに残る必要があります。
スワップパーティションが何らかの理由でシステムの速度を低下させるという一般的な誤解です。スワップパーティションがないということは、カーネルがメモリからページを削除しないという意味ではなく、カーネルが削除するページに関する選択肢が少ないことを意味します。使用可能なスワップの量は、使用量に影響しません。
Linuxは、デフォルトでカーネルメモリアカウンティングポリシーがメモリをオーバーコミットする可能性があるため、スワップスペースの欠如に対処できます。欠点は、物理メモリが使い果たされ、カーネルが匿名ページをディスクにスワップできない場合、メモリ不足キラー(OOMキラー)メカニズムがメモリを占有する「不正な」プロセスを強制終了し、メモリを解放することです。他のプロセス。
このvm.swappiness
オプションは、匿名ページを優先してファイルキャッシュページをスワップアウトするバランスを変更する修飾子です。ファイルキャッシュには200の任意の優先順位値が与えられ、そこからvm.swappiness
修飾子が差し引かれます(file_prio=200-vm.swappiness
)。匿名ページは、デフォルトでは60(anon_prio=vm.swappiness
)で始まります。これは、デフォルトでは、優先度の重みが匿名ページ(anon_prio=60
、file_prio=200-60=140
)を優先して適度に立つことを意味します。動作はmm/vmscan.c
、カーネルソースツリーで定義されています。
vm.swappiness
ofが与えられる100
と、優先順位は等しくなります(file_prio=200-100=100
、anon_prio=100
)。これは、ファイルキャッシュのページが匿名ページを優先して削除されることを望まない場合、I / Oが重いシステムにとって意味があります。
逆にvm.swappiness
to 0
を設定すると、カーネルはファイルキャッシュのページを優先して匿名ページを排除しなくなります。これは、プログラムがほとんどのキャッシングを自分で行う場合に便利です。一部のデータベースではそうかもしれません。デスクトップシステムでは、これにより対話性が向上する可能性がありますが、欠点はI / Oパフォーマンスが低下する可能性が高いことです。
デフォルト値は、これらの2つの極端な値の間のほぼ中間点として選択されている可能性があります。他のパフォーマンスパラメータと同様に、調整vm.swappiness
は、単なる直感ではなく、実際のワークロードに匹敵するベンチマークデータに基づいて行う必要があります。
問題は、すべてのニーズに合ったデフォルト値がないことです。swappinessオプションを10に設定することはデスクトップに適切な設定かもしれませんが、デフォルト値の60はサーバーにより適しているかもしれません。言い換えると、デスクトップとサーバー、アプリケーションの種類など、ユースケースに応じてswappinessを調整する必要があります。
さらに、Linuxカーネルはディスクキャッシュにメモリを使用します。そうしないと、RAMは使用されず、これは効率的ではなく、意図されていません。キャッシュにディスクデータがあることは、何かが再び同じデータを必要とする場合、メモリから取得する可能性が高いことを意味します。そこからデータを取得する方が、ディスクから再度取得するよりもはるかに高速です。また、swappinessオプションは、Linuxカーネルがディスクキャッシュの縮小よりもディスクへのスワップアウトを好むメカニズムです。キャッシュから古いデータを削除する必要がありますか、それともプログラムページをスワップアウトする必要がありますか?
この記事は、このトピックにもいくつかの光を当てる可能性があります。特に、スワッピング傾向の推定方法。
上記の回答に詳細を追加します。
ますますVMを使用しているため、Linuxホストはこれらのクラウド環境の1つでvmになる場合があります。例1と2の両方で、実行中のアプリケーションと、それらが消費するRAMの量を把握しています。3では、それほどではありません