Libvirt中windows虚拟机的动态内存管理

内存动态管理

内存的动态管理为虚拟机的内存提供了一个更合理的使用方式。

这使得用户在创建虚拟机之后,可以在虚拟机运行的状态下动态地修改虚拟机内存,以达到需求目的。

本文介绍了如何为使用virtio驱动的kvm windows虚拟机来完成内存的动态管理。

安装virtio驱动

windows虚拟机的内存获取需要先安装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驱动

1
2
3
qemu-system-x86_64 -hda <system_image> -drive file=<delta_image>,if=virtio \
-drive file=<virtio_image>,media=cdrom,index=1 -net nic,model=virtio \
-net user -boot d -vga std -m 4096 -usbdevice tablet -vnc :50 -enable-kvm

栗子:

1
2
3
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访问该虚拟机,进行以下操作:

  1. 进入“设备管理器” - “系统设备”,安装“未知设备”为“Virtio Balloon Driver”
  2. 将virtio-win光驱中的WIN7/X86目录拷贝到“c:/Program files/Balloon”
  3. 以管理员身份使用cmd命令行进入上述目录
  4. 执行“BLNSVR.exe -i”用以安装BLNSVR服务
  5. 正常关机保存设置

验证内存动态管理能力

至此,该disk文件已经具备了获取详细内存信息、动态调整内存大小的能力,验证的方法如下:

内存详细信息获取验证

设置内存资源采集时间

使用该disk文件启动虚拟机,在xml文件中添加如下段落用于启用balloon设备,同时设定采集周期为10s

1
2
3
4
5
6
7
8
...
<devices>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
<stats period='10'/>
</memballoon>
</devices>
</domain>

or
手动设置采集时间

1
virsh dommemstat <dommain> --period <time(sec)>

获取虚拟机的当前内存用量

1
virsh dommemstat <dommain>

内存动态大小调整验证

关闭虚拟机

1
virsh destroy <domain>

设置虚拟机最大内存值(如果已经写入xml文件可以跳过)

1
virsh setmaxmem <domain> --size <max_size>

启动虚拟机

1
virsh start <domain>

动态调整

1
virsh setmem <domain> --size <mem_size>

有点不同于linux系统的地方在于windows会显示设置的最大内存值,感觉会让人产生误解。

参考资料