スワップがなければ、Linuxはスワップなしではできないことを具体的に何ができますか?
この質問では、たとえば、32 GBのLinux PC RAM and swapなし)と、16 GBのほぼ同じLinux PC RAM 16 GBのスワップ。注「はい」には興味がありませんが、32 GBのPCにスワップを追加すると、Xが向上する可能性があります。この質問のトピック。
私は最初に、スワップを追加することはRAM 以前の問題へのコメントで を追加することよりも優れている可能性がある)という意見に出会いました。
もちろんこれを読み通しました:RAMの容量が十分にある場合、スワップ領域は必要ですか?そして...
mmap
のMAP_NORESERVEへの参照がいくつかありますが、これは [〜#〜] oom [〜#〜] 状況にのみ関連し、おそらくprivatemmap。スワップは、多くの場合、メモリを拡張したりパフォーマンスを向上させるための安価な方法と見なされています。しかし、組み込みLinuxデバイスを大量生産するとき、これは頭を悩ませます...
...その場合、スワップによりフラッシュメモリが消耗し、保証が終了する何年も前に故障します。ここで、RAM=を2倍にすることは、デバイスで数ドル余分に発生します。
eMMCフラッシュであることに注意してくださいSSDではありません!通常、eMMCフラッシュにはウェアレベリング技術がありません。つまり、SSDよりもはるかに速く摩耗します。
この件に関しては、多くの熱い意見が寄せられているようです。私は本当に、能力についての乾燥した事実を探しています。「すべきか/すべきではない」という意見ではありません。
RAMを追加しても実行できないスワップで何ができますか?
ハイバネーション(またはディスクへのサスペンド)。実際のハイバネーションはシステムの電源を完全にオフにするため、RAMの内容は失われ、状態を永続ストレージに保存する必要があります。スワップ(別名:hiberfil.sys
およびpagefile.sys
、Linuxは、コミットされたメモリと休止状態の両方にスワップ領域を使用します。
一方、休止状態は、Linuxでうまく機能するのに少し厄介なようです。実際に冬眠できるかどうかは異なります。 ¯\ _(ツ)_ /¯
RAMを追加しても実行できないスワップで何ができますか?
この質問は、実際にはに言い換えることができます。不揮発性RAMで何ができるかは、揮発性RAMを追加してもできませんか?。ページング専用のパーティション(揮発性RAMと対話する専用の方法)を作成したからといって、それが永続的なセカンダリストレージメディアの一部であるという事実は変わりません。スワップパーティションは、システムを配置するために必須ではありません。休止状態では、既存のパーティションに作成された「スワップファイル」も使用できます。
最後に、スワップパーティションを使用していても、スワップファイルを使用していても、保存するのはRAMへの書き込みまたはRAMからの書き込みです。スワップパーティションが有効になっているシステムから電源コードを引き抜いた場合、そのスワップパーティションは魔法のように消去されません。
次の起動時にこのスワップデータは読み込まれませんが(ページングファイルには実行されなくなったプロセスに対応するエントリが含まれるため)、一部のディストリビューションでは、適切なシャットダウンまたは再起動中に意図的に破棄してデータを破壊する場合があります、誰かがシステムからコードを引き抜いた場合、そのスワップパーティションを法医学的に調査することができます。
あなたが言及した組み込みデバイスの場合に関して言えば、フラッシュは、不揮発性の種類であるRAM(NVRAMまたはEEPROM)ストレージ)ですが、I/Oヒット(フラッシュプログラム/消去サイクルの数で表されるセル耐久性)は、揮発性RAMのそれと比較すると見劣りします。その場所への書き込みを実行するたびに、文字通り酸化物の層を削り取り、最終的には許可する酸化物が残っていません電荷の永続的な保存のため、その後の読み取りの前に文字通りリークします。
一方、揮発性のRAMの存続可能性は、電源を切断した場合やフラッシュした場合と比較して、フラッシュに比べて事実上存在しません(理想的な実験条件では数分程度)。揮発性の場合RAM=電荷のリークと対応するフリップフロップの状態(入力、出力の決定、次に入力の再決定))、つまりフィードバックを停止するものはありません。 -制御されたラッチ。
32GB RAMおよびスワップなしvs 16GBスワップ付き16GB RAM.
そのように尋ねると、スワップは主にお金を節約し、ドルあたりのパフォーマンスを向上させます。
しかし、スワップは「ディスクと同じくらい遅いメモリ」以上のものです。これは、メモリページの一時的なストレージであり、必要に応じてRAM=)に直接(ファイルシステムのオーバーヘッドなしで)ロードできます。
もちろん、多くは負荷(負荷のkind)に依存し、スワッピングのアイデアは逆効果さえあります。そのため、swapon
/swapoff
自体に加えて、 "swappiness"パラメータがあり、適切なサイズに関する説明があります。
ウィキペディアから、私はLinuxの「スワップ」についてこのステートメントを得ました(「ページング」記事で)
Linuxカーネルは、事実上無制限の数のスワップバックエンド(デバイスまたはファイル...
複数のスワップバックエンドに同じ優先度が割り当てられている場合、それらはラウンドロビン方式で使用されます(これはRAID 0ストレージレイアウトに多少似ています)...
これは、スワップをハードウェアレベルでより意味のあるものに変えることができることを示しています。専用の「スクラッチドライブ」は、これらのスワップアウトされたページをより良いホームにすることができます。理想的には、スクラッチドライブは(非常に)小さいが高速で堅牢である必要があります。
「新しい」サイズルール(正方形root of Giga)に従って、例を比較すると次のようになります。
16 GB RAM
+ 0 GB Swap+1000 GB Disk
16 GB RAM
+ 4 GB Swap+ 996 GB Disk
本当に意味がないのは:
16 GB RAM+0 GB Swap
+ 1000 GB Disk
12 GB RAM+4 GB Swap
+ 1000 GB Disk
これはtmpfs( "ramdisk")のスワップパーティションになります-あまり害はないかもしれませんが、ここではまったくメリットがありません。あなたも休止状態にすることはできません。
(ただし、zramとzswapについては、compressionを追加した場合は以下を参照してください)
スワップを理解するにはシステム全体と平均負荷を考慮する必要があります。また、vm/mm(仮想メモリ管理)は複雑なシステムであるため、明確な利点を示すことは非常に困難です。過負荷システムへの「スムーズな」移行のアイデアが好きです。
私には8 GBがありますRAMでスワップはありません。ただし、コンセプトは守っていますが、AFAは理解できます:-)
OPリンクの1つでこのredhatの引用を見つけました。このシナリオは、2 GBのメモリ需要が増え続けるRAM + 2 GBスワップです。
...私たちの場合(図解のみ)、かなりの量のスワップが利用できるため、パフォーマンスが低下する時間が長くなります。
しかし、代わりの方法はOOM
です。
「パフォーマンスが低下する時間」は長くなりますが、パフォーマンスは負荷に比例して低下するだけです。コンテキストがわかりません。おそらくtoo largeスワップパーティションに対して警告したいだけかもしれません。それはsoundsアンチスワップですが、一見するとそうではありません。
繰り返しになりますが、同じ理由で、スワップはありません。私と私のアプリケーションが上限に達したときに知りたいので、負荷を減らすか、RAMを購入するか、スワップ用にパーティションをアクティブ化する必要があるかどうかを決定します(1つまたは2つ持っています)そのための準備ができている小さなパーティション)。
私はこれを調べたzramそして、次にzswap事:非常に興味深い...:
これに対して、zswapはスワップデバイスのRAMベースのキャッシュとして機能します。これにより、zswapには、zramにはない、使用頻度の低いスワップページのエビクションメカニズムが提供されます。
一方、zram
はスワップデバイスなしで動作します。私が言ったことは意味がありませんが、圧縮は考慮していません。
私のポイントはこれですeviction「スワップ」に固有のメカニズム。このcanは、スワップアウトまたは圧縮によってスワップするかどうかにかかわらず、高負荷時に非常に役立ちます。
特定の合計に対して、それはRAM swapよりも常に優れています。
Noswapシステムとswappingシステムの動作には違いがあり、有用かそうでないかは異なります。スラッシングです。スワップシステムが利用可能な仮想メモリの合計を使い始めると、スワップとRAMの間でページを前後に移動する際に、ブロックがますますブロックされます。これにより、システムの速度が低下します。状況によっては、これにより手動または自動の介入が可能になり、負荷を軽減してシステムを回復できます。
Noswapシステムでは、メモリ使用率が非常に高くなるまでパフォーマンスは比較的レベルを維持します。この時点で、OSはメモリマップされた実行可能ファイルから読み取り専用ページのアンロードを開始し、ディスクキャッシュ用のスペースもほとんどありません。この時点でOOMキラーがトリガーされる可能性があります。したがって、劣化が遅いのではなく、突然の障害が発生します。
スワップは、特に小型の組み込みフラッシュデバイスでは、組み込みシステムにとってほとんど意味がないことに同意します。世界には、Linuxの消費者向けルーターや電球など、メモリ使用量がかなり固定されており、スワップのない小さなものがいっぱいです。
スワップは、RAMとは異なり、[簡単]無効化、制約、遅延、または拡張することができます-アプリケーションのメモリ割り当て戦略を開発する際に役立つ機能です。
カーネルが4GのRAMと4Gのスワップを認識し、OSと開発アプリケーション(ブラウザ、IDEなど)が3Gを消費するとします。これは5Gの無料仮想メモリであり、1Gの実容量と4Gのスワップ容量です。
あなたは新しいデータベースやゲームを開発しています。たとえば、2Gがそのホットなリソースをロードしたいと考えています。したがって、それは進んでいます sbrk
および mmap
を繰り返し、スワップをオンにすると、カーネルの不思議さによって2Gが現実のものになりますVMレイヤー。やった、あなたのコードはうまくいきます。 (そして、あなたのブラウザまたは何でも地獄を交換するためにページに委任されています。)
次に、プログラムを停止します。 swapoff
して、プログラムを再実行します。今回は、そのsbrk
ラントの実行中に、ENOMEM
を取得し、コードは不幸なパスに対処する必要があります。それはどのように反応しますか?このシナリオではどのように踊りますか?
または、USBスティックをマウントし、USBマウントにmkswap
およびswapon
を追加し、 vm.min_free_kbytes
を増やして、カーネルをそのUSBスティックにさらに移動させます。 。プログラムを再実行します。 mallocの遅いVMを使用したアプリの動作はどうですか?
アプリの実行中に上記のすべてを行うのはどうですか?実行してOOM状態が発生し始めると、どのように動作しますか?
スワップサブシステムをライブで調整することにより、空き容量の少ないRAMでシステムを拷問する方法に終わりはありません。また、cgroupsやrusageとは異なり、使用可能な仮想RAMを変更するためにプロセスをシャットダウンする必要はありません。
モックを使用してENOMEM
または低速brk
をシミュレートすることで、これらの種類のメモリ乱用をテストできます。安定しているため、これは適切なことです。しかし、確率的プロセスの金を採掘するための低メモリ環境での実弾練習に勝るものはありません。スワップを使用すると、テスターはカーネルのメモリリソースと特性をその場で簡単に、実際の低メモリの世界と同様の方法で微調整できます。 RAMスティックを追加または削除しても、この値は提供されません。
これは少しニッチなケースで、確かにラムを追加することもできますが...
スワップはハードドライブやフラッシュドライブなどの物理的な不揮発性ストレージを意味すると誰もが想定しているようです。スワップは、物理的な場所というよりもプロセスです。
次の奇妙なシェナンガンを考えてみましょう:
スワップの使用(これはたまたまRAMにあります)。これは、単純なRAM(そこにスワップパーティションがない場合)から得られるもの以上のものです)。
もちろん、技術的にはRAMを追加することもできます。この種の奇妙さは、追加するRAMの量に関係なく、(データ/適切なものを知っている限り)常にもう少しスペースを詰め込むことができることを意味します。
あなたはすでに答えを持っていますが、あなたの質問はあなたがまだその答えに感謝していないことを示しています。
簡単な答えは、「大きくて安価であること(そしておそらく柔軟性があること)」です。あなたはすでにそれを知っていますが、あなたもそれを却下します。すべきではない。
RAMは「数ドルの追加」ではありません。ギガバイトのギガバイト、たとえば、ECC RAMは32 GB(RDIMM 2400 DDR4)の場合130ポンド、または約4/GBです。スワップに使用するSDDのコストは約TERABYTEあたり100〜130ポンド、または約0.11/GB(Micron/Intel、停電保護機能付き)サーバーファームは、サーバーあたり数百から数千(多くの場合)のGBを数百のサーバーで使用できます。
また、RAMはより多くの電力を消費します-RAMが必要なRAM SSDで電源を入れて更新する際のアイドルプロセスは、電力使用量が大幅に少なくなります。小さな組み込みデバイスではこれ自体が問題になる可能性があります。
ウェアレベリングは、ほとんどのデバイスで考えているよりも問題が少ないです。 SSDは人々が思っているよりも長持ちし、商用設計のデバイスは、一部のカードの極端に悪いものではなく、期待される用途に一致するSSDを選択します。
最後に、スワップはより柔軟です。タスクが通常32 GBを使用するが、短時間でまれに64 GBを必要とする場合、RAMを使用して64を指定する必要があります。スワップを使用すると、32で機能し、短時間使用して破棄します。例外的な時期のためのスワップ。
Tl; Dr-経済的なポイントを完全に逃しています。
RAMを追加しても実行できないスワップで何ができますか?
スワップを使用しない場合でも、休止状態ではスワップファイルが必要です。
それ以外は何もありません。スワップは良いstopgap if
RAMはディスク容量に比べて非常に高価または制限されています
このシステムは、予測不可能なソフトウェアやワークロードを時々試す可能性がある1人のユーザーの管理下にある汎用システムです。
OOMシナリオがまったく可能であり、プログラムの完全なクラッシュよりもディスクへのページングが望ましい場合。
具体的に交換できるものは、RAM
2つのこと:
A. RAM=がいっぱいのとき、そこにいてください。
B.特定の瞬間にプロセスによって実際に使用されていないメモリページを保持し(ある条件でブロックされているため)、RAMを他の目的で使用できるようにします。
同時に実行されるすべてのプロセスからのメモリ要求を満たすのに十分なRAM=がある場合、またはOOMエラーを気にしない場合、Aは無視できます。
Linuxはブロックデバイスの読み取りと書き込みをキャッシュするために無料のRAMを使用しますが、そうする必要はありません。RAMはブロックデバイスよりも高速です。Linuxがページングできるようにするプロセスがスワップに使用していないものは、より多くのRAMを使用してブロックデバイス読み取りをキャッシュするために使用できます。ブロックデバイスアクセスの速度を気にしない場合は、ルーターなどの組み込み環境に適用すると、Bは無視できます(これらの状況では、とにかく休止状態を気にしません)。
スワップはディスクキャッシュではありません-スワップ中のページがディスクファイルに関連付けられていないか、ディスクに書き込まれることを意図していない可能性があります。
...その場合、スワップによりフラッシュメモリが消耗し、保証が終了する何年も前に故障します。ここで、RAM=を2倍にすることは、デバイスで数ドル余分に発生します。
これは間違いだと思うでしょう。まず、2、3ドル追加しても、妥当な量のRAMは2倍になりません。第二に、フラッシュはRAMよりも安価です。 3番目に、非アクティブなデータにはスワップが使用されます。スワップパーティションが継続的に書き込まれる状況がある場合、RAM)が少なすぎて、スワップがないと重要なプロセスがクラッシュします。
さらに、フルSSDへのランダムな書き込み(それらが早期に失敗する原因)は低速です。実際、非常に遅いです。お使いのコンピュータがスワッピングによってクロールにまで減速されない場合、SSDは早期死に至ることはありません。
重要なプロセスがクラッシュするよりも、メモリが不足しているときにコンピュータの速度が著しく低下する方がはるかに優れています。
では、RAMではできないスワップで何ができるのでしょうか。
スワップはあなたにお金を節約することができます。 RAMは、対応するディスクの容量よりも高価です。目標は、コストパフォーマンスの比率を最適化することです。もちろん、RAMは常にスワップよりも優れていますが、しかし、それはあなたにもっと費用がかかり、あなたがそれをすべて使用しなければ、無駄になります。
スワップの有用性は、ワークロードのタイプにも大きく依存します。たとえば、多数のアプリを開いていて、そのうちの1つだけをアクティブに使用している場合、非アクティブなプログラムで使用されていたRAMは解放され、アクティブなプロセスで使用されます。一方、RAM)の使用可能な量より多くのメモリを必要とする単一のメモリ集約型プログラムを使用することは、スワップの最適な使用法ではありません。