Linuxでのスワップについていくつか読んだだけです。デフォルトが60に設定されている理由がわかりません。
私によると、スワップを減らすために、このパラメーターは10に設定する必要があります。スワップは私のハードドライブにあるので、私のメモリよりもはるかに遅いです。
なぜ彼らはそのようにカーネルを構成したのですか?
カーネル2.6.28以降、Linuxは Split Least Recently Used (LRU)ページ置換戦略を使用しています。プログラムテキストや共有ライブラリなどのファイルシステムソースを含むページは、ファイルキャッシュに属します。ファイルシステムバッキングのないページは匿名ページと呼ばれ、アプリケーション用に予約されたスタックスペースなどの実行時データで構成されます。通常、ファイルキャッシュに属するページは、メモリから削除する方が安価です(必要なときにディスクから簡単に読み戻すことができるため)。 。匿名ページにはファイルシステムのバッキングがないため、それらを格納するためのスワップ領域がない限り、プログラムが必要とする限り、ページはメモリに残っている必要があります。
スワップパーティション が何らかの理由でシステムの速度を低下させることはよくある誤解です。スワップパーティションがないことは、カーネルがメモリからページを削除しないことを意味するのではなく、削除するページに関してカーネルが選択できる選択肢が少ないことを意味します。利用可能なスワップの量は、それが使用される量に影響を与えません。
デフォルトでは、カーネルメモリアカウンティングポリシーは overcommit memory であるため、Linuxはスワップスペースの欠如に対処できます。欠点は、物理メモリが使い果たされ、カーネルが匿名ページをディスクにスワップできない場合、 out-of-memory-killer (OOM-killer)メカニズムがメモリを浪費する「悪党」を殺し始めることです"他のプロセスのためにメモリを解放するプロセス。
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
が100
の場合、優先度は(file_prio=200-100=100
、anon_prio=100
)になります。これは、ファイルキャッシュからのページが匿名ページを優先して追い出されることが望まれない場合、I/O負荷の高いシステムにとって意味があります。
逆にvm.swappiness
を0
に設定すると、カーネルが匿名ページを追い出し、ファイルキャッシュのページを優先します。これは、一部のデータベースの場合のように、プログラムがキャッシュの大部分を自分で行う場合に役立ちます。デスクトップシステムでは、これにより対話性が向上する可能性がありますが、I/Oパフォーマンスが低下する可能性があるという欠点があります。
デフォルト値は、これら2つの極端な値の間の近似的な中間値として選択されている可能性が高いです。他のパフォーマンスパラメータと同様に、vm.swappiness
の調整は、単なる直感ではなく、実際のワークロードに匹敵するベンチマークデータに基づいている必要があります。
問題は、すべてのニーズに対応するデフォルト値が1つないことです。 swappinessオプションを10に設定することは、デスクトップには適切な設定ですが、デフォルト値の60はサーバーに適しています。言い換えると、swappinessは、ユースケース(デスクトップvsサーバー、アプリケーションタイプなど)に応じて調整する必要があります。
さらに、Linuxカーネルはディスクキャッシュにメモリを使用します。それ以外の場合、RAMは使用されず、これは効率的でなく意図されたものではありません。ディスクデータをキャッシュに置くと、同じデータが再び必要になる場合があります。 、メモリから取得する可能性があります。そこからデータを取得する方が、ディスクから再度取得するよりもはるかに高速です。また、swappinessオプションは、Linuxカーネルがディスクキャッシュを縮小するよりもディスクにスワップアウトすることを好むメカニズムです。キャッシュから古いデータを削除するのか、それともいくつかのプログラムページをスワップアウトするのか?
この記事 は、このトピックにもいくつかの光を当てるかもしれません。特にスワッピング傾向の推定方法。
上記の回答に詳細を追加します。
VMをどんどん使用しているため、Linuxホストはこれらのクラウド環境の1つでvmになる場合があります。例1と2の両方で、実行中のアプリケーションと、それらが消費するRAMの量を把握しています。 3ではあまりない