カーネルバージョン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=60
、file_prio=200-60=140
)を優先することを意味します。ただし、システムがメモリ不足状態に近い場合、匿名にvm.swappiness
設定されている場合とファイルLRUリストがゼロに設定されていない限り等しくスキャンされます。
vm.swappiness
が100に設定されている場合、優先順位は等しくなります(anon_prio=100
、file_prio=200-100=100
)。vm.swappiness
ゼロに設定すると、カーネルはファイルキャッシュからページを優先して匿名ページを排除できなくなります。