swappinessがデフォルトで60に設定されるのはなぜですか?


109

Linuxでのスワップ性についての記事を読みました。デフォルトが60に設定されている理由がわかりません。

私によると、このパラメーターはスワップを減らすために10に設定する必要があります。スワップはハードドライブ上にあるため、メモリよりもはるかに遅くなります。

なぜ彼らはそのようにカーネルを構成したのですか?


2
@Mat swappinessベンチマークの実行方法については、こちらをご覧ください。
ジェレミア

回答:


133

カーネル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=60file_prio=200-60=140)を優先して適度に立つことを意味します。動作はmm/vmscan.c、カーネルソースツリーで定義されています。

vm.swappinessofが与えられる100と、優先順位は等しくなります(file_prio=200-100=100anon_prio=100)。これは、ファイルキャッシュのページが匿名ページを優先して削除されることを望まない場合、I / Oが重いシステムにとって意味があります。

逆にvm.swappinessto 0を設定すると、カーネルはファイルキャッシュのページを優先して匿名ページを排除しなくなります。これは、プログラムがほとんどのキャッシングを自分で行う場合に便利です。一部のデータベースではそうかもしれません。デスクトップシステムでは、これにより対話性が向上する可能性がありますが、欠点はI / Oパフォーマンスが低下する可能性が高いことです。

デフォルト値は、これらの2つの極端な値の間のほぼ中間点として選択されている可能性があります。他のパフォーマンスパラメータと同様に、調整vm.swappinessは、単なる直感ではなく、実際のワークロードに匹敵するベンチマークデータに基づいて行う必要があります。


4
OSをソリッドステートデバイスにインストールすると、トレードオフにどのような影響がありますか?
ゲリット

3
@gerrit基礎となる記憶媒体のタイプは無関係です。この種の詳細は、メモリ管理サブシステムからは見えません。
トーマスナイマン

基礎となる記憶媒体のタイプは、メモリ使用量の観点からは無関係です。寿命を延ばすために、メディアが限られた量の読み取り/書き込み(フラッシュメモリなど)をサポートするという交換可能性を下げることを検討するかもしれません。
MatrixManAtYrService

2
@MatrixManAtYrService内部のウェアレベリングと組み込みの冗長性のおかげで、最新のSSD(前のコメントの質問が参照 は、エラーを示す前に最大2 PB(!)の書き込みが続くことが示されました。これらの実験の安価なドライブでさえ、エラーが発生する前に300TB持続しましたが、公式の保証定格である100TBをはるかに超えています。少なくとも私の意見では、ワークステーションまたはラップトップ上のSSDに対応するために交換可能性を調整することは、実際には保証されていません。
トーマスナイマン

2
@ThomasNymanが良い点を示しています。ほとんどのユーザーにとっては心配する価値はありません。この投稿に至ったのは、SDカードのスワップスペースに関するものでした。
MatrixManAtYrService

9

問題は、すべてのニーズに合ったデフォルト値がないことです。swappinessオプションを10に設定することはデスクトップに適切な設定かもしれませんが、デフォルト値の60はサーバーにより適しているかもしれません。言い換えると、デスクトップとサーバー、アプリケーションの種類など、ユースケースに応じてswappinessを調整する必要があります。

さらに、Linuxカーネルはディスクキャッシュにメモリを使用します。そうしないと、RAMは使用されず、これは効率的ではなく、意図されていません。キャッシュにディスクデータがあることは、何かが再び同じデータを必要とする場合、メモリから取得する可能性が高いことを意味します。そこからデータを取得する方が、ディスクから再度取得するよりもはるかに高速です。また、swappinessオプションは、Linuxカーネルがディスクキャッシュの縮小よりもディスクへのスワップアウトを好むメカニズムです。キャッシュから古いデータを削除する必要がありますか、それともプログラムページをスワップアウトする必要がありますか?

この記事は、このトピックにもいくつかの光を当てる可能性があります。特に、スワッピング傾向の推定方法。


60がサーバーに適している理由がわかりません。私にはサーバーがあり、一部のプロセスがfreem RAMの40%を持っている場合でもスワップ状態になります。私には意味がありません。
ヒューゴ

7
メモリがアクセスされる可能性が非常に低い場合、メモリの一部をスワップに移動することは理にかなっています。そのように、Linuxは実際のRAMを可能な限り解放し、実際に必要な状況に備えます。
リプレイ

2
してください短縮URL避ける
DRS

記事へのリンクは死んでいるが、あなたはまだからそれを見ることができウェイバックマシン
DRS

リンクされた記事は有益です。共有してくれてありがとう。
ピスト

5

上記の回答に詳細を追加します。
ますますVMを使用しているため、Linuxホストはこれらのクラウド環境の1つでvmになる場合があります。例1と2の両方で、実行中のアプリケーションと、それらが消費するRAMの量を把握しています。3では、それほどではありません

  • 例1
    高性能のプライベートクラウド(ほとんどの銀行が数百万ドルを支払うソートを考えてみてください)では、非常に良好なIOを備えた非常に高価なストレージアレイによってディスクが提供されます。そのストレージの一部は、SSDディスクに支えられたRAM(ディスクアレイ内)にあり、スピンドル付きの通常のディスクに支えられています。この状況では、VMが認識するディスクは、アクセスできるRAMよりも少し遅い場合があります。単一のvmの場合、swapとramの間に大きな違いはありません。
  • 例2
    例1と同じですが、単一のvmの代わりに数百、数千、またはそれ以上があります。この状況では、サーバー(ハイパーバイザー)RAMが安価であり、ストレージRAMが高価である(比較的言えば)ことがわかります。RAMの要件をハイパーバイザーRAMと非常に高価なストレージアレイが提供するSWAPに分割すると、ストレージアレイ内のすべてのRAMがすぐに使用され、ブロックがSSDによって、最後にスピンドルによって処理されます。突然、すべてが本当に遅くなり始めます。この場合、おそらくすべてのvmの累積的な影響がパフォーマンスに影響するため、十分なRAM(ハイパーバイザーから)をVMに割り当て、swapinessを0(メモリ不足状態を回避するためのスワップのみ)に設定します。ストレージ、
  • 例3おそらくSSDを搭載した最新のラップトップまたはデスクトップ。メモリ要件は不明と見なされます。ユーザーが使用するブラウザ、開いているタブの数、ドキュメント、RAW画像、または場合によってはビデオを編集する場合、すべてRAMを消費します。swappinessを低い値に設定し、他のファイルシステムの調整を実行すると、SSDへの書き込みが少なくなり、SSDの寿命が長くなります。

3
エンドユーザーシステムのSSD書き込み耐久性の懸念は過大評価されています。最近のSSDは、通常、数百テラバイトの書き込みボリュームに耐えます。スワップを頻繁に使用する一般的なデスクトップシステムでも、長年の運用でそれほど使用することはほとんどありません。
ジュール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.