内存虚拟化功能是通过qemu-kvm和qemu-system提供,他们是KVM和QEMU的核心包
KVM通过内存虚拟化共享物理系统内存,动态分配给虚拟机,如下图所示
为了在一台机器上运行多个虚拟机
- KVM需要实现VA(虚拟内存)→ PA(物理内存)→ MA(机器内存)之间的地址转换。
- 虚机OS控制虚拟地址PA(物理内存)→ MA(机器内存)之间的地址转换。
- 虚机OS控制虚拟地址到客户内存物理地址的映射(VA →PA),但是虚机OS不能直接访问实际机器内存
- 因此KVM需要负责映射客户物理内存到实际机器内存(PA → MA)
内存也是可以overcommit的
- 即所有虚机的内存之和可以超过宿主机的物理内存。但使用时也需要充分测试,否则性能会受影响