LinuxはFSキャッシュを削除しません。代わりにメモリ交換が開始されます。

LinuxはFSキャッシュを削除しません。代わりにメモリ交換が開始されます。

私はLinuxメモリキャッシュのこの動作のために非常に混乱しました。

             total       used       free     shared    buffers     cached
Mem:         15953      14188       1765         64         37      11504
-/+ buffers/cache:       2645      13308
Swap:         2047       1332        715

キャッシュされていないメモリがキャッシュより優先されるべきではありませんか?つまり、キャッシュを削除するのではなく、マシンがディスクに置き換えられるのはなぜですか?

この動作を変更できますか?それではどうですか?

ベストアンサー1

Linuxスワップアルゴリズムは、「最近使用されたページ」という概念を使用します。仮想メモリの各ページには関連する寿命があります。ページを頻繁に訪問する場合は、ページの年齢はかなり若くなければならず、ページを訪問しないとページは年をとるようになります。ページが古くなるほど、置き換えられる可能性が高くなります。

したがって、カーネルがコンテンツを置き換える場合、これはそのページが(他のページと比較して)古いためです。すべてのページに十分な物理メモリがある場合、期間に関係なく何も交換されません。

カーネルは、メモリ、スワップなどのリソースを最も効率的な方法で処理するように構成されています。

私はあなたがこの行動を変えなければならないとは思わない。ただし、必要に応じてシステムの交換性を変更できます。 swappiness設定を0に設定すると、必要な場合(メモリ不足)でない限り、ディスクの使用を避けることができます。

~からカーネル文書価値についてswappiness

このコントロールは、カーネルがメモリページをどれだけ積極的に交換するかを定義します。値が高いほど攻撃性が増加し、値が低いほど交換量が減少します。値が 0 の場合、使用可能なページおよびファイル・サポート・ページの数が、その領域の最高水位表示よりも小さくなるまでスワップを開始しないようにカーネルに指示します。

Linuxカーネルソースコードのファイルvmscan.c交換価値を処理します。面白い部分は次のとおりです。

2018         /*
2019          * With swappiness at 100, anonymous and file have the same priority.
2020          * This scanning priority is essentially the inverse of IO cost.
2021          */
2022         anon_prio = swappiness;
2023         file_prio = 200 - anon_prio;
  • 匿名ページファイルやデバイスをサポートしていないメモリマップ。これは、プログラムがスタックやヒープなどで使用するためにオペレーティングシステムからメモリを割り当てる方法です。
  • ファイルページ既存のファイルの内容をミラーリングします。

上記のソースコードの断片からわかるように、スワップファイルページはスワップ匿名ページよりも優先順位が高くなります(デフォルトは60)。ただし、100に設定すると、両方の値が同じ優先順位を持ちます。 0に設定すると、優先順位の差ができるだけ大きくなります。

次のように交換性を設定できます。

echo n >/proc/sys/vm/swappiness

n0~100の値はどこにありますか?

おすすめ記事