KVM中内存也是允许过载使用(over-commit)的,KVM能够让分配给客户机的内存总数大于实际可用的物理内存总数。由于客户机操作系统及其上的应用程序并非一直100%地利用其分配到的内存,而且宿主机上的多个客户机一般也不会同时达到100%的内存使用率,所以内存过载分配是可行的。一般来说,有如下三种方式来实现内存的过载使用。
- 内存交换(swapping):用交换空间(swap space)来弥补内存的不足。
- 气球(ballooning):通过virio_balloon驱动来实现宿主机Hypervisor和客户机之间的协作来完成。
- 页共享(page sharing):通过KSM(Kernel Samepage Merging)合并多个客户机进程使用的相同内存页。
其中,第一种内存交换的方式是最成熟的(Linux中很早就开始应用),也是目前被广泛使用的,不过,它相比于KSM和ballooning的方式效率较为低一些。