私はかなり長い間unixを使ってきましたし、ここ数年、スワップは時代錯誤だと感じましたが、他の人々がどう思うか興味があります。
私の議論は大体これです(グローバルなulimitやOOM設定の調整はないと仮定します):
There is little value in swap because if you need to swap out to disk,
odds are it's going to be a vicious cycle where an app will continue
to eat not only real memory, but swap as well until it gets OOM
reaped (_if_ it gets OOM reaped).
If you have swap enabled, it will only prolong this death march to
the detriment of other processes - and in the worst case where the
process is not OOM reaped in a timely manner, grind the system to
a halt.
Without swap, it will probably get OOM reaped sooner (if at all)
パフォーマンスのために調整されたサービスの場合、リソース使用量の上限を理解することは、そもそもサービスを調整するための鍵になると思います。その場合、必要な量がわかります。
実行中のプロセスを一時停止し、他のことのためにスペースを空けることができる多くの状況(いくつかではあるが、多くはない)を想像することはできませんが、そうするとソケットを失うことになります。 gccを介したコアダンプまたは手作業によるメモリのコピーは、機能的に同等です。
使用可能なRAMが小さくても、組み込みシステムでスワップすることは絶対に望まないでしょう。RAMを使い果たした場合は、セクターあたり100万のフラッシュメモリを破壊するよりも、プロセスを停止させたいです。週末にかけてセクターをウェアレベリングしてナブまでドライブします。
そこにあるunix-beardsには、スワップを維持する説得力のある理由がありますか?
回答と分析の更新:
確認済み?-fork()は、子プロセスに対して親と同じ量のメモリを必要とします
Modern fork()はPOSIX(一般)の子供向けのコピーオンライトですが、特にLinuxとFreeBSDであり、外挿によってOSXを想定しています。スワップが運ぶ時代錯誤的な荷物のこの部分を考えます。
不思議なことに、このSolarisの記事は、Solarisがfork()でCopy-on-Writeを使用しているにもかかわらず、fork()が無駄にならないように、空き仮想メモリに少なくとも2x(!)中間。Solarisの要素は、スワップは時代錯誤であるという議論をやや打ち破りますが、十分なオペレーティングシステムがCoWを正しく実装しているので、スワップのさらなる正当性としてマークするよりも神話を払拭することが重要です。以来。それに直面しよう。この時点で、実際にSolarisを使用している人々は、おそらく単なるOracleの人たちです。不快なSolarisはありません!
確認済み -tmpfs / ramfsがいっぱいになった場合、tmpfs / ramfsファイルは利便性としてスワップに移動できます。
無制限のtmpfs / ramfsを使用しないでください!tmpfs / ramfsで使用するRAMの量を常に明示的に定義します。
プラウザブル -「念のために」少し交換する
私の昔のボスの一人は、「あなたが知らないことを知らない」という素晴らしい言葉を使っていました-基本的に、あなたはまだ持っていない情報に基づいて決定を下すことはできません。しかし、これは私にとってスワップのもっともらしい議論です-アプリケーションがスワップアウトしているかどうかを検出するために行うことは、malloc()が成功するか、または例外をキャッチするかを確認するよりも重いと思います失敗したnew()。
これは、デスクトップを実行していて、ランダムなものがたくさんある場合に便利かもしれませんが、それでもなお、何かがおかしくなったら、スワップヘルムに飛び込むよりもOOMを手に入れたいです。それは私だけです。
逮捕!-上のSolaris、スワップがある理由のカップルのための重要な
tmpfs-状態tmpfsで使用可能な空き領域の量は、システム内の未割り当てのスワップ領域の量に依存します。tmpfsファイルシステムのサイズは、書き込まれたファイルに対応するために大きくなりますが、tmpfsのヘビーユーザーにはいくつかの固有のトレードオフがあります。Tmpfsは、実行プログラムのデータおよびスタックセグメントとリソースを共有します。tmpfsファイルシステムが最大許容サイズに近い場合、非常に大きなプログラムの実行が影響を受ける可能性があります。Tmpfsは、システムのスワップ領域のうち4MBを除くすべてを自由に割り当てることができます。
Solarisのスワップに関する事実と神話 -状態今日の仮想メモリは、物理RAMとディスク上のスワップスペースの合計で構成されています。Solarisでは、スワップスペースをまったく構成する必要はありません。このオプションを選択すると、RAMがいっぱいになると、新しいプロセスを開始できなくなります。。
これが、作成できる最大仮想マップがram + swapであるかどうか、または、ramap()のようなファイルをramよりも大きくしてmmap()の遅延初期化に依存することができるかどうかはわかりません。おそらく最近スワップなしでSolarisを正常に実行できる可能性があります。他のPOSIXyオペレーティングシステムよりも使い勝手が悪いようです。
逮捕!人気のあるLinux休止状態ツールはスワップに依存しているようです
デフォルトでは、TuxOnIceは休止状態のスワップに依存しているように見えますが、他のバックエンドも存在します。ただし、休止状態にする必要のあるボックスを実行していない場合は、「Linuxでスワップは非名義的である」という声明を引き続き支持します。