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

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

Linux システムをセットアップする場合、スワップ領域を物理メモリの 2 倍の大きさに設定することが一般的に推奨されます。なぜこれが必要なのか、また、この推奨がどのようにして生まれたのかを知りたいです。

答え1

簡単に答えると、「持っているに"。

カーネル/システムの種類によっては、スワップ領域のサイズをこのように設定することが理にかなっている場合があります。たとえば、FreeBSDのチューニング(7)man ページには、スワップ サイズが物理メモリ サイズの少なくとも 2 倍である理由として次のことが示されています。

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

割り当てるスワップ領域の量や割り当てる場所などを決定する際には、他の要因も重要になる場合があります。たとえば、128 GB の物理メモリを搭載した大規模なサーバーをインストールする場合、決して使用されない 256 GB のディスク領域をスワップ用に事前割り当てすることは避けた方がよいでしょう。

一方、いくつかの多くの場合、スワップ領域によってカーネル ダンプを取得できるようになります (OpenBSD、NetBSD、FreeBSD など)。したがって、パニック時に完全なカーネル ダンプを取得できるだけのスワップ領域を少なくとも確保しておくことをお勧めします。

絶対的なルールはない全てケースごとに異なります。特定のシステムの動作について読み、それがどのように機能するかを学び、システムの意図された使用法を考え、それに合った最適なスワップスペースのサイズを決定する必要があります。あなたのニーズ。

答え2

まったく必要ありません。Windows の古いバージョンでは、割り当てられたメモリの各ページを基本的にスワップ ファイル上の mmap として扱っていたため、スワップを有効にするには、少なくとも物理 RAM の合計サイズが必要でした。これは現在では当てはまらず、Linux では当てはまりませんでしたが、噂は根強く残っています。

ただし、少なくとも RAM と同じ量のスワップが望ましい場合があります。それは、休止状態です。Linux は休止状態 (別名、ディスクへのサスペンド) にスワップ ファイルを使用するため、RAM 内のすべてのデータと、すでにスワップ アウトされたすべてのデータ (キャッシュ RAM を除く) を保持できる十分なスワップが必要です。もちろん、これはラップトップなど、休止状態が必要なマシンにのみ当てはまります。

最後に、スワップが多すぎると、悪い他の人が何を言おうと、これは重要なことです。考えてみてください。RAM が 4G あり、さらに 8G のスワップが必要な場合、ディスクとの間でスワップが行われているにもかかわらず、システムがまだ使用可能だと思いますか? メモリが不足したときにメモリを大量に消費するプロセスをすぐに終了する方が、スワップとの間でデータのやり取りにすべての時間を費やし、システム全体が使用できないレベルまで遅くなるよりも、多くの場合は良いことです。

答え3

昔、一般的な UNIX の変種 (BSD だったと思うのですが、今は参照先が見つかりません) があり、すべての仮想メモリ ページをスワップ スペースに割り当てていました。そのため、RAM と同じ量のスワップがあったとしても、仮想メモリのサイズは RAM と同じままでした。当時の一般的な推奨事項は、RAM の 2 倍のスワップを用意することで、仮想メモリは RAM の 2 倍の大きさになりました。

最近の unice はそのような動作をしないので、このルールの根拠は時代遅れです (1992 年にはすでに時代遅れだったと思うので、Linux には関係がなかった)。しかし、奇妙なことにこのルールは生き残りました。現在このルールに従うと、RAM の 3 倍の仮想メモリが得られますが、当初の意図は 2 倍のメモリを得ることでした。

このルールの歴史的な理由が間違っているからといって、それが愚かだというわけではありません。ディスク スペースは安価になったため、スワップをさらに割り当てるのは理にかなっています。必要なスワップの量は、RAM の量とその使用方法に大きく依存します。スワップなしでシステムを実行することもできますが、RAM がいっぱいになった場合に終了するプログラムを選択する機会がなくなり、システムが遅くなる可能性があります (RAM をキャッシュに使用し、一部のプログラム メモリをスワップする方がよい場合もあります)。スワップを割り当てすぎると、わずかな量の RAM (カーネル データ構造用) と、もちろんディスク スペース (ただし、今日では SSD を除いてディスク スペースは通常非常に安価です) が必要になります。休止状態にするには、すべての仮想メモリを収容できる十分なスワップが必要です。

答え4

一般的なシステム メモリ容量、メモリ バス速度とディスク速度、プロセスがさまざまな待機状態で費やす時間の割合に関する仮定に基づく古い推奨事項です。最近では、スワップ領域に物理メモリの半分以上 (メモリをほぼ完全に使用して実行しているときにランダムな OOM による強制終了を防ぐのに十分な量) が必要になるかどうかは疑問です。ただし、一般的なワークロード (YMMV) などに完全に依存します。

関連情報