kvm ゲストのメモリ割り当てを変更する

設定を 2箇所変更します。

これは xml の <memory></memory> に設定される数字です。

virsh # setmaxmem <domain> 1GiB --config

これは xml の <currentMemory></currentMemory> に設定される数字です。

virsh # setmem <domain> 1GiB --config

再起動は # systemctl reboot# reboot で行う os の再起動ではなく、仮想マシンそのものの再起動が必要です。

# shutdown -h now

……または systemd であれば……

# systemctl poweroff

等で、しっかり仮想マシンを停止してから virsh <domain> start します。

……ちなみに、最大メモリとカレントメモリのサイズを別の値にしたとして qemu/kvm でメモリバルーニングなんてできるんでしょうか……やったことないです。意外とあっさりできました。

仮想ゲスト側で現在の割り当てを確認します。 1GiB です。

# free --mebi
              total        used        free      shared  buff/cache   available
Mem:            997          44         237           0         714         927
Swap:           894          16         878

仮想ホスト側で setmem で割り当てを半分にします。

virsh # setmem <domain> 512MiB --live

もう1度、仮想ゲスト側で割り当てを確認します。

# free --mebi
              total        used        free      shared  buff/cache   available
Mem:            485          43          12           0         429         416
Swap:           894          16         878

最大メモリサイズの変更には仮想マシンの再起動が必要ですが、最大メモリサイズの範囲内であれば、意外と簡単に割り当てメモリサイズを変更できるようです。ですが当然、仮想ゲスト側のカーネルがメモリバルーニングに対応している1)必要があると思います。なので、例えば windows ゲストでこんなことができるかどうかはわかりません。

1)
Device Drivers → virtio あたりのパラバーチャライゼーションドライバーかな……?
https://manimani.cc/lib/plugins/linkback/exe/trackback.php/wiki:kvm:setmem