内存气球技术实验(Memory Balloon)

做了一点关于Memory Balloon的实验,发现有点东西和网上有的老博客里的略微有些许不同,特此整理实验步骤以及结果记录。


1. 在 物理机的 /boot/config-* 文件(该文件表明的是内核编译时的选项)中查找是否有CONFIG_VIRTIO_BALLOON=m ,一般来说,目前的Linux内核都已经有这个配置了。

   另外,再检查一下运行的内核模块中是否有了 virtio_balloon:
lsmod | grep virtio_balloon 
   注:这个检查个人理解既是基于host的,也是基于虚机的(见下)。但因为本人物理机上 CONFIG_VIRTIO_BALLOON=y , 因此不会grep出什么内容。
   
2. 用 virsh 来运行 QEMU Monitor 的命令:
1) 找出本物理机上的虚机情况,注意其 ID 一项
virsh list 
   另:
   - 在Controller节点上运行 nova list , 可以看到虚机的名字(Name)
   - 在Controller节点上运行 nova show , 可以看到虚机的详细信息,如运行在哪一台物理机上
   
2) 运行 virsh qemu-monitor-command 来检查虚机的实际分配内存量
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 命令来动态更改客户机的实际分配内存量(balloon): 
virsh setmem  
   注意,这里最后一项的size的单位是 KB. 若是误当成MB来设,相当于给虚机设置了一个很小的可用内存,会引起虚机崩溃。 
   
3. 2个实验
   在虚机中运行 lsmod | grep virtio_balloon , 会发现虚机是含有 virtio_balloon 这个Kernel模块的。
   此时,在虚机中运行 rmmod virtio_balloon 去卸载内核模块;
   然后,在host中运行 virsh qemu-monitor-command 1 --hmp "balloon 1024" 去调节虚机total可用内存到1024MB(假设虚机原来total内存为2048MB),再去虚机中运行 free -m , 会发现虚机的total内存并没有减少;
   最后,在虚机中运行 modprobe virtio_balloon 加载内核模块,然后再在虚机中运行 free -m , 会发现虚机内存自动减少为1024MB了。
   

   同样,假设虚机原来total内存为2048MB,因为运行 “balloon 1024”而减小为1024MB了,此时再在虚机中卸载virtio_balloon模块,会导致虚机total内存恢复回2048MB. 


(完)

你可能感兴趣的:(云计算,虚拟化,Linux,Kernel,云计算与虚拟化)