vm.swappinessパラメーターは実際に何を制御しますか?


37

カーネルのドキュメントごと:

This control is used to define how aggressive the kernel will swap
memory pages.  Higher values will increase aggressiveness, lower values
decrease the amount of swap.

しかし、これはちょっと曖昧です。パラメーターが最終的に制御するものを正確に把握しようとしています。カーネルがページをどれだけ積極的にスワップアウトしようとするかを調整することは知っていますが、カーネルコードのどのような意思決定プロセスが影響しますか?

カーネルがスワップアウトする前にページにアクセスしなければならない期間を調整しますか?その場合、デフォルト値の60は何を表していますか?そして、1の増分/減分によってどれだけ変化しますか(式がいいでしょう)?
または、アクセス頻度に基づいてページを入れ替えますか?
または、他の何か?


2
はい、スワップネスあいまいです;-)
チャフィンク

回答:


27

カーネルバージョン2.6.28以降、Linuxは、Least Recently Used(LRU)ページ置換戦略を使用しています。プログラムテキストや共有ライブラリなどのファイルシステムソースを持つページは、ファイルキャッシュに属します。ファイルシステムバッキングのないページは、匿名ページと呼ばれ、アプリケーションなどに予約されたスタックスペースなどのランタイムデータで構成されます。通常、ファイルキャッシュに属するページは、メモリから削除するほうが安価です。匿名ページにはファイルシステムのバッキングがないため、それらを格納するスワップスペースがない限り、プログラムが必要とする限り、メモリに残る必要があります。

このvm.swappinessオプションは、でget_scan_count()定義されていmm/vmscan.cます。get_scan_count()削除するページを探すときに、匿名およびファイルのLRUリストをどれだけ積極的にスキャンするかを決定します。各ケースの値は、システムのワークロードの変化を考慮に入れるために、最近の参照が古い参照よりも重要度が高い最近回転および最近スキャンされた比率の浮動平均によって決定されます。

vm.swappiness匿名ページの賛成でファイルキャッシュページをスワップアウトとの間のバランスを変更する修飾子です。vm.swappiness匿名ページに与えられる優先度の値で、デフォルトでは60に設定されています。ファイルキャッシュには優先順位値200が与えられ、そこからvm.swappiness修飾子が差し引かれます(file_prio=200-anon_prio)。これは、デフォルトでは、優先度の重みが匿名ページ(anon_prio=60file_prio=200-60=140)を優先することを意味します。ただし、システムがメモリ不足状態に近い場合、匿名にvm.swappiness設定されている場合とファイルLRUリストがゼロに設定されていない限り等しくスキャンされます。

vm.swappinessが100に設定されている場合、優先順位は等しくなります(anon_prio=100file_prio=200-100=100)。vm.swappinessゼロに設定すると、カーネルはファイルキャッシュからページを優先して匿名ページを排除できなくなります。


file_prioの交換可能性を変更する方法はありますか?または、特定のディレクトリに限定しますか?
CMCDragonkai 14

13

どのページがスワップされるかを計算するために使用される式があります。ではvmscan.c、あなたこのアルゴリズムを見ることができます:

スワップ傾向= mapped_ratio / 2 +苦痛+ vm_swappiness

ここでは、swappinessがスケールであることがわかります。これは、いくつかのアルゴリズムに追加され、このパラメーターによって、カーネルがスワップする必要があるときの動作を制御できます。非アクティブなメモリページがスワップされる確率の割合として把握できます。swappinessを100に設定した場合、確率はありませんが、スワップすることを保証します。0に設定した場合、カーネルは空のメモリがある限り、まったくスワップしないようにします。


6

エレベータの「ドアを閉じる」ボタンが壊れているか、そもそも何にも接続されていないことが多いと言われています(ノーマン1986と思います)。これにより、ersatzコントロールはエレベーターを操作する方法ではなく、急ぎ過ぎのライダーをなだめる方法になります。

同様に、swappinessは、カーネル述部の明確に定義された決定論的な制御とは無関係の効果があります。askubuntu.comの@neon_overlordが指摘したとおり

ほとんどの人は、スワッピング=悪いと信じており、swappinessを減らさないと、本当に必要のないときにシステムがスワップするからです。どちらも本当ではありません。スワップは、システムが行き詰まっている時間にスワップを関連付けます-ただし、システムが行き詰まっているのではなく、主にスワッピングです。スワップに顕著なペナルティが生じる場合があるのは確かですが、その場合にスワップ性を低下させると、システム全体のパフォーマンスや安定性が他の方法で低下し、後に顕著になる可能性があります…

それで、それは本当に何を制御しますか?既に提供されているすばらしい回答に加えて、有効な答えの1つは、システムをより詳細に制御でき、ノブを調整することで意味のある方法でその制御を実行できるという期待を変更することです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.