私は64GBのRAMと240GBのソリッドステートドライブ私のコンピューターは、メモリを大量に消費する計算 (機械学習、データ マイニングなど) に使用する予定です。インターネットで見つけたアドバイスのほとんどは、2、4、8 GB の RAM を搭載したコンピューターに関するもので、RAM スワップ パーティションの 2 倍のサイズ (つまり 128 GB) を推奨しています。
128 GB のスワップ パーティションを作成するのは合理的ですか? 巨大なスワップ パーティションを作成することでどのような利点がありますか?
物理 RAM が不足した場合、次のことが正しいと理解していますか?
- スワップがない場合、「メモリ不足」エラーが発生します
- スワップがある場合は、RAM ページの一部がスワップ パーティションにコピーされ、プログラムは引き続き実行されます (ただし、速度は遅くなります)。
SSD は読み取り/書き込みサイクルの数が限られているため、SSD にスワップを作成するのは良くないと言う人もいます。スワップを使用すると、SSD の読み取り/書き込みサイクルはどのくらいの速さで使い果たされるのでしょうか (私の知る限り、書き込み IOPS は約 50000 です)?
私はLinuxを使用しています(ウブントゥ 14.04(トラスティ・タール))。
とりあえず 16 GB のスワップを設定します。これで十分でしょう (たとえば、RedHat は 4 GB を推奨しています)。また、16 GB のディスク容量は実際にはそれほど大きな問題ではありません。
答え1
おそらく、少量のスワップしか必要ありません。コンピュータの一般的な作業セットに十分な RAM がある場合 (おそらくそうでしょう)、次の 2 つの目的にのみスワップが必要です。
ディスク キャッシュ用のスペースを空けるために、おそらく RAM からアクセスされることのない情報を取得するには、スワップが必要です。多くのアプリケーションはシステム起動時に実行され、二度とアクセスされることはありません。それらのアプリケーションによって汚されたページが RAM 内に永久に残ってほしくはありません。そのため、それらのページを保持するためにスワップが必要です。
決して満たされない割り当てをカバーするには、スワップが必要です。このスペースは、使用されなくても、使用可能である必要があります。スワップがなければ、システムは、割り当てられたすべてのメモリを一度に使用できるようにするためのバックアップ ストアが不足しているため、十分な空き物理 RAM があっても、メモリの割り当てを拒否する必要があります。
どちらも大量のスワップを必要としません。たとえば、16 GB あれば十分でしょう。目的は、速度を犠牲にしてより大きなワーキング セットを実行できるようにすることではありません。目的は、64 GB を効果的に使用し、ジャンクで詰まったり、決して発生しないエッジ ケースのために確保したりしないようにすることです。
(4GB あれば十分だろうという Bert の意見には私も同意します。)
答え2
レッドハット64 GBのマシンでは4 GBを推奨。
しかし、スワップのサイズ設定は科学というより芸術です。マシンの用途、ディスク容量やメモリの容量、その他の要因によって異なります。覚えておいてください。後からいつでもスワップを追加できます。
最近のシステムのメモリ量を考えると、2 倍の物理メモリ ルールを使用するのは時代遅れです。ただし、何をしているのか理解していない限り、スワップをゼロにして実行することはお勧めしません。4 GB の推奨値は、良い出発点です。
答え3
Linux では、一度に実行するすべてのプロセスとその最大仮想フットプリントに対して、使用可能な仮想メモリの合計 (RAM + SWAP) が十分になるように、十分なスワップが必要です。
スワップがこれより少ない場合、またはスワップがまったくない場合は、次の状況が発生します。システムは、ページを割り当てようとしてメモリ不足になります。ただし、スワップがなくても、これはソフト障害です。なぜなら、システムには、スペースを確保するために削除できる「犠牲」ページがたくさんあるからです。つまり、実行可能ファイルや共有ライブラリなどの、ファイル バック メモリ マッピングのページです。
システムがデータ (スワップアウトできない) 用にますます多くのスペースを必要とするようになると、実行可能コード (共有ライブラリと実行可能ファイル) がますます退避され、作業セットがますます狭いページ セットに切り詰められるため、ひどいスラッシングが発生します。
スワップ スペースは、匿名 (ファイルにマップされていない) ページをスワップアウトする場所を提供することでこの問題を緩和します。匿名のページとは、メモリ割り当てに使用されるページであり、実行可能コードをメモリ内に保持できます。
それでも、メモリを大量に消費するタスクを頻繁に実行しない場合は、ほとんどの場合スワップレスで実行し、必要なときにスワップ ファイル (専用パーティションではなく) を手動で構成することで対応できる可能性があります。スワップ ファイルをオンザフライで作成するには、root になって、次の手順を実行します。
dd if=/dev/zero of=/path/to/swapfile size=$((1024 * 1024)) count=32768 # 32 Gb.
mkswap /path/to/swapfile
swapon /path/to/swapfile
必要がなくなったとき:
swapoff /path/to/swapfile
rm /path/to/swapfile
ノート:
少なくとも RAM と同じ量のスワップを構成する必要はありません。この経験則は、スワップの設計方法によりそれが必須要件であったオペレーティング システムにまで遡ります。
メモリが利用できない場合に Linux を強制的に失敗させる方法はいくつかあります。具体的には、次の sysctl エントリの値を操作することです。
vm.overcommit_memory vm.overcommit_ratio
答え4
マシンに適用するワークロードを実行するには、一定量のメモリが必要です (ピーク負荷に対応できる十分なメモリを追加することを忘れないでください)。また、少なくともそのメモリを持つようにコンピューターを構成する必要があります。
現代のオペレーティングシステムは、物理メモリとスワップスペースの組み合わせとして仮想メモリを提供するため、マシンに利用可能なメモリよりも多くのメモリが必要な場合は、しなければならないギャップを埋めるのに十分なスワップ領域を追加します。つまり、最大 80 GB が必要で、マシンに 64 GB の容量がある場合は、16 GB のスワップが必要です。
通常、オペレーティング システムのインストーラーは、初期スワップ領域を作成するように要求します (これが最も簡単で、小型のコンピューターでもインストールできるため)。また、一般的な Unix 操作では、仮想メモリのサイズを物理メモリの 3 倍にするのが良い経験則であることがわかっているため、通常はこれが推奨されます。ただし、使用パターンについて詳しく知っている場合は、これを適切に変更できます。
メモリ負荷が常に低い場合は、スワップスペースなしで作業しても問題ありません。Linux は未使用のメモリをディスク キャッシュとして透過的に使用します。