web-dev-qa-db-ja.com

スワップをキャッシュすることが理にかなっているのはなぜですか?

スワップアウトされたページをキャッシュすることは、私にはかなり逆効果に聞こえます。ページを入れ替える場合、最初にページをメモリにキャッシュし、適切な場所に移動するだけでよいという利点は何ですか?ページが積極的にスワップインされたとしても、ページを「単に」スワップインする方が理にかなっていますか?実際、スワップのキャッシュは単なるリソースの浪費ではありませんか?

9
txwikinger

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

12
txwikinger

スワップとRAM)の間でページが複製されるポイントは、次のいずれかの場合にディスクを待機しないようにすることです。

  1. それらから何かを読む必要があります

  2. 彼らは何か他のもののための場所を作るために追い出される必要があります

それらがスワップのみであった場合、ケース1は、それらがディスクから入ってくるのを待つことを意味します。それらがRAMのみにある場合、ケース2は、それらがディスクに出力されるのを待つことを意味します。

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

0
SamB

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

0
reiche