非常短的前提
Libvirt支持对虚拟机进行内存动态扩展,可是windows虚拟机首先须要安装virtio-win驱动。
KVM提供的virtio-win驱动下载地址:
下面是栗子
镜像:windows2008R2。64位
virtio-win:virtio-win-0.1-100.iso disk:差分镜像(qemu-img create -f qcow2 -b ./windows_2008R2_x86_64 disk)使用qemu命令启动虚拟机并载入virtio驱动:
qemu-system-x86_64 -hda ./windows_2008R2_x86_64 -drive file=./disk,if=virtio \-drive file=./virtio-win-0.1-100.iso,media=cdrom,index=1 -net nic,model=virtio \-net user -boot d -vga std -m 4096 -usbdevice tablet -vnc :50 -enable-kvm
通过vnc訪问该虚拟机,进行下面操作:
- 进入“设备管理器” - “系统设备”。安装“未知设备”为“Virtio Balloon Driver”
- 将virtio-win光驱中的WIN7/X86文件夹复制到“c:/Program files/Balloon”
- 以管理员身份使用cmd命令行进入上述文件夹
- 运行“BLNSVR.exe -i”用以安装BLNSVR服务
- 正常关机保存设置
至此。该disk文件已经具备了获取具体内存信息、动态调整内存大小的能力,验证的方法例如以下:
内存具体信息获取验证:
1.使用该disk文件启动虚拟机。在xml文件里加入例如以下段落用于启用balloon设备,同一时候设定採集周期为10s
...
2.採集时间能够手动设置
virsh dommemstat--period
3.获取虚拟机的当前内存用量
virsh dommemstat
内存动态大小调整验证:
1.关闭虚拟机
virsh destroy
2.设置虚拟机最大内存值(假设已经写入xml文件能够跳过)
virsh setmaxmem--size
3.启动虚拟机
virsh start
4.动态调整
virsh setmem--size
有点不同于linux系统的地方在于windows会显示设置的最大内存值,会让人产生误解。
參考资料: