はい。
あなたは、ほとんど間違いなく必要があり、常にスワップは非常に説得力のある、禁止の理由(のような、いないディスクでは、すべての、または唯一のネットワークディスクの存在)がある場合を除き、有効になっています。頻繁に推奨されるとんでもないサイズ(RAMの2倍など)の順序でスワップする必要がありますか?まあ、いいえ。
その理由は、スワップは、アプリケーションが物理RAMよりも多くのメモリを消費する場合に役立つだけではないということです(実際、その場合、スワップはパフォーマンスに深刻な影響を与えるため、まったく役に立ちません)。最近のスワップの主な動機は、16GiBのRAMを魔法のように32 GiBに変えるのではなく、インストールされた利用可能なRAMをより効率的に使用することです。
現代のコンピューターでは、RAMは未使用になりません。未使用のRAMは、代わりにお金を購入して節約できなかったものです。したがって、ロードしたものやメモリマップされたもの、後からだれかが再利用できる可能性のあるもの(セキュリティの制約により制限されるもの)はすべてキャッシュされます。マシンの起動後すぐに、すべての物理RAMが何かに使用されます。
オペレーティングシステムに新しいメモリページを要求するたびに、メモリマネージャは知識に基づいた決定を下す必要があります。
- バッファキャッシュからページを削除する
- マッピングからページを削除します(ほとんどのシステムで実質的に#1と同じです)
- 長時間アクセスされていない(できれば決して)ページをスワップに移動します(これは実際には、最後の瞬間ではなく、積極的に行われることもあります)
- プロセスを強制終了するか、ランダムプロセスを強制終了します(OOM)
- カーネルパニック
オプション#4と#5は非常に望ましくなく、オペレーティングシステムに他の選択肢がない場合にのみ発生します。オプション#1と#2は、すぐに必要になる可能性のあるものを捨てることを意味します。これはパフォーマンスに悪影響を及ぼします。
オプション#3は、(おそらく)すぐに時間を必要としないものを、遅いストレージに移動することを意味します。必要なものが高速RAMを使用できるようになったため、これで問題ありません。
オプション#3を削除することにより、オペレーティングシステムを実質的に#1または#2のいずれかに制限しました。ディスクからページをリロードすることは、スワップからリロードすることと同じですが、通常はスワップからリロードする必要が少なくなります(適切なページング決定を行うため)。
つまり、スワップを無効にしても何も得られませんが、メモリリクエストを処理する際のオペレーティングシステムの有用なオプションの数は制限されます。それはそうではないかもしれませんが、非常に恐らく不利な可能性があります(そして、決して有利になることはありません)。
[編集]
mmap
マンページ、特にの説明を注意深く読むと、MAP_NORESERVE
「十分な」物理メモリを備えたシステム上でもスワップが必要な別の理由がわかります。
「スワップ領域が予約されていない場合、使用可能な物理メモリがない場合、書き込み時にSIGSEGVを取得する可能性があります。」
-ちょっと待って、それはどういう意味ですか?
ファイルをマップする場合、ファイルの内容に、プログラムのアドレス空間で何らかの方法で魔法のように直接アクセスできます。読み取り専用アクセスの場合、オペレーティングシステムは原則として、異なる仮想ページにアクセスするたびに異なるデータを再配置できる物理メモリの1ページのみを必要とします(効率上の理由から、もちろんそれは行われませんが、原則として、物理メモリの1ページでテラバイト相当のデータにアクセスできます)。さて、もしあなたもファイルマッピングに書き込みますか?この場合、オペレーティングシステムには、書き込みページごとに物理ページ(またはスワップスペース)が用意されている必要があります。ダーティページライトバックプロセスが処理を完了するまで(数秒かかる場合があります)、データを保持する他の方法はありません。このため、OSはスワップスペースを予約します(必ずしもコミットする必要はありません)。したがって、未使用の物理ページが存在しないときにマッピングに書き込みを行う場合(これは非常に可能性の高い通常の状態)、再保証それはまだ動作すること。
スワップがない場合はどうなりますか?これはスワップを予約できないことを意味します(duh!)。これは、空き物理ページがなくなり、ページに書き込みを行うとすぐに、プロセスを受け取るという形で嬉しい驚きが得られることを意味します。セグメンテーションフォールト、おそらく殺されている。
[/編集]
ただし、RAMの2倍のサイズのスワップを作成するという従来の推奨事項は無意味です。ディスク容量は安価ですが、それほど多くのスワップを割り当てることは意味がありません。安価なものを無駄にすることは依然として無駄であり、数百メガバイト(またはそれ以上)のサイズのワーキングセットを継続的に交換することは絶対に望まないでしょう。
単一の「正しい」スワップサイズはありません(ユーザーや意見があるだけの「正しい」サイズがあります)。私は通常、RAMサイズに関係なく、固定の512MiBを割り当てます。これは非常にうまく機能します。その背後にある理由は、512MiBは小さなディスクであっても、今日では常に余裕があるということです。一方、数ギガバイトのスワップを追加することは、ましです。何かがひどく間違っている場合を除いて、それらを使用するつもりはありません。
SSDでも、スワップはRAMよりも桁違いに遅く(バスの帯域幅と遅延のため)、おそらく再び必要とされないものをスワップに移動することは非常に許容できます(つまり、ほとんど必要ないでしょう)再度スワップインするので、使用可能なページのプールが効果的に無料で拡大されます)、かなりの量のスワップが本当に必要な場合(つまり、たとえば50GiBデータセットを使用するアプリケーションがある場合)、ほとんど失われます。
コンピューターがギガバイト相当のページのスワップインとスワップアウトを開始すると、すべてがクロールされます。したがって、ほとんどの人(私を含む)にとってこれはオプションではないため、それほど多くのスワップを持つことは意味がありません。