私が理解する限り、これを行う目的は交換Linuxでは、パーティション化はRAMから「頻繁にアクセスしない」いくつかの情報を取得し、それをハードドライブの特定のパーティションに移動することです(読み取りまたは書き込みが遅い)。デフォルトでは、アクティブアプリケーションはより多くのアクセスを許可します。 「高速メモリ」を使用。
これは、メモリが少ないコンピュータを使用し、メモリが不足しても問題が発生したくない場合に便利です。しかし、システムでは16ギガバイトまたは32GBRAM、およびStackExchange用のMySQLデータベースを実行しない場合、またはLinuxで1080pフルレングスムービーを編集しないと仮定すると、スワップパーティションを使用する必要がありますか?
答え1
はい。
君は必ずそうしなければならないいつも非常に説得力のある禁止理由がない限り(ディスクがまったくない場合やネットワークディスクのみがある場合)、スワップを有効にします。多くの場合、推奨されるとんでもないサイズ(RAMのサイズの2倍)に置き換える必要がありますか?素晴らしい、いいえ。
その理由は、アプリケーションが物理RAMよりも多くのメモリを消費している場合にのみスワッピングが役に立たないためです(実際、この場合はスワッピングが便利です)。あまり役に立たないパフォーマンスに深刻な影響を与えるからです。) 今日の交換の主な動機は次のとおりです。いいえ16GiB RAMを32GiBに魔法のように変えますが、搭載されたRAMをより効率的に活用できます。
最新のコンピュータでは、RAMは決してアイドル状態になりません。未使用のRAMは購入せずにお金を節約する方が良いです。したがって、ロードするすべてのもの、またはメモリにマップされたすべてのもの、すべての可能性可能キャッシュされたコンテンツは、将来(セキュリティ制約に応じて)いつでも誰でも再利用できます。マシンが起動した直後、すべての物理RAMが使用されます。何。
オペレーティングシステムが新しいメモリページを要求するたびに、メモリ管理者は情報に基づいて決定を下す必要があります。
- バッファキャッシュからページを消去する
- マップからページを消去する(実際にはほとんどのシステムでは#1と同じ)
- 長い間訪問していない(できれば)ページを交換に移動します(実際には事前に発生する可能性がありますが、必ずしも最後の瞬間に発生する必要はありません)。
- プロセスを終了するか、任意のプロセスを終了します(OOM)。
- カーネルパニック
オプション#4と#5は次のとおりです。非常に人気がないそして、これはオペレーティングシステムに選択肢がない場合にのみ発生します。オプション#1と#2はすぐに再び必要なものを捨てることを意味します。これはパフォーマンスに悪影響を及ぼす可能性があります。
オプション#3は、保存速度を遅くするために短期的に不要なアイテムを移動することを意味します。それは問題ではありません。だから今本当に必要だった高速RAMを使用できます。
オプション#3を削除すると、オペレーティングシステムが#1または#2を実行できないように効果的に制限できます。ディスクからページを再ロードすることは、スワップからページを再ロードするのと同じです。ただし、スワップから再ロードする可能性は一般的に少ないです(正しいページング決定が下されるため)。
つまり、スワップを無効にすると、オペレーティングシステムがメモリ要求を処理するときに持つ有用なオプションの数を制限する以外には何も得られません。どのおそらくしかし、その可能性が非常に高いおそらく欠点(そして決して強みではない)。
[編集する]
注意深い読者mmap
マンページ特に、MAP_NORESERVE
「十分な」物理メモリを備えたシステムでも、交換が不可欠である他の妥当な理由を指摘することができます。
「スワップ領域が予約されていない場合に物理メモリが利用できない場合は、書き込み時にSIGSEGVを受信できます。」
——ちょっと待って、これはどういう意味ですか?
ファイルをマッピングすると、ファイルがマジックのようにプログラムのアドレス空間にあるかのようにファイルの内容に直接アクセスできます。読み取り専用アクセスの場合は、オペレーティングシステムに次のものが必要です。原則として異なる仮想ページにアクセスするたびに別のデータで埋め戻すことができる物理メモリの単一ページ)。今返品ファイルマッピングに書きますか?この場合、オペレーティングシステムには、記録される各ページに対して準備された物理ページ(またはスワップスペース)が必要です。ダーティページ書き込み保存プロセスが操作を完了するまで(数秒かかることがある)、データを保存する他の方法はありません。したがって、OSはスワップスペースを予約しますが(必ずしもコミットしません)、マップに作成中で未使用の物理ページがない場合(非常に可能で一般的なシナリオ)、おおよそ次のようになります。保証するそれでも動作します。
今交換がなければどうなりますか?つまり、スワッピングを保存できないという意味です。つまり、空き物理ページが残っておらず、ページに書き込んでいると、それを受信するプロセスの形で予期しない分割エラーが発生し、終了する可能性があります。 。
[/編集する]
ただし、スワップ領域を RAM サイズの 2 倍に設定する既存の推奨事項は意味がありません。ディスクスペースが安くても、そんなに多くのスワップスペースを割り当てることは意味がありません。安いものの無駄はまだ無駄で、あなたは確かに欲しくない数百メガバイト(またはそれ以上)のワークセットを継続的に置き換えます。
一人もいない「正しい」サイズの交換(ユーザーとコメントの数と同じくらい「正しい」サイズがあります)。私は通常RAMサイズに関係なく固定512MiBを割り当てますが、これは私にとって非常に効果的です。その理由は512MiBが可能だからです。いつも最近では、小さなディスクでも価格が安いです。一方、数ギガバイトのスワップスペースを追加するのはあまり良くありません。重大な問題が発生しない限り、使用しないでください。
SSDでも、スワッピングはRAMよりはるかに遅い(バス帯域幅と待ち時間による)。非常に許容可能不要になったアイテムを交換するために移動します(つまり、もう一度交換しない可能性が高いため、無料ページプールは実際に無料で拡張されます)。必要多くの交換(つまり、50GiBデータセットを使用するアプリケーションがある場合)が発生すると、ほとんど失われます。
コンピュータがギガバイトのページに入ってから出始めると、すべてが遅くなります。したがって、私を含むほとんどの人にとって、これはオプションではないので、そのような多くの交換を行うことは意味がありません。
答え2
私はここで見た感情のいくつかに同意しません。特に、本番環境では依然としてスワップパーティションが作成されます。私は家庭用コンピュータと仮想マシンでもこれを行います。
最近ではメモリサイズを約1〜1.5倍に調整します。経験上、2x RAMは一般的でした。ディスクの交換はバックアップや保護を必要としないので、「コストが安い」。
メモリが不足している場合は、スワップ領域を使用して問題を解決するために少し時間とバッファを取得できます。
/tmpのようなものがスワップ空間に常駐できることを認識してください。
スワップ領域は、次の再起動時に復元できるように部分コアダンプを保存できます。これは、後で実行する必要がある緊急デバッグに役立ちます。
答え3
おそらく:
私はこのトピックについて多くの考えをしており、数え切れないほど議論の両側についてのより多くの視点を見ました。私のアプローチは、理解する方法を開発することです。
サイズが十分だと思われるアクティブなスワップパーティションから始めます。
その後、ワークスペースで端末を開き、コマンドを実行すると、free -hs 1
毎秒使用量が報告されます。
別のワークスペースに切り替えるオプションがあります。
あなたができるすべてのことをし、より多くのことをしなさい。すべての一般的なアプリを一度に実行し、複数のタブに移動し、システムが実際に動作するように必死に努力してください。これは、コンパイル操作を実行して電子メールなどを確認しながら、12個のビデオ1/2を再エンコードすることを意味します。現実を直視すると、すべてはどうするかについてあなたシステムを使用してください。
システムに負荷が高い(または潜在的に負荷が高い)感じた場合は、端末を見て結果を確認してください。または、>output.txt
実行全体を確認できるようにコマンドに追加して、出力をファイルにリダイレクトすることをお勧めします。使用可能なメモリよりも多くのスワップ領域を使用しない場合、スワップ領域は必要ありません。もしそうなら、これをやってください。
交換する必要はありません。おそらくそうです。なぜ調べないのですか?
サイズ交換に関する経験則は使い方の問題なので、しばしば過大評価されます。
答え4
スワップ領域は、カーネルのスワップイン/アウトを待っている間に許容できる最大サイズより大きくしてはいけません。それ以外の場合は、システムの新しいエラーモードが生成されます(スワップから回復できないように停止します)。最新のドライブはGB /秒単位で転送できますが、Linuxは通常1秒あたり数百 kBまたは最大数MBの速度でのみスワップを移動できます。このような大規模な交換により、システムが数分、数時間、または数日間使用できなくなる可能性があります。
実行中の作業を実行するのに十分な物理メモリがある場合、理想的なスワップサイズは、プロセスが保持しているが使用していない「ジャンクデータ」の量と一致させることです。その範囲は数メガバイトから数百メガバイトに達します。このポリシーを使用すると、再利用できないデータを永続的に保存するのではなく、すべての物理メモリを使用して有用な情報をキャッシュできます。
物理メモリが不足している場合は、スワッピングの多くによる重大な速度低下に耐えることができるかどうかを評価する必要があります。その場合は、最大1〜2 GBのスワップスペースを確保してください。可能非常に高速なドライブをお持ちの場合は、最大4GBまで可能です。ただし、この量を超えるとシステムエラーモードがさらに悪化するため、より多くのRAMの購入を検討する必要があります。