ベストアンサー選定ルールの変更のお知らせ

「LinuxのSwap領域は、実メモリと同等か2倍程度」
取りましょう、とよく目にするのですが、
根拠を教えてください。

多ければよいと言う訳でもなさそうだし、
疑問に思っています。

よろしくお願いします。

A 回答 (7件)

他の方が書いていますが、メモリが高価だった(というか大容量メモリが無かった)時代の話です。


実メモリが4MBしかないとして、OS含めて20MBのメモリを必要とするプログラムを動かしたいとします。そうすると、差し引き最低16MBのスワップ領域が必要です。この場合だと、実メモリの4倍ですね。こういうケースでは一応動くにしてもページングが多発して実用に耐えない速度になり、もしくはOSの動作も不安定になります。

この、「ページングが多発して実用に耐えない速度」の目安が実メモリの2倍という経験値です。つまり、実メモリが4MBしかないなら、せいぜいスワップ8MBで合計12MB位の仮想メモリしかそのコンピュータでは使えない(20MBのメモリを必要とするプログラムは動かせない)ということです。

今の時代だと、必要仮想メモリをすべて実メモリでまかなえるならスワップ領域は必要ありません。いくら大きく定義しても良いですが、実メモリからあふれないわけですからほとんど使われません。

もちろん今でも「ページングが多発して実用に耐えない速度の目安が実メモリの2倍」という経験則はおおむね適用できると思うので、仮に大規模な科学技術シミュレーション計算で10GBのメモリ空間が必要ならば、実メモリは3ないし5GB程度必要と言えます。もちろん1GBしかなくても計算は出来るでしょうがCPU能力の大半が計算で無くページングに使われる事になります(もちろんプログラムによりますが)。
    • good
    • 1

たとえばSunOS 4.1.x ( BSD系と分類されるようです) のような古いUnixに実装されていた仮想メモリの機能は実メモリとスワップスペースに壁があり、実メモリの空間を仮想メモリとして利用することができませんでした。


実メモリと同じかそれ以上のメモリというのが仮想メモリ機能を利用する必須の要件でしたので、実メモリと同じか2倍くらいというのが仮想メモリを利用するための目安と考えられていました。
実メモリと同等か2倍程度というのは、このころの推奨されたサイズがそのまま現在も使われているのだと思われます。
現在の Unix や Linux は、実メモリを仮想メモリ空間として利用できるので、スワップエリアのサイズはプロセスが利用する最大メモリサイズの合計を考慮して考えるべきなのですが、これを事前に見積もるのは難しいので、一般的な推奨サイズとして実メモリと同等か2倍程度という目安が使われているようです。
ちなみに Linux ではページキャッシュやバッファキャッシュをできるだけ実メモリ上に残しておこうとする戦略で動作するので、大きなファイルをコピーしたりするだけでのスワップエリアを少し使ってしまうことがあります。
パフォーマンスに重大な影響を及ぼさない限りにおいては、スワップエリアの利用は実メモリを最大限利用していると考えることもできます。
スワップエリアの利用があるから悪いと即断するのではなく、現在動作するシステムへの影響があるのかどうかという点を考慮して判断しないと、コンピュータ資源を浪費する結果となります。
    • good
    • 1

以前のUNIXでは実メモリの容量分のSWAP領域を使うように設計されていたため、実メモリよりもSWAP領域が小さいと動作しないような仕組みになっていました。



従って、SWAP領域は実メモリより大きく2倍くらい取っておくのがベストという概念が生まれたのでしょう。

ただ、最近のUNIXやLinuxではそのようなことはなくなってきており、全必要メモリ量-実メモリ量としてSWAP領域を計算してしまっても構わないと思います。

現に私はSolaris 8や9で実メモリをが4GBも搭載されているのにSWAP領域をWeb Startのデフォルトである512MBしか確保せずにシステムを構築した経験が何度もあります。これは恐らくLinuxにも当てはまるでしょう。
    • good
    • 1

NO3の人と同じで,swap使いたくないですね。



最近のデストリビューションでdesktopと利用し
openoffice等を使うと500MBほどメインメモリー
使ってしまうので、そのあたりだけ注意して
搭載メモリーとswap決めれば良いと思います。

メインメモリ1Gあれば良いとは思いますが。
    • good
    • 0

個人的に「スワップしたら負け」と思っているので #2 に賛成です. が, 一応補足しておきます:


「スワップ領域を実メモリの 2倍くらいとろう」というのは昔の UNIX の頃から言われている格言で, これは使っているスワップアルゴリズムが「スワップ領域が実メモリの 2倍以上」だと効率的に動く (逆にいうと「それより少ないとスワップアルゴリズムの効率が落ちる」) からだそうです. まあスワップアウトさせなければ問題ありませんが.
    • good
    • 0

No.1 さんの補足です。

おおむねその通りです。

でも、私が思うに(Linux サーバ管理者の立場からすると)「LinuxのSwap領域は、実メモリと同等か2倍程度」
は5年前のレベルではないかと思います。当時はメモリが 128 MB も積んでいれば普通、256 もあればかなり十分だったというレベルでした。

今日の商用利用されているサーバでは1GBや2GB搭載していて普通です。ですので、そのままスワップを実メモリと同等というのはあまりあてはまりません。もしスワップをそんなに多く確保してしまうと、ディスクに対するアクセスが増えて、スワップ発生時にパフォーマンス低下を招いてしまいます。

出来ればスワップは用いないようにして、スワップを発生させないシステムにする、というのが今日この頃の流行のような気がします。

教科書的な回答ではありませんが、現場から一言でした。
    • good
    • 0

根拠は無いようです。


実際は、何に使うかの用途しだいなので、チューニング項目だ! らしい。
ですが、
実メモリと同じから2倍程度とっておけば、大概のシステムで問題ないんじゃないの?
というレベルの話らしいです。
---
参考URLは、5.1.11-(2)に根拠は無いようだ という文章があったというだけのものです。<(_ _)>

参考URL:http://akikoma.remos.iwate-u.ac.jp/test_page/HPU …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング