スワップスペースを物理メモリの2倍に設定する必要があるのはなぜですか?


11

Linuxシステムをセットアップする場合、物理メモリの2倍のスワップスペースを設定するという一般的な提案があります。なぜこれが必要なのか、そしてこの提案がどのようになるのか知りたいのですが。

回答:


8

簡単に言え、「する必要はありません」です。

カーネル/システムのタイプによっては、そのようにスワップスペースのサイズを設定することが理にかなっている場合があります。たとえば、FreeBSDのTuning(7)マンページでは、物理メモリサイズの少なくとも2倍のスワップサイズの背後に次の根拠があることがわかります。

通常、RAMが2GB未満のシステムでは、スワップスペースのサイズをメインメモリの約2倍、またはメモリが多い場合はメインメモリの約1倍にする必要があります。ただし、RAMが不足している場合は、通常、より多くのスワップが必要になります。システムで256M未満のスワップを構成することはお勧めできません。スワップパーティションのサイズを決定するときは、将来のメモリ拡張に留意する必要があります。カーネルのVMページングアルゴリズムは、メインメモリに対して少なくとも2倍のスワップがある場合に最高のパフォーマンスを発揮するように調整されています。構成するスワップが少なすぎると、VMページのスキャンコードが非効率になるだけでなく、後でマシンにメモリを追加した場合に問題が発生する可能性があります。最後に、複数のSCSIディスク(または異なるコントローラで動作する複数のIDEディスク)を備えた大規模システムでは、各ドライブでスワップを構成することを強くお勧めします。ドライブのスワップパーティションは、ほぼ同じサイズにする必要があります。カーネルは任意のサイズを処理できますが、内部データ構造は最大のスワップパーティションの4倍に拡張されます。スワップパーティションをほぼ同じサイズに保つと、カーネルはスワップスペースをN個のディスク間で最適にストライプ化できます。少しやりすぎて心配する必要はありません。スワップスペースはUNIXの節約になるため、通常はあまりスワップを使用しない場合でも、強制的に再起動する前に暴走したプログラムから回復するための時間を確保できます。スワップパーティションをほぼ同じサイズに保つと、カーネルはスワップスペースをN個のディスク間で最適にストライプ化できます。少しやりすぎて心配する必要はありません。スワップスペースはUNIXの節約になるため、通常はあまりスワップを使用しない場合でも、強制的に再起動する前に暴走したプログラムから回復するための時間を確保できます。スワップパーティションをほぼ同じサイズに保つと、カーネルはスワップスペースをN個のディスク間で最適にストライプ化できます。少しやりすぎて心配する必要はありません。スワップスペースはUNIXの節約になるため、通常はあまりスワップを使用しない場合でも、強制的に再起動する前に暴走したプログラムから回復するための時間を確保できます。

割り当てるスワップ領域の量や、割り当てる場所などを決定するときに、他の要素が重要になる場合があります。たとえば、128 GBの物理メモリを備えた大規模なサーバーをインストールする場合、使用しないスワップに256 GBのディスク領域を事前に割り当てることを避けることをお勧めします。

一方、持ついくつかのスワップ領域は、多くの場合、グラブカーネルダンプ(例えばオープン、のNet-とFreeBSDで)することが可能となります。そのため、パニック時に完全なカーネルダンプを取得するのに少なくとも十分なスワップ領域を確保することをお勧めします。

すべてのケースに当てはまる絶対的なルールはありません。特定のシステムの動作について読んで、それがどのように機能するかを学び、システムの使用目的について考えニーズに合った最適なスワップ領域のサイズを決定する必要があります。


5

まったく必要はありません。古いバージョンのウィンドウでは、割り当てられたメモリの各ページが基本的にスワップファイルのmmapとして扱われるため、少なくともスワップの物理RAMの合計サイズが必要でした。 Linuxの場合ですが、噂は続いています。

ただし、RAMと同じかそれ以上のスワップが望ましい場合があります-ハイバネーション。Linuxはハイバネーション(別名、suspend-to-disk)のためにスワップファイルを使用するため、RAM内のすべてのデータと、すでにスワップアウトされたすべてのデータ(マイナスキャッシュRAM)を保持するのに十分なスワップが必要です。もちろん、これはラップトップなどの休止状態が必要なマシンの場合にのみ当てはまります。

最後に、他の人が言うかもしれないにもかかわらず、スワップが多すぎることは悪いことです。考えてみてください。4GのRAMがあり、さらに8Gのスワップが必要な場合でも、システムは引き続き使用できると思いますか。ディスクとの間のすべてのスワッピングで何が行われているのでしょうか。多くの場合、スワップに出入りするデータのマーシャリングにすべての時間を費やし始めたときにシステム全体が使用不能なレベルまで遅くなるのではなく、メモリ不足になったときにすぐにメモリを消費するプロセスを強制終了する方が適切です。


1

ずっと前に、すべての仮想メモリページをスワップスペースに割り当てる一般的なUNIXのバリアント(BSDだと思いますが、現時点では参照を見つけることができません)がありました。したがって、RAMと同じくらいのスワップがある場合でも、仮想メモリのサイズはRAMと同じです。通常の推奨は、RAMの2倍のスワップを使用することでした。これにより、仮想メモリはRAMの2倍の大きさになります。

現代のunicesはそのように動作しないので、ルールの理由は時代遅れです(私はそれが1992年にすでに時代遅れだったと思うので、それはLinuxには関係がありませんでした)。しかし、奇妙なことにルールは生き残った。今に従うと、RAMの3倍の仮想メモリが得られますが、本来の目的は2倍にすることでした。

ルールの背後にある歴史的な理由が間違っているからといって、それが愚かであるとは限らない。ディスク領域が安価になったため、より多くのスワップを割り当てることは理にかなっています。必要なスワップの量は、RAMの量とその使用方法に大きく依存します。スワップなしでシステムを実行できますが、RAMがいっぱいになった場合にどのプログラムを強制終了するかを選択する機会がなく、システムが遅くなる場合があります(キャッシュにRAMを使用し、プログラムメモリをスワップする方が良い場合があります)アウト)。余りにも多くのスワップを割り当てると、少量のRAM(カーネルデータ構造の場合)ともちろんディスク容量(ただし、現在のところ、SSDを除いて通常はそれで十分安い)がかかります。休止状態にする場合は、すべての仮想メモリに適合する十分なスワップが必要です。


Windowsもそれを行います:メモリマネージャーに十分なスワップ領域がある場合、メモリ内にあるページのコピーも保持されます(おそらく、最も変更されていないページから開始します)。メモリからページを投げ捨てることによって。
pqnet 2014

0

典型的なシステムメモリ容量、メモリバス速度とディスク速度、およびプロセスがさまざまな待機状態で費やす時間の割合に関する仮定に基づく古代の推奨事項。最近、スワップスペースにおそらく1/2を超える物理メモリを必要とするのではないかと思っています。ただし、典型的なワークロード、YMMVなどに完全に依存します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.