swap割り当てルール、やっぱりRAMの2倍? 87
ストーリー by hayakawa
個人的にはスワップなしで構築することが多くなってきましたが 部門より
個人的にはスワップなしで構築することが多くなってきましたが 部門より
あるAnonymous Coward 曰く、
本家「How Big Should My Swap Partition Be?」より
SWAPに8GB割り当てるのに全く問題がないHD容量があればいいが、例えばUMPCのようにメモリ容量に対するHD容量があまり大きくないような場合はどのようにすればいいのだろうか?またHDではなく、SSDしかないような場合はどうだろう?/.Jの皆様のswap割り当てルールはやっぱり「RAMの2倍」でしょうか?過去10年、自分より知識のある人たちに「swapにはどれだけ割り当てればいい?」と聞くと、皆同様に「RAMの2倍に設定しておいて、あとは考えなくていいよ」と答えてくれた。確かに昔は深く考えるようなことでもなかったように思う。RAMが128MBならswapは256MBにしておけばよかった。でもいま自分のノートPCに載っている4GBのRAMを考えると、8GBのswapって本当に必要?と考えてしまう。
デスクトップのswapには本当はどれ位割り当てるのがいいのだろうか?「RAMの2倍」ルールは今も当てはまるだろうか?このルール、これからもずっと有効なのだろうか?
物理メモリで十分 (スコア:5, 興味深い)
を足した分以上にメモリを使いたければswaponするしかないわけで、自分が使うであろうサイズ
の実メモリを載せて、swapは申し訳程度でよいです。
swapは実メモリの2倍ってのはsunos 4以前のsunosは実メモリ以下のswapだと動作しなかった時
代の制限。
数GByteのswapをバリバリ使うようだと、快適な動作は望めませんよね。
Re:物理メモリで十分 (スコア:1, 興味深い)
特にサーバはswapしだすと負荷分散バランスが急に崩れたりしてサービス品質が
悪くなったりするので、最大に負荷がかかったときもswapしないよう搭載メモリの
見積もりやアプリのチューニングの見積もりを行うのが一番良かったりしますね。
直接必要ないけどメモリリークの発見が楽なので申し訳程度に設定するくらいです。
最低でもメモリの二倍のswapは必須 (スコア:5, おもしろおかしい)
Re:最低でもメモリの二倍のswapは必須 (スコア:1)
Re:最低でもメモリの二倍のswapは必須 (スコア:1, 興味深い)
そもそも初代EeePCの場合 (スコア:1, すばらしい洞察)
実メモリを2G積んでメモリの2倍swapを取ろうとすると
なんにも入りません。
#なんか違う
スワップはしないけれど (スコア:3, 参考になる)
ハイバネーションで使用するので。
Re:スワップはしないけれど (スコア:5, 参考になる)
私が以前メモリを増設したときにスワップパーティションはそのままで使っていたら、ハイバネートに失敗して困ったことがありました。
メモリの使用量がスワップパーティションの容量を超えないようにプログラムを終了したらちゃんとハイバネートできたのですが、いちいちウインドウを閉じていてはハイバネートの意味無いような…。
というわけで、昔とは理由は違えど、今でも実メモリより多く確保しておいた方がいいと思いました。
Re:スワップはしないけれど (スコア:2, 参考になる)
ですが、専用パーティション必須というわけでもなかったりして。
試験運用中なLinux備忘録 [hatena.ne.jp]さんの記事になってますけど、スワップ「ファイル」にハイバネートするようにも出来ます。
とはいえ、ちょっと手間がかかるので、私は普通にパーティション切ってます。
容量は実メモリの1.5倍程度ですね。
>ハイバネートに失敗して困った
同じように、メモリ増設後にハイバネ失敗したときは、ライブCD(確かUbuntuかKnoppix)で立ち上げてパーティションエディタ(gpartedかqtparted)でスワップ領域を拡張しました。
Re:スワップはしないけれど (スコア:1)
MacOS Xはハイバネート用に実メモリと同サイズのファイルが作成されていて、それが使用されます。
まあMacOS Xはswapをパーティションではとらないので、関係のない話かもしれませんね。
スワップをオフにして、エラーが出たら考える(PCの買い替えを) (スコア:3, 興味深い)
スワップをゼロにしてかれこれ四年ほど運用してますが、
ゲームにしろ、VisualStudioにしろ落ちた覚えが無いですね。
先日、Sporeで落ちたこと以外は・・・。
スワップを有効にしていると、実メモリが足りているのに、
勝手にスワッピングするので、そちらのほうが重かったりします。
なので、いい加減にPCごと買い換えることを検討しています。
Re:スワップをオフにして、エラーが出たら考える(PCの買い替えを) (スコア:3, 参考になる)
> 勝手にスワッピングするので、そちらのほうが重かったりします。
それはXPだからです。Vistaからは、メモリに余裕があればスワッピングしないので
大容量のメモリを本当の意味で効率よく使えます。
具体的な例では、XPでアプリケーションを最小化すると、
空きメモリに関係なくスワップされてしまい、ウィンドウを復帰したときに
ハングアップに等しいディスクアクセスに見舞われることがあります。
Vistaではこの種の現象を見ることはなくなりました。
Re:スワップをオフにして、エラーが出たら考える(PCの買い替えを) (スコア:1, 参考になる)
それは、Windows だから。
他にもそういう OS があるかもしれないが、少なくとも FreeBSD では十分な実メモリがあるのにスワップしたりしないよ。
どちらが良いのかは、使い方によるんだろうけど。
# 今 FreeBSD 7.0 で試したら、空きが10%を切ってもスワップしなかった。
昔の Windows(2000?)は完全にゼロにすることはできなかったと思うけど、XP ではできるの?Re:スワップをオフにして、エラーが出たら考える(PCの買い替えを) (スコア:2, 参考になる)
出来ます。してます。
少なくともOS提供のコンパネで、なしを指定できます。裏で何やってるかはともかくとして。
物理メモリは2G。
用途によるんでしょうけど、
TV録画だのFirefoxだのOracleXE+Ruby+Eclipseだのごた混ぜに使ってる行儀悪い当方の環境で、
やばくなったことは無いです。
というかメモリ使用量のメーターを日常的に見てて「あーこれ立ち上げたら足りなくなりそうだなーこっち落とすかー」とか手動でやってます。本末転倒?
あと職場PC(自分の)は何故かHDDだけ古い奴で、
サイズは小さいわ、速度は遅いわなので、
これも(たまたま余ってたので)メモリ2G積んで、SwapはOFFにしてます。
SwapOFFだと時折(アプリ起動時とか)しか重くならないけど、ONだとほぼ常時重いです。
Re:スワップをオフにして、エラーが出たら考える(PCの買い替えを) (スコア:1)
結局SwapOnしました。
Swapがある前提で組まれたコードがOSの一部にあるんだろうと思ってあきらめたけど、
迷惑なOSだこと。
#でもいまだに使ってる
Re:スワップをオフにして、エラーが出たら考える(PCの買い替えを) (スコア:3, 参考になる)
そもそも swap は プロセス(orタスク) を丸ごと交換するメモリ管理方法で,
ページ単位で交換する場合は ページング といっていたはず.
なぜか最近はページ単位の交換もスワップといっているようで.
ついでに「スワップ領域はメモリの2倍」というのは, ページ単位での
メモリ管理 がまだなかった頃からの伝統で,
(全メモリ量 - swapper などのメモリ量 = 実行可能なプログラムサイズ)
× 同時実行するプロセス(タスク)数
という式を
(実行可能なプログラムサイズ ≒ 実装メモリ量)
× (スワップアウトするプロセス + スワップインするプロセス = 2)
と簡略化したもののはず.
どのぐらい「使うのか」とは別に (スコア:3, 興味深い)
64bitマシンなのに1Gbyteしかメモリがありません(会社がけちすぎるんです)。そんな環境でWiresharkで1Gbyte以上ある pcap ファイルパケット解析をする、なんて事になったらswap領域は必須です。
『swap領域』自体はディスク上に確保しても、無駄率はたかが知れています。500Gの中の8Gなんざ2%にもならない。なので、64bitマシンが持つ「仮想アドレス空間の広さ」を目一杯使えるようにデザインするのが一番よい、と考えました。
.
32bitマシンの場合はAtomのチップセット以外4Gbyte以上搭載できて当たり前の状態です。この場合はマシンの仮想空間の大半は物理メモリで埋め尽くす事ができる。ならば、予算とチップセットのどちらかの限界ぎりぎりまでメモリを搭載し、swapの必要がない事が判ったらswap offで運用でも構わないと思います。緊急時用のswap領域はメインメモリの1.2倍もあれば十分でしょう。この領域は普段は使わない。緊急時にいちいちディスク領域の確保から開始する手間を省くための領域です。
.
こう考えると、「メモリの何倍」ではなく「全部で何バイトの記憶領域が必要なのか」で計算した方が良い/計算できる時代になったのではないか、と思います。
fjの教祖様
Re:どのぐらい「使うのか」とは別に (スコア:1)
> こう考えると、「メモリの何倍」ではなく「全部で何バイトの記憶領域が必要なのか」で計算した方が良い/計算できる時代になったのではないか、と思います。
この意見に大賛成ですが、
> swapの必要がない事が判ったらswap offで運用
は逆ですね。緊急時にswapon。まあ、この感覚はMachを使用していることが多かったからでしょうね。
で、可能な限りの実メモリ。最近の1cpuのマザーなら、8Gbyte載って、メモリ代が高くて2万円以下。
ノートでも4Gbyte。ちょっと悲しいのが、4Gbyteしか載せてないと、その下のVMwareに1.5Gbyteしかあげられないことかなぁ。
合言葉は「メモリ長者でいこう」ですよ。
> なので、64bitマシンが持つ「仮想アドレス空間の広さ」を目一杯使える
のはmmapでディスク上のファイルをバシバシmapすると感じられます。これなら、実メモリやswapがなくとも感じられる。まあ、実メモリがないと快適とは程遠くなりますが。
Re:どのぐらい「使うのか」とは別に (スコア:1)
ふ…メモリがどんなに安くても、「固定費にならないように」という足かせが邪魔をするのですよ。特に液晶モニターとセットで買わないといけない場合とか。予算がそもそも足りていない場合とか。
なので、
「貧乏だと四六時中緊急時」。
(T.T)(T.T)(T.T)(T.T)(T.T)(T.T)(T.T)
fjの教祖様
クライアントか重要な業務用かによります (スコア:2, 参考になる)
最近のPCには2GB程度メモリを積んでますので、個人用PCの場合はインストーラが
要求する量のswapパーティションを作っています。インストーラが512MBを要求することが多いですかね(単なる感覚です)。
インストーラが要求しなければ0でもいいです。Out of Memoryになることも無いですし。
フロントのWebサーバとかでもそれで十分だったりします。壊れたらロードバランサから
切り離せば良いですし。
APやDBなどの重要な業務用の場合は(Solarisですが)念のため大きめに作っています。
ただ、coreadmでcoreの出力先が変えられるので昔みたいに実メモリの3倍もとることは
無くなりましたね。どれだけとるかは業務次第です。
たしか (スコア:2, 興味深い)
ものがあったからじゃなかったっけ。
したがってコアダンプをとるためにはその時点で最低、実メモリと同じ大きさの
swap 領域の空きが必要。
このため swap の大きさは コアダンプ用の大きさ + 本当に仮想メモリに使う大きさ で
結局、実メモリの2倍くらいにするという話だったと思う。
いまどきの UNIX の眷属では「swap 実メモリの2倍」という根拠はないはず。
Re:たしか (スコア:1)
Windows Server 2003、Windows XP、および Windows 2000 のメモリ ダンプ ファイル オプションの概要 [microsoft.com]
Re:たしか (スコア:2, 参考になる)
これはかなり過去(1980年代)の話ですね. 4.4BSD以降はMachの仮想記憶をベースに実装しなおされており, 実メモリ領域とスワップ領域を足したものがメモリ領域として取り扱われます. ですから今日のPC上で動くBSDは全て, その最初期から現在と同じくスワップ領域を実メモリ領域よりも小さくすることが可能でした.
Red Hatのマニュアルには (スコア:2, 参考になる)
RHEL4のインストールマニュアル[PDF] (p.32-33) [redhat.com]では、
となっています。
私はこれを読んで、M > 2 ならば「 S = 2 * 2 + (M-2) * 1 」と解釈しましたが、日本語の説明文はRHEL4とRHEL5で同じ事を言ってるようにも思います。
3GBの物理RAMの場合、どっちの式でも5になるので。。
Re:Red Hatのマニュアルには (スコア:1, すばらしい洞察)
= 4 + M - 2
= M + 2
なので「どっちの式でも」とかいう以前に同じ式です。
割と大きめにとってます。 (スコア:2, 興味深い)
RAM 2GB + SWAP 2GB の構成で Linux x64 をインストールしたときに、初めて 64 bit CPU をゲットしたうれしくてですね。malloc で 4GB 確保しようとしてメモリ不足で失敗して。それ以来多めで確保しています。
VM をたくさん起動して仕事するようになった今では、RAM 6GB + SWAP 16GB ですね。でも、RAM 容量を超えて VirtualBox の VM インスタンスを起動したらすごいことになったので、SWAP いっぱいあっても関係ないかもしれないです。
余談ですが、OS が起動しなくなったときに、とりあえず SWAP パーティションをつぶして、そこにミニマムで Linux をインストールしてレスキューするなーんて話も聞いたような気がします。今じゃこの必要もないんでしょうけど。
Re:割と大きめにとってます。 (スコア:1)
普段全然稼働していないプロセスは貴重な物理メモリより
SWAPに行って欲しいですからね。そのプロセスがまた動き出す
時はぬめーっとしますが。
OOM Killerが働くからでは? (スコア:2)
ちょっとメモリーを使いすぎただけで過敏に Out Of Memory Killer が働いてしまうから
というのが理由じゃないかな?
# 先日納品した 64GB のマシンに SAS 15krpm 72GB が2本しか入っていない...。
PCにECC Registeredメモリの利用を推奨します。
実メモリの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:実メモリの2倍の根拠ってなんだったっけ? (スコア:1, 参考になる)
それはもともとはHP-UXの仕様だから。
それに昔のSolraisも同じような仕様だった記憶が。
HP-UXはフルダンプした際にswapを利用するので最低実メモリより
多く取らないといけないと教えられましたね。今では任意にダンプ先を
指定できるのでそこまで気にしなくて良いと思いますけど。
今となってはディスク容量も気にならないでしょうから、多少多めくらいで
いいのではないかと個人的には考えています。
Re:実メモリの2倍の根拠ってなんだったっけ? (スコア:1)
[386Enh] (スコア:1)
情報ありがとうございました。
なんかつっかえていたもやもやがすっきりしました。
屍体メモ [windy.cx]
どういった場合にメリットがあるのか正直分からん。 (スコア:1)
たいていの用途でメモリ容量にもマシンパワーにも余裕があるし、
わざわざパーティション切って固定サイズのスワップ作って、
HDD別に用意するならともかく、たいしたパフォーマンスアップするでもないし。
管理の手間が無駄なだけなんじゃ?
Re:どういった場合にメリットがあるのか正直分からん。 (スコア:1)
ハードディスクを使いすぎてスワップが作れないという状況がなくなるのでは?
1を聞いて0を知れ!
Re:どういった場合にメリットがあるのか正直分からん。 (スコア:1)
ハードディスクの総容量は同じなのに別パーティションにしないと溢れて困るってのは
ユーザへの容量警告が不出来だとか、クオータまわりの設計がわるいとか、
スワップが溢れたときに致命的な挙動を起こすとか
そういった問題があるんじゃないの?
Re:どういった場合にメリットがあるのか正直分からん。 (スコア:1)
けど、どうせ使っちゃダメなら、swapを初めっから用意しとく方が簡単じゃないですか。
1を聞いて0を知れ!
OSまかせ (スコア:1, 興味深い)
今ではそんなことやってたらDVDの1枚や2枚分のメモリがあっという間に飛んでいくので
Windowsならば自動設定、Linuxならばインストーラのおすすめ設定に従っています。
ボトルネック (スコア:1, 参考になる)
ッサやメモリが飛躍的に高速になったのに比較して性能向上の緩やかな
ハードディスクは多くの場合イマドキのPCの最大のボトルネックになっ
ているため、快適なデスクトップPCとして使用するためには普段の使用
でスワップが使われることがあってはいけません。
しかしながらスワップが全くないと物理メモリを使い切ってしまった時、
殆ど何の前触れもなくメモリ不足を理由にメモリ確保が失敗する、プロセ
スがこけるといったことが起こります。最低限のスワップを用意しておく
と本当にメモリとして使える領域がなくなってしまう前に劇的にパフォー
マンスが低下し、ユーザに何かがメモリリークしているのではないか、と
いったことを疑う時間的余地を与える手段として利用することが出来ます。
これらのことからデスクトップPCとして利用するのであれば物理メモリ
の容量に関わらず256MBあるいは512MBあたりを上限にすれば十分だと思
います。
ちなみに、少なくともLinux環境ではループバックデバイスをスワップに
することが出来るので、性能を犠牲にしても膨大なメモリが必要な時だ
けスワップを追加するのは大して面倒な作業ではありません。
# ただ他のコメントで触れられている通り、Linuxのソフトウェアハ
# イバネーションを使うような場合は少なくとも物理メモリと同じサ
# イズのスワップが必要です。
Oracleインストール時に必要だったような? (スコア:1)
---- あやね @ angelic network
私は実メモリ相当 (スコア:1)
きょうび (スコア:0)
ノートはsuspend to diskしたいので大きめに切りますが・・・
Re:ふと思いついたんだが (スコア:1, 興味深い)
LinuxではPAE(物理アドレス拡張)を有効にしたカーネルを使う方がいいでしょうし、
WindowsならGavotte Ramdisk [srad.jp]のドライブにページングファイルを置くとかでしょうかね。
Gavotte Ramdiskはオーバーヘッドが大きいのか、結構重かった気がしますけど。
WindowsにRAM disk Ready boost的なものは欲しいかもしれない (スコア:1)
PAEなRAMディスクにページングファイルをおいたとしても
HDDにおいてあるページングファイルと同じように扱うため
スワップ時のもたつきは少なくなりますが、ディスクキャッシュなどは期待できないため意味はないです
それなら、メモリ全体をPAEでアクセスするようにした方がずっと効果的ですよ。
PAEのオーバーヘッドと言ってもHDDに比べると明らかにメモリの方が早いので
4GB over領域はディスクキャッシュ専用領域として扱えたら便利だと思うんですけどねぇ
Re:WindowsにRAM disk Ready boost的なものは欲しいかもしれない (スコア:1)
ただReadyBoostが動き始める前に、Gavotteが起動しないので、自動起動にはできないとか。