カーネル文書によると:
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はどれくらい変わりますか? (公式があればいいと思います。)
それともアクセス頻度に応じてページを交換しますか?
それとも別のものですか?
答え1
カーネルバージョン2.6.28以降、Linuxは以下を使用します。最近使用した項目を分割します。(LRU)ページ交換戦略。ファイルシステムソース(プログラムテキストや共有ライブラリなど)を含むページはファイルキャッシュに属します。ファイルシステムのバックアップがないページは匿名ページと呼ばれ、アプリケーション用に予約されているスタックスペースなどのランタイムデータで構成されます。通常、ファイルキャッシュに属するページはメモリから削除する方が安いです(これらのページは必要に応じてディスクから読み直すことができるからです)。匿名ページはファイルシステムをサポートしていないため、それらを格納するスワップスペースがない限り、プログラムが必要とする限りメモリに残る必要があります。
これvm.swappiness
get_scan_count()
オプションは定義で重要な役割を果たしますmm/vmscan.c
。get_scan_count()
削除するページを見つけるときに、匿名およびファイルLRUのリストをどれほど積極的に調べるべきかを決定します。各ケースの値は、最近の回転と最近のスキャン比の浮動平均によって決定され、システムのワークロードの変化を考慮するために、最新の参照が前の参照よりも大きい重みを持ちます。
これはvm.swappiness
、匿名ページのスワップファイルキャッシュページ間のバランスを変更する修飾子です。anon_prio=vm.swappiness
匿名ページに割り当てられた優先順位の値。デフォルト設定は60です。。ファイルキャッシュの優先順位の値は200で、この値からvm.swappiness
修飾子を減算しますfile_prio=200-anon_prio
。これは、基本的に(anon_prio=60
、file_prio=140
)システムが匿名ページのリサイクルコストをファイルページのリサイクルコストの2倍以上と見なすことを意味します。したがって、低いほど、vm.swappiness
より多くのファイルキャッシュページが匿名ページに置き換えられます。しかし、システムが近づくとメモリ不足の状況、匿名リスト、およびファイルLRUリストは、vm.swappiness
ゼロに設定されていない限り同様にチェックされます。
100に設定すると、vm.swappiness
優先順位は同じです(anon_prio=100
、、file_prio=200-100=100
)。 0に設定すると、vm.swappiness
カーネルがファイルキャッシュ内のページの匿名ページを削除するのを防ぎます。
答え2
どのページが変わるかを計算する式があります。vmscan.c
次のアルゴリズムが表示されます。
swap_ratio=mapped_ratio/2+pain+vm_swappiness
ここで、swappinessはいくつかのアルゴリズムに追加される尺度であり、このパラメータを使用すると、カーネルを交換する必要があるときにカーネルがどのように機能するかを制御できます。一部の非アクティブメモリページが置き換えられる確率の割合で計算できます。 swappiness を 100 に設定すると確率はありませんが、スワップが保証されます。 0に設定すると、カーネルは空のメモリがある限りスワップをまったく試みません。
答え3
誰かがエレベーターの「ドアを閉じる」ボタンが一般的に壊れたり、そもそも何も接続されていないと言いました(Norman 1986だったようです)。これは、代替制御装置を、エレベータを操縦する方法ではなく、過度に急な乗客を癒す方法にする。
同様に、交換性はカーネル述語に対して明確に定義された決定論的制御に関係なく効果があります。指摘したとおりaskubuntu.comの@neon_overlord
ほとんどの人は交換=悪いと考え、交換の可能性が減らない場合、システムは実際に必要でないときに交換します。これらのどれも真実ではありません。人々はシステムが停止した場合をスワッピングに関連付けます。しかし、スワッピングは主にシステムが停止したために起こるものであり、その逆ではありません。ある時点でスワップを行うと、目立つ不利益が生じる可能性がありますが、この場合、スワップを減らすと、後で明らかになる可能性がある他の方法でシステム全体のパフォーマンスや安定性が低下する可能性があります。
だからそれは何をするのか本物コントロール?すでに提供されている良い回答に加えて、有効な回答は、システムに対するより多くの制御権に対する期待が変わり、ノブを回すことで意味のある方法でその制御権を行使できるということです。