做了一点关于Memory Balloon的实验,发现有点东西和网上有的老博客里的略微有些许不同,特此整理实验步骤以及结果记录。
1. 在 物理机的 /boot/config-* 文件(该文件表明的是内核编译时的选项)中查找是否有CONFIG_VIRTIO_BALLOON=m ,一般来说,目前的Linux内核都已经有这个配置了。
另外,再检查一下运行的内核模块中是否有了 virtio_balloon:lsmod | grep virtio_balloon
注:这个检查个人理解既是基于host的,也是基于虚机的(见下)。但因为本人物理机上 CONFIG_VIRTIO_BALLOON=y , 因此不会grep出什么内容。
virsh list
另:
virsh qemu-monitor-command 1 --hmp "info balloon"
注意,这里的结果显示的是实际分配内存量(balloon),并不是配置内存量。比如,给虚机配置4GB内存,但实际分配量可以设置为3GB,这样,多出的1GB就可以任物理机使用了。
3) 设定虚机的内存实际分配量
virsh qemu-monitor-command 1 --hmp "balloon 512"
举例:假设在2)中得到的结果是2048(默认为MB),在本步骤设为512,则意味着要从该虚机让出1536MB给物理机去使用。注意,此时到虚机中运行 free -m ,一些老的文献会说“total仍为2048MB,但used这项会比原来增大1536MB”,但是根据笔者实际测试结果来看,在比较新的版本上(
Kernel 4.4.0,QEMU 2.5.0),是total这一项直接显示为512MB了而used并没有改变。也就是说,在新版KVM/QEMU中,很明确地减去了虚机total可用内存。
virsh setmem
注意,这里最后一项的size的单位是
KB. 若是误当成MB来设,相当于给虚机设置了一个很小的可用内存,会引起虚机崩溃。
同样,假设虚机原来total内存为2048MB,因为运行 “balloon 1024”而减小为1024MB了,此时再在虚机中卸载virtio_balloon模块,会导致虚机total内存恢复回2048MB.
(完)