qemu-kvm 使用頻度の低いゲストからのメモリの回収

qemu-kvm 使用頻度の低いゲストからのメモリの回収

qemu-kvm ゲストからメモリを透過的に再利用したり、メモリの使用を防止したりする方法はありますか?

シナリオA:

ゲストはピーク時に 8GB の RAM を使用し、夜間には使用量が 4GB に戻りますが、ゲストは依然としてホストから 8GB の RAM を要求しています。

シナリオ B:

ゲストは 2GB の RAM を使用しますが、ページ キャッシュには 6GB の RAM があります。ゲストはホストから 8GB の RAM を要求していますが、そのうち最大 6GB は別のゲスト システムでより重要な RAM である可能性があります。


バルーニングに関して私が最初に考えたのは、ゲストはバルーニング効果を「見る」ことはないだろうということでした。しかし、「バルーン 2048」を送信すると、ゲスト内のメモリは実際には約 2 GB に削減されます。

答え1

オンにすることができます自動バルーニングlibvirt ゲストで XML を編集します:

<memballoon model='virtio'>

仮想メモリバルーンデバイスはパラメータ autodeflate、デフォルトは ですoffon自動バルーンを有効にするには に設定します。

<memballoon model='virtio' autodeflate='on'>

virt-manager には、この設定を有効または無効にする GUI オプションがないことに注意してください。

qemu を手動で呼び出す場合 (正気を保つために呼び出さないでください)、,automatic=trueバルーン デバイスに以下を追加します (例-device virtio-balloon,automatic=true: )。

自動バルーン化には qemu/kvm 1.3.1 以降が必要です。

ただし、これによってメモリ競合の問題がすべて解決されるわけではないことに注意してください。すべての仮想マシンを実行するのに十分な RAM を用意するのが最善です。

答え2

忙しい時間帯が終わった後、毎晩 VM および/または VM ホストでこれを cron します。

同期; echo 1 > /proc/sys/vm/drop_caches

ファイルシステムのキャッシュを削除し、それを利用可能なメモリとしてシステムに返すと、KVM/ハイパーバイザはそれを空きメモリとして認識し、他の用途に利用できるようになります。

Dockerシステムでも非常にうまく機能します

関連情報