1. Ballooning简介
通常来说,要改变客户机占用的宿主机内存,是要先关闭客户机,修改启动时的内存配置,然后重启客户机才能实现。而内存的ballooning(气球)技术可以在客户机运行时动态地调整它所占用的宿主机内存资源,而不需要关闭客户机。
Ballooning技术形象地在客户机占用的内存中引入气球(Balloon)的概念,气球中的内存是可以供宿主机使用的(但不能被客户机访问或使用),所以,当宿主机内存使用紧张,空余内存不多时,可以请求客户机回收利用已分配给客户机的部分内存,客户机就会释放其空闲的内存,此时若客户机空闲内存不足,可能还会回收部分使用中的内存,可能会换出部分内存到客户机的交换分区(swap)中,从而使得内存气球充气膨胀,从而让宿主机回收气球中的内存可用于其他进程(或其他客户机)。反之,当客户机中内存不足时,也可以让客户机的内存气球压缩,释放出内存气球中的部分内存,让客户机使用更多的内存。
很多现代的虚拟机,如KVM、Xen、VMware等,都对Ballooning技术提供支持。关于内存Balloon的概念,其示意图如图5-9所示。
2. KVM中Ballooning的原理及其优劣势
KVM中Ballooning的工作过程主要如下几个步骤:
1. Hypervisor(即KVM)发送请求到客户机操作系统让其归还一定数量的内存给hypervisor。
2. 客户机操作系统中的virtio_balloon驱动接收到hypervisor的请求。
3. virtio_balloon驱动使客户机的内存气球膨胀,气球中的内存就不能被客户机访问。如果此时客户机中内存剩余量不多(如某应用程序绑定/申请了大量的内存),并不能让内存气球膨胀到足够大以满足hypervisor的请求,那么virtio_balloon驱动也会让尽可能多地提供内存内存使气球膨胀,尽量去满足hypervisor的请求中的内存数量(即使不一定能完全满足)。