Libvirt中windows虚拟机的动态内存管理
内存动态管理
内存的动态管理为虚拟机的内存提供了一个更合理的使用方式。
这使得用户在创建虚拟机之后,可以在虚拟机运行的状态下动态地修改虚拟机内存,以达到需求目的。
本文介绍了如何为使用virtio驱动的kvm windows虚拟机来完成内存的动态管理。
安装virtio驱动
windows虚拟机的内存获取需要先安装virtio-win
驱动:
- http://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers
- http://alt.fedoraproject.org/pub/alt/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 | qemu-system-x86_64 -hda <system_image> -drive file=<delta_image>,if=virtio \ |
栗子:
1 | qemu-system-x86_64 -hda ./windows_2008R2_x86_64 -drive file=./disk,if=virtio \ |
通过vnc访问该虚拟机,进行以下操作:
- 进入“设备管理器” - “系统设备”,安装“未知设备”为“Virtio Balloon Driver”
- 将virtio-win光驱中的WIN7/X86目录拷贝到“c:/Program files/Balloon”
- 以管理员身份使用cmd命令行进入上述目录
- 执行“BLNSVR.exe -i”用以安装BLNSVR服务
- 正常关机保存设置
验证内存动态管理能力
至此,该disk文件已经具备了获取详细内存信息、动态调整内存大小的能力,验证的方法如下:
内存详细信息获取验证
设置内存资源采集时间
使用该disk文件启动虚拟机,在xml文件中添加如下段落用于启用balloon设备,同时设定采集周期为10s
1 | ... |
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会显示设置的最大内存值,感觉会让人产生误解。