The kernel's VM paging algorithms are tuned to perform best when there is at least 2x swap versus main memory. Configuring too little swap can lead to inefficiencies in the VM page scanning code as well as create issues later on if you add more memory to your machine.
実メモリの2倍の根拠ってなんだったっけ? (スコア:1)
の根拠ってなんだったんでしたっけ?
また、同様にWindows 98使ってたころは
「Windowsのスワップファイルは実メモリの3倍、約束な!」
っていわれた記憶もあります。
なんかそれぞれのOSのページングのアルゴリズムに
依拠した数字なんでしたっけ?
屍体メモ [windy.cx]
FreeBSDではVMのアルゴリズムが理由ですね。 (スコア:5, 参考になる)
Re:FreeBSDではVMのアルゴリズムが理由ですね。 (スコア:2, 参考になる)
聞いてからは、適当に決めてます。流石に恐いので 0 にはしませんけど。
OS の仮想メモリよりも、PhotoShop の仮想記憶の方が最近は気になります。
TomOne
Re:FreeBSDではVMのアルゴリズムが理由ですね。 (スコア:2, 参考になる)
実メモリ:A
スワップ:□B
↓
実メモリ:B
スワップ:A□
何も考えずにページアウトして空いた所にページインしてくると。
実際はそんな状況はまず起こらないにしても実装は単純になりそうです。
Re:実メモリの2倍の根拠ってなんだったっけ? (スコア:3, 参考になる)
僕が物心ついた頃、VAX11とか68020のSun3/4.2BSDあたり、だと、「スワップはメモリの3倍」と習いました。
メモリは貴重で高価でした。 32ビットCPUが採用された初期ですら、主記憶は数100KBとかせいぜい4MB(それ以上ほしい人はオプションメモリを買ってね)が標準でしたから。 一方、CPUは遅かった。CPU速度vsHDD速度比は今より数ケタ小さかったので、ページングのダメージは相対的に小さかった。 プログラム全体をメモリに置けないとページングが発生しますが、メモリが高価だった昔は「ページングは頻度が低ければよし、つまりスラッシングにならなければよし」という価値観でした。
たとえば、各プログラムの初期化ルーチンなどは、起動直後に利用された後はページアウトされても全体の性能悪化はごく少しです。 では、名目上のプロセスサイズのどれだけの部分が実メモリに乗っていれば、プログラムは調子よく(ページング動作による性能悪化が許せる程度で済む)走るかというと、1/3だと、OSの教科書に書いてあった(→ワーキングセット)と、記憶しているのですが元ネタの本を見つけだすことができません。
さて、ここからが、推測です。 昔の仮想記憶の実装だと、プロセスイメージの1/3が実記憶に載っている状態でメモリを目いっぱい使いきるにはスワップは3倍必要です。 その後の、「実メモリ使用量+スワップ使用量=プロセスイメージサイズ」という仮想記憶だと、2倍になりますね。
昔のUNIXはinetdなんてなくて、telnetd, ftpd, fingerd, talkd・・・とたくさんのサーバデーモンが起動されていました。何せメモリが足りないのでそれらdaemonは誰かに呼ばれるまでページアウトされているのが当然。というわけで、実際swapはたくさん使ってました。
Re:実メモリの2倍の根拠ってなんだったっけ? (スコア:1, 興味深い)
Disk上に確保しないと足りない分をRAMから確保するという
本末転倒な仕様があって、必ず2倍は取るように言われてました。
# うろおぼえなのでAC
Re:実メモリの2倍の根拠ってなんだったっけ? (スコア:2, 参考になる)
これはNEC独自というよりもSVR2由来の全ての商用UNIXに当てはまります. そのためEWS-UXでもSVR4ベースになった中期以降のものでは物理メモリ+スワップがメモリ空間として認識されます.
最後までこの古い仮想記憶システムを使っていた商用UNIXはHP-UXで, 例えばスワップが発生しないように主記憶を大量に積むと, その分のディスクが使いもしないスワップ領域に持っていかれることになります. 最近はどうなっているのか分かりませんが, 5~6年ぐらい前はディスクもそれなりに高価だったので, 非常に不評でした.
Re: (スコア:0)
> 発生しないように主記憶を大量に積むと, その分のディスクが使いもしないスワップ領域
> に持っていかれることになります. 最近はどうなっているのか分かりませんが, 5~6年
> ぐらい前はディスクもそれなりに高価だったので, 非常に不評でした.
ちょっと記憶があいまいで申し訳ないのですが、99年だか2000年くらいに出たバージョンからは、
擬似スワップがデフォルトになっていたので、SWAPは物理メモリの1/4だかそのくらいあればOK
となっていました。
もっともダンプ用の領域を(念のため)実メモリ程度確保したかったので、SWAPと兼用ということで
結局実メモリと同じくらいのサイズにはしていましたね。
その頃はメモリが4GBとかせいぜい8GBくらいのシステムが主流でしたので、ディスクが36GBとかなら
それでも余り困ることは無かったと記憶しています。
Re:実メモリの2倍の根拠ってなんだったっけ? (スコア:1, 参考になる)
それはもともとはHP-UXの仕様だから。
それに昔のSolraisも同じような仕様だった記憶が。
HP-UXはフルダンプした際にswapを利用するので最低実メモリより
多く取らないといけないと教えられましたね。今では任意にダンプ先を
指定できるのでそこまで気にしなくて良いと思いますけど。
今となってはディスク容量も気にならないでしょうから、多少多めくらいで
いいのではないかと個人的には考えています。
Re:実メモリの2倍の根拠ってなんだったっけ? (スコア:1)
Re: (スコア:0)
system.ini
[386Enh]
PageOverCommit=4
デフォルトでは、仮想記憶域が実メモリの4倍で予約されるので、予約した仮想記憶域が一杯になる前にスワップファイルの容量不足になることを防ぐためです。実メモリの3倍以上のスワップファイルを用意しても、PageOverCommitの値を変更しないと、余分な分は使用されないので、無駄です。
[386Enh] (スコア:1)
情報ありがとうございました。
なんかつっかえていたもやもやがすっきりしました。
屍体メモ [windy.cx]