虚拟化软件架构分类
服务器虚拟化是云计算非常关键的技术之一,虚拟化的含义很广泛,包括服务器、存储、网络以及数据中心虚拟化。其宗旨就是将任何一种形式的资源抽象成另一种形式的技术都是虚拟化。今天我们讨论一下服务器虚拟化架构的分类。
寄居虚拟化: 虚拟化管理软件作为底层操作系统(Windows或Linux等)上的一个普通应用程序,然后通过其创建相应的虚拟机,共享底层服务器资源。
裸金属虚拟化: Hypervisor是指直接运行于物理硬件之上的虚拟机监控程序。它主要实现两个基本功能:首先是识别、捕获和响应虚拟机所发出的CPU特权指令或保护指令;其次,它负责处理虚拟机队列和调度,并将物理硬件的处理结果返回给相应的虚拟机。
操作系统虚拟化: 没有独立的hypervisor层。相反,主机操作系统本身就负责在多个虚拟服务器之间分配硬件资源,并且让这些服务器彼此独立。一个明显的区别是,如果使用操作系统层虚拟化,所有虚拟服务器必须运行同一操作系统(不过每个实例有各自的应用程序和用户账户),Virtuozzo/OpenVZ/Docker等等。
混合虚拟化: 混合虚拟化模型同寄居虚拟化一样使用主机操作系统,但不是将管理程序放在主机操作系统之上,而是将一个内核级驱动器插入到主机操作系统内核。这个驱动器作为虚拟硬件管理器(VHM)协调虚拟机和主机操作系统之间的硬件访问。可以看到,混合虚拟化模型依赖于内存管理器和现有内核的CPU调度工具。就像裸金属虚拟化和操作系统虚拟化架构,没有冗余的内存管理器和CPU调度工具使这个模式的性能大大提高。
各种架构对比
裸金属虚拟化架构与混合虚拟化架构将是未来虚拟化架构发展的趋势,配合硬件辅助虚拟化可以达到接近物理机的运行性能。KVM、Hyper-V、VMware等主流服务器虚拟化都支持硬件辅助虚拟化。
内存虚拟化
在虚拟环境里,虚拟化管理程序就要模拟使得虚拟出来的内存仍符合客户机OS对内存的假定和认识。在虚拟机看来,物理内存要被多个客户OS同时使用;解决物理内存分给多个系统使用,客户机OS内存连续性问题。
要解决以上问题引入了一层新的客户机物理地址空间来让虚拟机OS看到一个虚拟的物理地址,并由虚拟化管理程序负责转化成物理地址给物理处理器执行。即给定一个虚拟机,维护客户机物理地址到宿主机物理地址之间的映射关系;截获虚拟机对客户机物理地址的访问,将其转化为物理地址。
内存全虚拟化: 虚拟化管理程序为每个Guest都维护一个影子页表,影子页表维护虚拟地址(VA)到机器地址(MA)的映射关系。
内存半虚拟化技术: 当Guest OS创建一个新的页表时,其会向VMM注册该页表,之后在Guest运行的时候,VMM将不断地管理和维护这个表,使Guest上面的程序能直接访问到合适的地址。
硬件辅助内存虚拟化: 在原有的页表的基础上,增加了一个EPT(扩展页表)页表,通过这个页表能够将Guest的物理地址直接翻译为主机的物理地址。