暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

基础知识——内存虚拟化和超配

顾炯的云世界 2016-01-19
1772

    一般安装在虚拟机上的操纵系统和安装在物理机上的操作系统是一样(半虚拟化要打补丁),或说操作系统并不知道是运行在虚拟机上还是物理机上。原因就是应为有了VMM(虚拟化管理层)这个“骗子”。上次我们讲了CPU是怎么虚拟化的,接下去了解内存是怎么被虚拟化和超配的。

内存虚拟化原理

虚拟机的内存是由VMM从物理机上的内存进行分配的。但每台虚拟机的内存的要求和物理机一样,即独占内存并且是地址从0开始的连续的物理内存。所以VMM层就必须给每台虚拟机都模拟出这些特性,这个地址就是虚拟物理地址。虚拟的物理地址和物理地址需要建立对应关系,这种关系就是通过VMM进行管理的。操作系统(guest os)提供给应用使用的线性地址空间,我们称为虚拟地址。操作系统(guest os)内的内存管理单元(MMU)管理的是虚拟地址和虚拟物理地址的映射关系。当然,虚拟物理地址对一个的物理地址的映射也可以是不连续的,只要映射出的虚拟物理地址是连续的即可。但实际上每台虚拟机存在内存中的数据,必须存在对应的物理内存中。如图,每次应用访问内存的时候,需要MMU和VMM进行2次内存地址的映射,效率很低。为了提高地址映射的效率,有两种方法:MMU半虚拟化和影子表。

MMU半虚拟化:

    一看到半虚拟化,就能想到典型代表,XEN。MMU半虚拟化是指利用物理的MMU,在虚拟机里面一次完成从虚拟地址到物理地址的映射。为达到这个目的,VMM是需要保存一张转换表(从虚拟地址到物理地址的映射),经过转换表的处理,VM里面的页表中的地址不再是虚拟机的物理地址,而是真实的物理地址。为实现MMU虚拟化,必须对Guest OS的内核做修改,让VMM可以将虚拟物理地址和物理地址的映射关系,传递给操作系统(guest os)的MMU。对于VM来说,它可以知道真正的机器地址,因此为了保护各个VM之间的隔离,VMM在对页表进行地址转换前,会对页表中的每一个页表项检查,确保页表项只映射了属于该VM的机器页面,而且不能包含对页面的可写映射。 

影子表

VMM里维护了一个虚拟机内存管理数据结构——镜像页表(shadow page table)。VMM通过镜像页表给不同的虚拟机分配机器的内存页,如操作系统虚拟内存一样,VMM能将虚拟机内存换页到磁盘,因此,虚拟机申请的内存可以超过机器的物理内存。VMM也可以根据每个虚拟机的要求,动态地分配相应的内存。影子表是大部分虚拟化软件采用的方法。


内存超配原理 

在物理机上的内存也是可以超配的,即虚拟机配置的内存总和可以大于物理机内存的总和。内存超配可不能像CPU那样通过时间片的复用,失去的记忆,哪怕是1毫秒,都是无法恢复的,所以内存的超配只能由VMM管理下,采用一些自我挖潜力的方法:

    页面交换:虚拟机长时间未访问的内存内容被置换到存储中,并建立映射,当虚拟机再次访问该内存内容时再置换回来。

 

    内存气泡:VMM通过内存气泡将较为空闲的虚拟机内存释放给内存使用率较高的虚拟机,从而提升内存利用率。

 

    透明页共享:虚拟机之间共享同一物理内存空间(如同一物理机下的不同虚拟机安装了相同的操作系统),此时虚拟机仅对内存做只读操作(蓝色)。当虚拟机需要对内存进行写操作时,开辟另一内存空间,并修改映射(红色)。

 


    页面压缩:将不太使用的内存数据进行压缩,存入压缩内存,系统需要使用的时候,在压缩内存寻找并解压缩,供应用使用。

    内存的超配会给系统带来一定风险,当配置失误或运行内存超过物理内存,会导致虚拟机崩溃甚至影响物理机,说以内配的超配请谨慎。


===============end===========



文章转载自顾炯的云世界,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论