ページ内ジャンプ:

アレゲなニュースと雑談サイト

hayakawaによる 2008年10月04日 8時19分の掲載
個人的にはスワップなしで構築することが多くなってきましたが部門より。

あるAnonymous Coward 曰く、

本家「How Big Should My Swap Partition Be?」より

過去10年、自分より知識のある人たちに「swapにはどれだけ割り当てればいい?」と聞くと、皆同様に「RAMの2倍に設定しておいて、あとは考えなくていいよ」と答えてくれた。確かに昔は深く考えるようなことでもなかったように思う。RAMが128MBならswapは256MBにしておけばよかった。でもいま自分のノートPCに載っている4GBのRAMを考えると、8GBのswapって本当に必要?と考えてしまう。

デスクトップのswapには本当はどれ位割り当てるのがいいのだろうか?「RAMの2倍」ルールは今も当てはまるだろうか?このルール、これからもずっと有効なのだろうか?
SWAPに8GB割り当てるのに全く問題がないHD容量があればいいが、例えばUMPCのようにメモリ容量に対するHD容量があまり大きくないような場合はどのようにすればいいのだろうか?またHDではなく、SSDしかないような場合はどうだろう?/.Jの皆様のswap割り当てルールはやっぱり「RAMの2倍」でしょうか?
表示オプション しきい値:
  • manmos (29892) : 2008年10月02日 19時44分 (#1430710) 日記
    Machのようにどんどんswapfileを大きくしていく奴は別として、どうせ、swapサイズと実メモリ
    を足した分以上にメモリを使いたければswaponするしかないわけで、自分が使うであろうサイズ
    の実メモリを載せて、swapは申し訳程度でよいです。

    swapは実メモリの2倍ってのはsunos 4以前のsunosは実メモリ以下のswapだと動作しなかった時
    代の制限。

    数GByteのswapをバリバリ使うようだと、快適な動作は望めませんよね。
  • 335 (4199) <335@excite.co.jp> : 2008年10月04日 8時28分 (#1431658) 日記
    ハードディスクがいっぱいになったときに必要になるから。
  • 物理メモリと同容量〜2倍は確保するようにしてます。
    ハイバネーションで使用するので。
    --
    I'm not right, but I'm right.
    • Funayoi (3170) : 2008年10月04日 10時32分 (#1431717)
      Linuxではハイバネートするときのメモリの待避先がswapなんですよね。
      私が以前メモリを増設したときにスワップパーティションはそのままで使っていたら、ハイバネートに失敗して困ったことがありました。
      メモリの使用量がスワップパーティションの容量を超えないようにプログラムを終了したらちゃんとハイバネートできたのですが、いちいちウインドウを閉じていてはハイバネートの意味無いような…。

      というわけで、昔とは理由は違えど、今でも実メモリより多く確保しておいた方がいいと思いました。
      • Anonymous Coward : 2008年10月04日 13時26分 (#1431821)
        >Linuxではハイバネートするときのメモリの待避先がswap
        ですが、専用パーティション必須というわけでもなかったりして。
        試験運用中なLinux備忘録 [hatena.ne.jp]さんの記事になってますけど、スワップ「ファイル」にハイバネートするようにも出来ます。
        とはいえ、ちょっと手間がかかるので、私は普通にパーティション切ってます。
        容量は実メモリの1.5倍程度ですね。

        >ハイバネートに失敗して困った
        同じように、メモリ増設後にハイバネ失敗したときは、ライブCD(確かUbuntuかKnoppix)で立ち上げてパーティションエディタ(gpartedかqtparted)でスワップ領域を拡張しました。
    • 1個のコメント が現在のしきい値以下です。
  • そういうわけで、1Gのメモリを乗っけたWindowsXPマシンを利用していますが、
    スワップをゼロにしてかれこれ四年ほど運用してますが、
    ゲームにしろ、VisualStudioにしろ落ちた覚えが無いですね。
    先日、Sporeで落ちたこと以外は・・・。

    スワップを有効にしていると、実メモリが足りているのに、
    勝手にスワッピングするので、そちらのほうが重かったりします。
    なので、いい加減にPCごと買い換えることを検討しています。
    --
    賛同はACで。反論はIDで。カルマボーナスはチキン。
    • Anonymous Coward : 2008年10月04日 13時26分 (#1431823)
      > スワップを有効にしていると、実メモリが足りているのに、
      > 勝手にスワッピングするので、そちらのほうが重かったりします。

      それはXPだからです。Vistaからは、メモリに余裕があればスワッピングしないので
      大容量のメモリを本当の意味で効率よく使えます。
      具体的な例では、XPでアプリケーションを最小化すると、
      空きメモリに関係なくスワップされてしまい、ウィンドウを復帰したときに
      ハングアップに等しいディスクアクセスに見舞われることがあります。
      Vistaではこの種の現象を見ることはなくなりました。
  • ディスク上のスペース的には8Gbyte確保しています。

    64bitマシンなのに1Gbyteしかメモリがありません(会社がけちすぎるんです)。そんな環境でWiresharkで1Gbyte以上ある pcap ファイルパケット解析をする、なんて事になったらswap領域は必須です。

    『swap領域』自体はディスク上に確保しても、無駄率はたかが知れています。500Gの中の8Gなんざ2%にもならない。なので、64bitマシンが持つ「仮想アドレス空間の広さ」を目一杯使えるようにデザインするのが一番よい、と考えました。

    .

    32bitマシンの場合はAtomのチップセット以外4Gbyte以上搭載できて当たり前の状態です。この場合はマシンの仮想空間の大半は物理メモリで埋め尽くす事ができる。ならば、予算とチップセットのどちらかの限界ぎりぎりまでメモリを搭載し、swapの必要がない事が判ったらswap offで運用でも構わないと思います。緊急時用のswap領域はメインメモリの1.2倍もあれば十分でしょう。この領域は普段は使わない。緊急時にいちいちディスク領域の確保から開始する手間を省くための領域です。

    .

    こう考えると、「メモリの何倍」ではなく「全部で何バイトの記憶領域が必要なのか」で計算した方が良い/計算できる時代になったのではないか、と思います。
    --
    fjの教祖様
  • やはり使い道によるところが大きいと思います。

    最近のPCには2GB程度メモリを積んでますので、個人用PCの場合はインストーラが
    要求する量のswapパーティションを作っています。インストーラが512MBを要求することが多いですかね(単なる感覚です)。
    インストーラが要求しなければ0でもいいです。Out of Memoryになることも無いですし。

    フロントのWebサーバとかでもそれで十分だったりします。壊れたらロードバランサから
    切り離せば良いですし。

    APやDBなどの重要な業務用の場合は(Solarisですが)念のため大きめに作っています。
    ただ、coreadmでcoreの出力先が変えられるので昔みたいに実メモリの3倍もとることは
    無くなりましたね。どれだけとるかは業務次第です。
  • たしか (スコア:2, 興味深い)

    CowardDuck (25674) : 2008年10月04日 9時33分 (#1431693)
    むかしの UNIX の実装にはカーネルのコアダンプを一旦、swap 領域に作成する
    ものがあったからじゃなかったっけ。

    したがってコアダンプをとるためにはその時点で最低、実メモリと同じ大きさの
    swap 領域の空きが必要。

    このため swap の大きさは コアダンプ用の大きさ + 本当に仮想メモリに使う大きさ で
    結局、実メモリの2倍くらいにするという話だったと思う。

    いまどきの UNIX の眷属では「swap 実メモリの2倍」という根拠はないはず。
    • Re:たしか (スコア:2, 参考になる)

      SteppingWind (2654) : 2008年10月04日 13時59分 (#1431858)

      BSD系は実メモリーが特殊な状態で、swapの方が本当の作業領域という発想だったと思う。 swapを実メモリー以下に設定すると全メモリーがswapのサイズになっていました。

      これはかなり過去(1980年代)の話ですね. 4.4BSD以降はMachの仮想記憶をベースに実装しなおされており, 実メモリ領域とスワップ領域を足したものがメモリ領域として取り扱われます. ですから今日のPC上で動くBSDは全て, その最初期から現在と同じくスワップ領域を実メモリ領域よりも小さくすることが可能でした.

    • 3個のコメント が現在のしきい値以下です。
  • Anonymous Coward : 2008年10月04日 10時52分 (#1431727)
    Red Hat (RHEL5) のインストールマニュアル [redhat.com]には

    Swap は 2 GB までの物理 RAM サイズまでは、その物理 RAM の二倍に等しい量にして、 2 GB 以上の物理 RAM では、その増加分と同等の量を追加します。しかし決して 32 MB 以下 であってはいけません。

    次のようになります:

    M = RAM の GB 数 として、S = swap の GB 数とすると、

    M < 2 ならば
    S = M *2
    その他
    S = M + 2

    この方式を使うと、2 GB の物理 RAM があるシステムには 4 GB の swap となり、3 GB の物理 RAM があるシステムには 5 GB の swap となります。大きな領域の swap パーティションを作成するとあとで RAM をアップグレードすることがある場合、特に役立ちます。

    かなり規模の大きい RAM (32 GB 以上)があるシステムの場合、小さめの swap パーティションでも構いません(物理 RAM x1 、またはそれ以下くらい)。
    となってますね。

    RHEL4のインストールマニュアル[PDF] (p.32-33) [redhat.com]では、

    Swap の大きさは、2GBの物理RAMまではx2 (2倍)に、2GBを越える容量分はx1 (1倍)にしてください。ただし、必ず32MB以上にします。
    この方式を使うと、2GBの物理RAMがあるシステムには4GBのswapとなり、3GBの物理RAMがあるシステムには5GBのswapとなります。大きな領域のswapパーティションを作成するとあとでRAMをアップグレードすることがある場合、特に役立ちます。
    となっています。
    私はこれを読んで、M > 2 ならば「 S = 2 * 2 + (M-2) * 1 」と解釈しましたが、日本語の説明文はRHEL4とRHEL5で同じ事を言ってるようにも思います。
    3GBの物理RAMの場合、どっちの式でも5になるので。。
  • mer (347) : 2008年10月04日 11時04分 (#1431732) ホームページ
    メモリや HDD がこれだけ安くなると swap とかとらなくていいかなあ、小さくていいかなあと思ってたんですが。

    RAM 2GB + SWAP 2GB の構成で Linux x64 をインストールしたときに、初めて 64 bit CPU をゲットしたうれしくてですね。malloc で 4GB 確保しようとしてメモリ不足で失敗して。それ以来多めで確保しています。

    VM をたくさん起動して仕事するようになった今では、RAM 6GB + SWAP 16GB ですね。でも、RAM 容量を超えて VirtualBox の VM インスタンスを起動したらすごいことになったので、SWAP いっぱいあっても関係ないかもしれないです。

    余談ですが、OS が起動しなくなったときに、とりあえず SWAP パーティションをつぶして、そこにミニマムで Linux をインストールしてレスキューするなーんて話も聞いたような気がします。今じゃこの必要もないんでしょうけど。
  • スワップ領域を用意せず、実メモリーだけで動かそうとすると
    ちょっとメモリーを使いすぎただけで過敏に Out Of Memory Killer が働いてしまうから
    というのが理由じゃないかな?

    # 先日納品した 64GB のマシンに SAS 15krpm 72GB が2本しか入っていない...。
    --
    PCにECC Registeredメモリの利用を推奨します。
  • そもそも「スワップファイルは実メモリの2倍、約束な!」
    の根拠ってなんだったんでしたっけ?

    また、同様にWindows 98使ってたころは
    「Windowsのスワップファイルは実メモリの3倍、約束な!」
    っていわれた記憶もあります。

    なんかそれぞれのOSのページングのアルゴリズムに
    依拠した数字なんでしたっけ?
    --
    ペーストビン [windy.cx]
    • FreeBSDのオンラインマニュアルを見たときに「仮想記憶ページングのアルゴリズムがメインメモリ2倍以上あるときにうまく動くようにチューニングしてある」と書いてあり、それ以来2倍ですね。ほかのOSではチューニングの方向性が違うかも知れませんが。

      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.
      (引用元: FreeBSD man page tuning(7) [freebsd.org])
    • おそらく、「2倍以上のスワップ領域を用意しても、それを活用するような事態はとてつもなく性能が悪化した事態だから考慮しなくてよし」ではないかと想像します。 つまり、OSのページングアルゴリズムではなく、プロセスのワーキングセットの大きさの特性からではないかと。

      僕が物心ついた頃、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はたくさん使ってました。

    • 1個のコメント が現在のしきい値以下です。
  • いまどきスワップ領域なんてわざわざ作らないしサイズは自動でしょう。
    たいていの用途でメモリ容量にもマシンパワーにも余裕があるし、
    わざわざパーティション切って固定サイズのスワップ作って、
    HDD別に用意するならともかく、たいしたパフォーマンスアップするでもないし。
    管理の手間が無駄なだけなんじゃ?
  • OSまかせ (スコア:1, 興味深い)

    Anonymous Coward : 2008年10月04日 9時01分 (#1431679)
    昔は手動でRAMの2倍に固定してたもんですが、
    今ではそんなことやってたらDVDの1枚や2枚分のメモリがあっという間に飛んでいくので
    Windowsならば自動設定、Linuxならばインストーラのおすすめ設定に従っています。
  • ボトルネック (スコア:1, 参考になる)

    Anonymous Coward : 2008年10月04日 13時57分 (#1431857)
    スワップの必要性はシステムの用途によって変わってきますが、プロセ
    ッサやメモリが飛躍的に高速になったのに比較して性能向上の緩やかな
    ハードディスクは多くの場合イマドキのPCの最大のボトルネックになっ
    ているため、快適なデスクトップPCとして使用するためには普段の使用
    でスワップが使われることがあってはいけません。

    しかしながらスワップが全くないと物理メモリを使い切ってしまった時、
    殆ど何の前触れもなくメモリ不足を理由にメモリ確保が失敗する、プロセ
    スがこけるといったことが起こります。最低限のスワップを用意しておく
    と本当にメモリとして使える領域がなくなってしまう前に劇的にパフォー
    マンスが低下し、ユーザに何かがメモリリークしているのではないか、と
    いったことを疑う時間的余地を与える手段として利用することが出来ます。

    これらのことからデスクトップPCとして利用するのであれば物理メモリ
    の容量に関わらず256MBあるいは512MBあたりを上限にすれば十分だと思
    います。

    ちなみに、少なくともLinux環境ではループバックデバイスをスワップに
    することが出来るので、性能を犠牲にしても膨大なメモリが必要な時だ
    けスワップを追加するのは大して面倒な作業ではありません。

    # ただ他のコメントで触れられている通り、Linuxのソフトウェアハ
    # イバネーションを使うような場合は少なくとも物理メモリと同じサ
    # イズのスワップが必要です。
  • 10gだったと思いますが、Oracleのインストール時にメモリと同量のスワップを求められた覚えがあります。 メモリあるから少なくていいやーと思っていたら、インストーラーが立ち上がらなかった記憶が……
    --
    ---- あやね @ angelic network
  • 私は実メモリ分しかSWAPを設けてません。 かつてはメモリの2,3倍設けてましたが、これだけ大容量メモリになると SWAPアウトすることは無いでしょうし、 SWAPアウトした時点で×なのではないでしょうか?
  • Anonymous Coward : 2008年10月04日 13時39分 (#1431839)
    swapからはみ出したらプロセスが落ちるんじゃないでしょうか?(笑)

    LinuxではPAE(物理アドレス拡張)を有効にしたカーネルを使う方がいいでしょうし、
    WindowsならGavotte Ramdisk [slashdot.jp]のドライブにページングファイルを置くとかでしょうかね。

    Gavotte Ramdiskはオーバーヘッドが大きいのか、結構重かった気がしますけど。
  • 12個のコメント が現在のしきい値以下です。