虚拟化类型
在虚拟化蓬勃发展的这些年里,虚拟化可以根据不同划分标准进行分类,包括全虚拟化,CPU 虚拟化,硬件虚拟化,服务器虚拟化,桌面虚拟化等等。我们通常所说的虚拟化主要是指平台虚拟化技术,通过使用 Hypervisor,隐藏特定计算平台的实际物理特性,为用户提供抽象的、统一的、模拟的计算环境(即虚拟机)。
这种分类并不是绝对的,一个优秀的虚拟化软件往往融合了多项技术。例如 VMware Workstation 是一个著名的全虚拟化的 VMM,但是它使用了一种被称为动态二进制翻译的技术把对特权状态的访问转换成对影子状态的操作,从而避免了低效的 Trap-And-Emulate (陷入-模拟)的处理方式,这与半虚拟化相似,只不过半虚拟化是静态地修改程序代码。对于半虚拟化而言,如果能利用硬件特性,那么虚拟机的管理将会大大简化,同时还能保持较高的性能。
下面分别介绍四类主流的分类方法:
从虚拟化的层次划分,主要分为软件辅助的虚拟化和硬件辅助的虚拟化。
- 软件辅助虚拟化:通过软件的方法,让客户机的特权指令陷入异常,从而触发宿主机进行虚拟化。主要使用的技术就是优先级压缩和二进制代码翻译。
- 硬件辅助虚拟化:是指在 CPU 中加入新的指令集和处理器运行模式,完成虚拟化操作系统对硬件资源的的直接调用。典型技术指的是 Intel VT,AMD-V。
从虚拟平台角度分为全虚拟化和半虚拟化
全虚拟化
全虚拟化是指虚拟机模拟了完整的底层硬件,包括处理器、物理内存、时钟、外设等,使得为原始硬件设计的操作系统或其它系统软件完全不做任何修改就可以在虚拟机中运行。操作系统与真实硬件之间的交互可以看成是通过一个预先规定的硬件接口进行的。全虚拟化 VMM 以完整模拟硬件的方式提供全部接口(同时还必须模拟特权指令的执行过程)。
咱们举例说明一下,在 x86 体系结构中,对于操作系统切换进程页表的操作,真实硬件通过提供一个特权 CR3 寄存器来实现该接口,操作系统只需执行 "mov pgtable,%%cr3" 汇编指令即可。
全虚拟化 VMM 必须完整地模拟该接口执行的全过程。如果硬件不提供虚拟化的特殊支持,那么这个模拟过程将会十分复杂一般而言,VMM 必须运行在最高优先级来完全控制主机系统,而 Guest OS 需要降级运行,从而不能执行特权操作。当 Guest OS 执行前面的特权汇编指令时,主机系统产生异常(General Protection Exception),执行控制权重新从 Guest OS 转到 VMM 手中。VMM 事先分配一个变量作为影子 CR3 寄存器给 Guest OS,将 pgtable 代表的客户机物理地址(Guest Physical Address)填入影子 CR3 寄存器,然后 VMM 还需要 pgtable 翻译成主机物理地址(Host Physical Address)并填入物理 CR3 寄存器,最后返回到 Guest OS中。随后 VMM 还将处理复杂的 Guest OS 缺页异常(Page Fault)。
全虚拟化不需要更改 Guest OS,兼容性好。典型的代表有 Vmware WorkStation,ESX Server 早期版本,Microsoft Virtrual Server。
半虚拟化
半虚拟化通过修改 Guest OS 部分访问特权状态的代码以便直接与 VMM 直接交互。在半虚拟化虚拟机中,部分硬件接口以软件的形式提供给客户机操作系统,这可以通过 Hypercall(VMM 提供给 Guest OS 的直接调用,与系统调用类似)的方式来提供,所以也被称为超虚拟化。
例如,Guest OS 把切换页表的代码修改为调用 Hypercall 来直接完成修改影子 CR3 寄存器和翻译地址的工作。
依靠这些指令可以直接通过 Hypervisor 层调用硬件资源,从而免除了 Hypervisor 层转换指令的开销,由于不需要产生额外的异常和模拟部分硬件执行流程,半虚拟化可以大幅度提高性能,半虚拟化的典型代表有 Microsoft Hyper-V,Vmware 的 vSphere。
硬件辅助虚拟化
指借助硬件(主要是主机处理器)的支持来实现高效的全虚拟化。例如有了 Intel-VT 技术的支持,Guest OS 和 VMM 的执行环境自动地完全隔离开来,Guest OS 有自己的“全套寄存器”,可以直接运行在最高级别。因此在上面的例子中,Guest OS 能够执行修改页表的汇编指令。Intel-VT 和 AMD-V 是目前 x86 体系结构上可用的两种硬件辅助虚拟化技术。
虚拟化 VMM 的实现结构来划分
从虚拟化 VMM 的实现结构来看,可以分为裸金属虚拟化,宿主型虚拟化和混合虚拟化,接下来咱们分别详细介绍一下。
裸金属型虚拟化
指直接在底层硬件上安装VMM 作为 Hypervisor 接管,Hypervisor 将负责管理所有的资源和虚拟环境支持。
该模型中,VMM 可以看作一个为虚拟化而生的完整的操作系统,掌控有所有资源(CPU,内存,I/O 设备)。VMM 承担管理资源的重任,其还需向上提供 VM 用于运行 Guest OS,因此 VMM 还负责虚拟环境的创建和管理。
它主要实现两个基本功能,其一是识别、捕获和响应虚拟机所发出的 CPU 特权指令或保护指令;其二是负责处理虚拟机队列和调度,并将物理硬件的处理结果返回给相应的虚拟机。这种结构问题是,硬件设备多种多样,VMM 不能把所有的设备驱动都一一实现,所以此模型支持有限的设备。如下图所示:
优点:因 VMM 同时具有物理资源的管理功能和虚拟化功能,故虚拟化的效率会较高;安全性方面,VM 的安全只依赖于 VMM 的安全。
缺点:因 VMM 完全拥有物理资源,因此,VMM 需要进行物理资源的管理,包括设备的驱动,而设备驱动的开发工作量是很大的,这对 VMM 是个很大的挑战。
宿主模型虚拟化
此模型的物理资源由 Host OS(例如 Windows, Linux etc.)管理,实际的虚拟化功能由 VMM 提供,其通常是 Host OS 的独立内核模块(有的实现还含用户进程,如负责 I/O 虚拟化的用户态设备模型)。VMM 通过调用 Host OS 的服务来获得资源,实现 CPU,内存和 I/O 设备的虚拟化。VMM 创建出 VM 后,通常将 VM 作为 Host OS 的一个进程参与调度。如下图所示:
如上图所示,VMM 模块负责 CPU 和内存虚拟化,由 ULM 请求 Host OS 设备驱动,实现 I/O 设备的虚拟化。
优点:可以充分利用现有 OS 的设备驱动,VMM 无需自己实现大量的设备驱动,轻松实现 I/O 设备的虚拟化。
缺点:因资源受 Host OS 控制,VMM 需调用 Host OS 的服务来获取资源进行虚拟化,其效率和功能会受到一定影响。
采用该结构的 VMM 有:VMware Workstation,VMWare Server (GSX),Virtual PC,Virtual Server,KVM(早期)。
混合模型虚拟化
就是以上两种模型的混合,这种模型没有独立的 Hypervisor 层。相反,主机操作系统本身就负责在多个虚拟服务器之间分配硬件资源,并且让这些服务器彼此独立。
如果使用操作系统层虚拟化,所有虚拟服务器必须运行同一操作系统(不过每个实例有各自的应用程序和用户账户),虚拟机运行在传统操作系统上,创建一个独立的虚拟化实例,指向底层托管操作系统,VMM 直接管理硬件,但是会让出一定的设备的控制权,交给运行在特权上的虚拟机来管理。VMM 只负责 CPU 和内存的虚拟化,I/O 设备的虚拟化由 VMM 和特权 OS 共同完成。
优点:可利用现有 OS 的 I/O 设备驱动;VMM 直接控制 CPU 和内存等物理资源,虚拟化效率较高;若对特权 OS 的权限控制得当,虚拟机的安全性只依赖于 VMM。
缺点:因特权 OS 运行于 VM 上,当需要特权 OS 提供服务时,VMM 需要切换到特权 OS,这里面就产生上下文切换的开销和性能降低。
采用该结构的 VMM 有:Xen,SUN Logical Domain。
应用领域进行划分
从虚拟化在云计算的应用领域进行划分,可分为服务器虚拟化(即计算虚拟化),网络虚拟化,存储虚拟化,应用程序虚拟化,平台虚拟化,桌面虚拟化
- 服务器虚拟化:就是将一台服务器虚拟成多台服务器进行使用,服务器虚拟化是基础架构即服务(IaaS)的基础。
- 网络虚拟化:笼统来讲,包括 VLAN、VPN、VPLS、MPLS、LISP、Virtual routers、VRFs 等在内的都可以认为是网络虚拟化的某种表现形式。但当前新兴的网络虚拟化概念从深度、广度和影响上都远远超过了以上的技术。网络虚拟化简单说就是把网络层的一些功能从硬件中剥离出来,新建立所谓的网络虚拟层。
- 存储虚拟化:简单来说就是将整个云系统的存储资源进行统一整合管理,再为不同用户分配各自的存储空间。
- 应用程序虚拟化:简单来说就是把应用程序对底层硬件系统和硬件的依赖抽象出来,从而解除应用程序与 OS 和硬件的耦合关系。应用程序运行在本地应用的虚拟化环境中,这个环境为应用程序屏蔽了底层可能和其他应用产生冲突的内容。应用程序虚拟化是(SaaS)的基础。
- 平台虚拟化:是集成各种开发资源虚拟出的一个面向开发人员的统一接口,软件开发人员可以方便的在这个平台上开发各种应用并嵌入云计算中,使其成为新的云服务供给用户使用。
- 桌面虚拟化:将用户的桌面环境与其使用的终端设备进行解耦。服务器上的存放每个人的完整桌面环境。用户可以使用具有足够处理功能和显示功能的不同终端设备通过网络访问该桌面。