設定を 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 ゲストでこんなことができるかどうかはわかりません。