GNU/Linux >> Linux の 問題 >  >> Linux

十分な量のRAMがある場合、スワップスペースが必要ですか?

私が理解していることから、スワップの目的 Linuxのパーティションは、RAMから「あまり頻繁にアクセスされない」情報を解放し、それをハードドライブの特定のパーティションに移動することです(読み取りまたは書き込みが遅くなるという犠牲を払って)。 「高速メモリ」。

これは、RAMが少量のマシンを使用していて、不足した場合に問題が発生したくない場合に最適です。ただし、システムに 16 GBがある場合 または32GB RAMを使用し、StackExchange用のMySQLデータベースを実行していない、またはLinuxで1080pのフルレングスの映画を編集していないと仮定すると、スワップパーティションを使用する必要がありますか?

承認された回答:

はい。

あなたは間違いなく常にすべきです 非常に説得力のある禁止理由がある場合を除いて、スワップを有効にします(ディスクがまったくない、またはネットワークディスクのみが存在するなど)。よく推奨されるばかげたサイズ(RAMの2倍の量など)のオーダーでスワップする必要がありますか?ええと、いいえ

その理由は、アプリケーションが物理RAMよりも多くのメモリを消費する場合にのみスワップが役立つわけではないためです(実際、その場合、スワップはあまり役に立ちません。 パフォーマンスに深刻な影響を与えるためです)。最近のスワップの主なインセンティブはではない 16GiBのRAMを魔法のように32GiBに変換しますが、インストールされている利用可能なRAMをより効率的に使用します。

最近のコンピューターでは、RAMは未使用になりません。未使用のRAMは、代わりにお金を購入して節約することもできなかったものです。したがって、ロードするもの、またはメモリマップされているもの、可能性がある 後で誰でも再利用できます(セキュリティ上の制約により制限されます)。マシンが起動した直後に、すべての物理RAMが何かに使用されます。 。

オペレーティングシステムから新しいメモリページを要求するときはいつでも、メモリマネージャは知識に基づいた決定を下さなければなりません:

  1. バッファキャッシュからページを削除します
  2. マッピングからページを削除します(ほとんどのシステムでは、実質的に#1と同じです)
  3. 長期間アクセスされていないページ(できれば決してアクセスされていないページ)をスワップに移動します(これは実際には積極的に発生する可能性がありますが、必ずしも最後の瞬間である必要はありません)
  4. プロセスを強制終了するか、ランダムプロセス(OOM)を強制終了します
  5. カーネルパニック

オプション#4と#5は非常に望ましくない そして、オペレーティングシステムに他の選択肢がまったくない場合にのみ発生します。オプション#1と#2は、すぐにまた必要になる可能性のあるものを捨てることを意味します。これはパフォーマンスに悪影響を及ぼします。

オプション#3は、(おそらく)すぐに必要のないものを低速のストレージに移動することを意味します。今あなたが必要とする何かがあるので、それは問題ありません 高速RAMを使用できます。

オプション#3を削除することにより、オペレーティングシステムを#1または#2のいずれかに効果的に制限できます。ディスクからページをリロードすることは、スワップからページをリロードすることと同じですが、通常、スワップからリロードする必要はほとんどありません(適切なページング決定を行うため)。

つまり、スワップを無効にしても何も得られませんが、メモリ要求を処理する際のオペレーティングシステムの便利なオプションの数が制限されます。 そうではないかもしれない 、しかしおそらくかもしれない 不利な点(そして決して有利になることはありません)。

関連:電気–スペースヒーターをコンセントに接続しましたが、コンセントが機能しなくなりました。まだ電源が入っていますか?

[編集]

mmapの注意深い読者 マンページ、具体的にはMAP_NORESERVEの説明 、「十分な」物理メモリを備えたシステムでもスワップがいくらか必要である別の正当な理由に気付くでしょう:

「スワップスペースが予約されていない場合、使用可能な物理メモリがない場合、書き込み時にSIGSEGVが発生する可能性があります。」

—ちょっと待ってください、それはどういう意味ですか?

ファイルをマップすると、ファイルがプログラムのアドレス空間にあるかのように、魔法のようにファイルの内容に直接アクセスできます。読み取り専用アクセスの場合、オペレーティングシステムには原則が必要です。 異なる仮想ページにアクセスするたびに異なるデータを再入力できる物理メモリの1ページのみ(効率上の理由から、もちろんそれは行われていませんが、原則として、1つのページでテラバイト相当のデータにアクセスできます)物理メモリのページ)。 また ファイルマッピングに書き込みますか?この場合、オペレーティングシステムには、書き込まれるすべてのページに対応できる物理ページ(またはスワップスペース)が必要です。ダーティページのライトバックプロセスが完了するまで(数秒かかる場合があります)、データを保持する方法は他にありません。このため、OSはスワップスペースを予約します(ただし、必ずしもコミットする必要はありません)。したがって、未使用の物理ページがないときにマッピングに書き込んでいる場合(これは非常に可能であり、通常の状態です)、再保証 それでも機能します。

スワップがない場合はどうなりますか?これは、スワップを予​​約できないことを意味します(duh!)。これは、空きの物理ページがなくなるとすぐに、ページに書き込みを行うと、プロセスが受信するという形で嬉しい驚きを感じることを意味します。セグメンテーション違反、おそらく殺されている。

[/ EDIT]

ただし、RAMの2倍のサイズのスワップを作成するという従来の推奨事項は無意味です。ディスクスペースは安価ですが、それほど多くのスワップを割り当てることは意味がありません。安いものを無駄にすることはまだ無駄であり、あなたは絶対に望んでいません サイズが数百メガバイト(またはそれ以上)の作業セットを継続的に交換する必要があります。

単一の「正しい」はありません スワップサイズ(ユーザーや意見と同じ数の「正しい」サイズがあります)。私は通常、RAMサイズに関係なく、固定の512MiBを割り当てます。これは、私にとって非常にうまく機能します。その背後にある理由は、512MiBは常にできるものであるということです。 小さなディスクでも、今日は余裕があります。一方、数ギガバイトのスワップを追加することは、これ以上のことではありません。何か深刻な問題が発生している場合を除いて、それらを使用することはありません。

SSDでも、スワップはRAMよりも桁違いに遅く(バスの帯域幅と遅延のため)、非常に許容できる 本当に必要の場合、おそらく再び必要とされないものを交換するために移動する(つまり、おそらく再び交換することはないので、利用可能なページのプールは効果的に無料で拡大されます)。>> かなりの量のスワップ(つまり、50GiBデータセットを使用するアプリケーションがある場合)では、ほとんど失われます。

関連:クロールスペースには通気が必要ですか?

コンピュータがギガバイト相当のページのスワップインとスワップアウトを開始すると、すべてがクロールされます。したがって、ほとんどの人(私を含む)にとって、これはオプションではありません。したがって、それほど多くのスワップを行うことは意味がありません。


Linux
  1. Dfによると、Duよりも20g多くのディスクスペースが使用されています。なぜ??

  2. XubuntuはWindowsXPよりも多くのリソースを必要としますか?

  3. クラウドサーバーのスペースを交換する

  1. Ubuntu 22.04 でスワップ領域を追加する方法

  2. Linux でスワップ領域を追加する方法

  3. 実行中のすべてのアプリケーションをスワップ領域から RAM に再ロードする方法は?

  1. 特定の数を超える特殊文字を含む行をgrepする方法

  2. GCC をインストールするための十分なスペースがない場合、Linux 用に何かをコンパイルするにはどうすればよいですか?

  3. ~/.ssh/config ファイルを複数持つことはできますか?