虚拟机作为qemu进程,使用的内存是qemu进程的一段连续内存空间;
而qemu进程作为宿主机中的应用进程,使用的内存是宿主机中的虚拟内存,由mmu来维护
宿主机中的虚拟内存和物理内存的映射,从虚机中应用程序看到的内存到实际宿主机中的物理内存映射关系如下:
vvm --> vpm --> pvm --> ppm
虚机中的虚拟内存 --> 虚拟机的物理内存 --> 物理机的虚拟内存 --> 物理机的物理内存
可以看出中间有多层转化,使用的是内存的页表技术,过程中需要大量的查表动作,实际使用的内存虚拟化技术通常是ept技术来从硬件方面做优化,加上影子页表做全查表映射,保证虚机内存映射到正确的物理机内存空间。从这个角度看,不难发现,内存页面的大小影响着内存查询的效率,页面越大则换页查询的次数越少,在同一页面上查询映射效率会高一些,所以再虚机内存优化方面,先考虑使用巨页内存,可使用2M或是1G的。
关于ksm,是一种内存页合并技术,将相似的内存页面合并,提高宿主机内存使用率,但也影响了虚机的内存性能,所以再宿主机资源充足情况下,可以关掉ksm来提升虚机内存性能。