キャッシュスワップが意味を持つのはなぜですか?

キャッシュスワップが意味を持つのはなぜですか?

スワップアウトされたページをキャッシュするのは、私にはかなり非生産的に思えます。ページをスワップインする場合、最初にメモリにキャッシュしてから適切な場所に移動するだけでは、どのような利点がありますか? ページが積極的にスワップインされる場合でも、「単に」スワップインする方が理にかなっているのではないでしょうか? 実際、スワップのキャッシュはリソースの無駄遣いではないでしょうか?

答え1

さらに調査してみると、SwapCached in という用語は誤解を招くものであることがわかりました/proc/meminfo。実際、これはメモリとスワップに同時に存在するバイト数に関係しており、これらのページがダーティでない場合はスワップアウトする必要はありません。

答え2

これについては聞いたこともないし、私もあまり意味がわかりません。私は、まったくスワップしないようにする (もちろん予約は除く) という古き良きルールが依然として最善だと考えています。さて、理論的には、ディスクのように遅いものからロードするのに時間がかかるものを、直接利用可能なメモリにキャッシュすることには明らかな利点があります。しかし、スワップするページをキャッシュできるのであれば、そもそもなぜスワップするのでしょうか?

答え3

スワップと RAM 間でページを複製する目的は、次のいずれかの場合にディスクを待機することを回避することです。

  1. 彼らから何かを読み取る必要がある

  2. 他のもののために場所を空けるために立ち退きが必要だ

それらがスワップにのみ存在する場合、ケース 1 はディスクから入力されるのを待機することを意味します。それらが RAM にのみ存在する場合、ケース 2 はディスクに出力されるのを待機することを意味します。

(もちろん、ケース 2 は実際にはもう少し複雑です。このようなページを削除する方が明らかにコストが安いため、カーネルはおそらくそれらを優先的に削除しますが、要点は明らかです。)

関連情報