KVM によるスワップ領域の割り当て

KVM によるスワップ領域の割り当て

次のシナリオを考えてみましょう。2 GiB のホストが KVM を使用するゲストをいくつか実行しています。各ゲストは通常​​、多くのメモリを必要としません。ゲストにはそれぞれ 256 MiB が与えられ、ほとんど何もしないサービスが実行されます。ただし、ゲストがさらにメモリを必要とする場合もあります。現在、各ゲストの RAM はわずかですが、独自のスワップ領域があります。スワップの小さな部分が使用されていることに気付きました。この構成で問題が発生したことはありませんが、好奇心から次の点に注意してください。

最適なスワップ割り当て戦略は何ですか?

  1. 各ゲストにそれぞれのディスクから独自のスワップ領域を割り当て、ゲストにはホストからのわずかなメモリのみを割り当てます。(これが私が現在行っていることです。)
  2. ホストに大量のスワップ領域を割り当て、ゲストには割り当てず、ゲストにさらに多くのメモリを割り当てます。

メモリバルーニングはメモリパフォーマンスの向上に役立ちますか?

答え1

「ゲストがメモリをもっと必要とすることがある」というのは、メモリの過剰使用ゲストが通常は使用しないメモリを各ゲストに(実際に割り当てることができる量よりも)大量に割り当てます。そして、最悪のシナリオでゲスト全員が実際にディスクにスワップアウトできる十分なスワップスペースがあるかどうか計算します。するすべてのメモリを使用します。

スワップスペースはホスト機械であり、従う必要がある

ホストスワップ領域 = すべてのゲストメモリの合計 + 推奨ホストスワップ領域

安全のためです。

10人のゲストと2GiBのRAMがある場合、次のような実験ができます。

  • ゲストあたり 512 MiB RAM (512 * 10 = 合計 5120 MiB)
  • ホスト上の 2 GiB スワップ

つまり、これを安全に処理するには、ホストのスワップ領域は少なくとも 512 * 10 + 2048 = 7168 MiB である必要があります (ホストに 2 GiB のスワップを割り当てることができると仮定した場合) (ホスト メモリが少ないため、これが推奨されます)。

必ず最初にこれらの種類のセットアップをテストして、マシンがそれらを処理できるかどうかを確認してください。ベンチマークを行うとさらに効果的で、さまざまなロードアウトを試して、最も効果的なものを選択できます。

答え2

@ndt には良い手順があります。私のシナリオは異なるため、別の方法を採用します。

私のサーバーには多くのゲストがあり、それらはすべて単一のアプリケーション (通常は Web/メール/ファイル サーバー) を実行します。内部のデータは非常に重要なので、バックアップとスナップショットは頻繁に作成されます。したがって、ディスク イメージは小さくてシンプルなほど良いです。そのため、実際にはスワップ パーティションではなく、スワップ ファイルを作成します。処理能力やメモリ要件が高いゲストがいないために、それらのゲストのディスク ストレージとメモリは小さくなっています。スワップ ファイルは rootfs 内にあります。

この設定により、多くのスペースが節約され、メンテナンスが簡単になります。前述したように、これは他の状況とは異なります。

答え3

受け入れられた答えは間違っています:

また、VM 上でスワップ領域を有効にして、RAM がスワップされていることを認識し、ディスク キャッシュや IO バッファーに使用しないようにする必要があります。

ホスト上でのみスワップを有効にすると、VM は使用可能な実際の RAM があると信じてそれを使用しますが、ホスト上ではスワップされるため、不要なボトルネックやフリーズが発生します。これは、起こりうる最大の間違いです。

他のデータ ドライブと一緒にスナップショット/バックアップを作成したくないため、別の仮想ドライブをスワップ ディスクとして使用する必要があります。

スワップ領域は揮発性である可能性があるため、パフォーマンスを向上させるために cache=unsafe を使用するか、zram/z​​swap を使用することもできます。

また、スワッピングは、後でディスク キャッシュや IO バッファーに再利用できる非アクティブな RAM を解放するので、効果的であることも覚えておいてください。

関連情報