《虚拟化与云计算》阅读笔记2-服务器虚拟化的核心技术

 

核心技术

       服务器虚拟化实质是对硬件资源的虚拟化:CPU、内存、设备与I/O。此外,为了实现更好的动态资源整合,当前的服务器虚拟化大多支持虚拟机的实时迁移。

1. CPU虚拟化

       CPU虚拟化技术把物理CPU抽象成虚拟CPU,任意时刻一个物理CPU只能运行一个虚拟CPU的指令。

       每个客户操作系统可以使用一个或多个虚拟CPU。在这些客户操作系统之间,虚拟CPU的运行相互隔离,互不影响。

       x86架构的操作系统被设计成直接运行在物理机器上,这些操作系统在设计之初都假设其完整地拥有底层物理机硬件,尤其是CPU。

       86体系结构中,处理器有4个运行级别,分别为Ring 0、Ring 1、Ring 2和Ring 3。其中,Ring 0级别具有最高权限,可以执行任何指令而没有限制。运行级别从Ring 0到Ring 3依次递减。应用程序一般运行在Ring 3级别。操作系统内核态代码运行在Ring 0级别,因为它需要直接控制和修改CPU的状态,而类似这样的操作需要运行在Ring0级别的特权指令才能完成。

       86体系结构中实现虚拟化,需要在客户操作系统层以下加入虚拟化层,来实现物理资源的共享。可见,这个虚拟化层运行在Ring 0级别,而客户操作系统只能运行在Ring 0以上的级别。

客户操作系统中的特权指令,如中断处理和内存管理指令,如果不运行在Ring 0级别将会具有不同的语义,产生不同的效果,或者根本不产生作用。由于这些指令的存在,使虚拟化x86体系结构并不那么轻而易举。问题的关键在于这些在虚拟机里执行的敏感指令不能直接作用于真实硬件之上,而需要被虚拟机监视器接管和模拟。

目前,为了解决x86体系结构下的CPU虚拟化问题,业界提出了全虚拟化(Full-virtualization)和半虚拟化(Para-virtualization)两种不同的软件方案,如图2.5所示。除了通过软件的方式实现CPU虚拟化外,业界还提出了在硬件层添加支持功能的硬件辅助虚拟化(Hardware AssistedVirtualization)方案来处理这些敏感的高级别指令。

全虚拟化采用二进制代码动态翻译技术(Dynamic Binary Translation)来解决客户操作系统的特权指令问题,如图2.5(2)所示。所谓二进制代码动态翻译,是指在虚拟机运行时,在敏感指令前插入陷入指令,将执行陷入到虚拟机监视器中。虚拟机监视器会将这些指令动态转换成可完成相同功能的指令序列后再执行。通过这种方式,全虚拟化将在客户操作系统内核态执行的敏感指令转换成可以通过虚拟机监视器执行的具有相同效果的指令序列,而对于非敏感指令则可以直接在物理处理器上运行。形象地说,在全虚拟化中,虚拟机监视器在关键的时候“欺骗”虚拟机,使得客户操作系统还以为自己在真实的物理环境下运行。全虚拟化的优点在于代码的转换工作是动态完成的,无需修改客户操作系统,因而可以支持多种操作系统。然而,全虚拟化中的动态转换需要一定的性能开销。MicrosoftVirtual PC、Microsoft Virtual Server、VMware WorkStation和VMware ESXServer的早期版本都采用全虚拟化技术。

与全虚拟化不同,半虚拟化通过修改客户操作系统来解决虚拟机执行特权指令的问题。在半虚拟化中,被虚拟化平台托管的客户操作系统需要修改其操作系统,将所有敏感指令替换为对底层虚拟化平台的超级调用(Hypercall),如图2.5(3)所示。虚拟化平台也为这些敏感的特权指令提供了调用接口。形象地说,半虚拟化中的客户操作系统被修改后,知道自己处在虚拟化环境中,从而主动配合虚拟机监视器,在需要的时候对虚拟化平台进行调用来完成敏感指令的执行。在半虚拟化中,客户操作系统和虚拟化平台必须兼容,否则虚拟机无法有效地操作宿主物理机,所以半虚拟化对不同版本操作系统的支持有所限制。Citrix的Xen、VMware 的ESX Server和Microsoft的Hyper—V的最新版本都采用了半虚拟化技术。

无论是全虚拟化还是半虚拟化,它们都是纯软件的CPU虚拟化,不要求对x86架构下的处理器本身进行任何改变。但是,纯软件的虚拟化解决方案存在很多限制。不论是全虚拟化的二进制翻译技术,还是半虚拟化的超级调用技术,这些中间环节必然会增加系统的复杂性和性能开销。此外,在半虚拟化中,对客户操作系统的支持受到虚拟化平台的能力限制。

由此,硬件辅助虚拟化应运而生。这项技术是一种硬件方案,支持虚拟化技术的CPU加入了新的指令集和处理器运行模式来完成与CPU虚拟化相关的功能。目前,Intel公司和AMD公司分别推出了硬件辅助虚拟化技术Intel VT和AMD-V,并逐步集成到最新推出的微处理器产品中。以IntelVT技术为例,支持硬件辅助虚拟化的处理器增加了一套名为虚拟机扩展(Virtual Machine Extensions,VMX)的指令集,该指令集包括十条左右的新增指令来支持与虚拟化相关的操作。此外,Intel VT为处理器定义了两种运行模式,根模式(root)和非根模式(non-root)。虚拟化平台运行在根模式,客户操作系统运行在非根模式。由于硬件辅助虚拟化支持客户操作系统直接在其上运行,无需进行二进制翻译或超级调用,因此减少了相关的性能开销,简化了虚拟化平台的设计。目前,主流的虚拟化软件厂商也在通过和CPU厂商的合作来提高他们虚拟化产品的性能和兼容性。

2. 内存虚拟化

内存虚拟化技术把物理机的真实物理内存统一管理,包装成多个虚拟的物理内存分别供若干个虚拟机使用,使得每个虚拟机拥有各自独立的内存空间。在服务器虚拟化技术中,因为内存是虚拟机最频繁访问的设备,因此内存虚拟化与CPU虚拟化具有同等重要的地位。

在内存虚拟化中,虚拟机监视器要能够管理物理机上的内存,并按每个虚拟机对内存的需求划分机器内存,同时保持各个虚拟机对内存访问的相互隔离。从本质上讲,物理机的内存是一段连续的地址空间,上层应用对于内存的访问多是随机的,因此虚拟机监视器需要维护物理机里内存地址块和虚拟机内部看到的连续内存块的映射关系,保证虚拟机的内存访问是连续的、一致的。现代操作系统中对于内存管理采用了段式、页式、段页式、多级页表、缓存、虚拟内存等多种复杂的技术,虚拟机监视器必须能够支持这些技术,使它们在虚拟机环境下仍然有效,并保证较高的性能。

在讨论内存虚拟化之前,我们先回顾一下经典的内存管理技术。内存作为一种存储设备是程序运行所必不可少的,因为所有的程序都要通过内存将代码和数据提交到CPU进行处理和执行。如果计算机中运行的应用程序过多,就会耗尽系统中的内存,成为提高计算机性能的瓶颈。之前,人们通常利用扩展内存和优化程序来解决该问题,但是该方法成本很高。因此,虚拟内存技术诞生了。为了虚拟内存,现在所有基于x86架构的CPU都配置了内存管理单元(Memory Management Unit,MMU)和页表转换缓冲(TranslationLookaside Buffer,TLB),通过它们来优化虚拟内存的性能。总之,经典的内存管理维护了应用程序所看到的虚拟内存和物理内存的映射关系。

为了在物理服务器上能够运行多个虚拟机,虚拟机监视器必须具备管理虚拟机内存的机制,也就是具有虚拟机内存管理单元。由于新增了一个内存管理层,所以虚拟机内存管理与经典的内存管理有所区别。虚拟机中操作系统看到的“物理”内存不再是真正的物理内存,而是被虚拟机监视器管理的“伪”物理内存。与这个“物理”内存相对应的是新引入的概念——机器内存。机器内存是指物理服务器硬件上真正的内存。在内存虚拟化中存在着逻辑内存、“物理”内存和机器内存三种内存类型,如图2.6所示。而这三种内存的地址空间被称为逻辑地址、“物理”地址和机器地址。

在内存虚拟化中,逻辑内存与机器内存之间的映射关系是由内存虚拟化管理单元来负责的。内存虚拟化管理单元的实现主要有两种方法。

第一种是影子页表法,如图2.7(1)所示。客户操作系统维护着自己的页表,该页表中的内存地址是客户操作系统看到的“物理”地址。同时,虚拟机监视器也为每台虚拟机维护着一个对应的页表,只不过这个页表中记录的是真实的机器内存地址。虚拟机监视器中的页表是以客户操作系统维护的页表为蓝本建立起来的,并且会随着客户操作系统页表的更新而更新,就像它的影子一样,所以被称为“影子页表”。VMwareWorkstation、VMware ESX Server和KVM都采用了影子页表技术。

第二种是页表写入法,如图2.7(2)所示。当客户操作系统创建一个新页表时,需要向虚拟机监视器注册该页表。此时,虚拟机监视器将剥夺客户操作系统对页表的写权限,并向该页表写入由虚拟机监视器维护的机器内存地址。当客户操作系统访问内存时,它可以在自己的页表中获得真实的机器内存地址。客户操作系统对页表的每次修改都会陷入虚拟机监视器,由虚拟机监视器来更新页表,保证其页表项记录的始终是真实的机器地址。页表写入法需要修改客户操作系统,Xen是采用该方法的典型代表。

3. 设备与I/O虚拟化

除了处理器与内存外,服务器中其他需要虚拟化的关键部件还包括设备与I/O。设备与I/O虚拟化技术把物理机的真实设备统一管理,包装成多个虚拟设备给若干个虚拟机使用,响应每个虚拟机的设备访问请求和I/O请求。目前,主流的设备与I/O虚拟化都是通过软件的方式实现的。虚拟化平台作为在共享硬件与虚拟机之间的平台,为设备与I/O的管理提供了便利,也为虚拟机提供了丰富的虚拟设备功能。

以VMware的虚拟化平台为例,虚拟化平台将物理机的设备虚拟化,把这些设备标准化为一系列虚拟设备,为虚拟机提供一个可以使用的虚拟设备集合,如图2.8所示。值得注意的是,经过虚拟化的设备并不一定与物理设备的型号、配置、参数等完全相符,然而这些虚拟设备能够有效地模拟物理设备的动作,将虚拟机的设备操作转译给物理设备,并将物理设备的运行结果返回给虚拟机。这种将虚拟设备统一并标准化的方式带来的另一个好处就是虚拟机并不依赖于底层物理设备的实现。因为对于虚拟机来说,它看到的始终是由虚拟化平台提供的这些标准设备。这样,只要虚拟化平台始终保持一致,虚拟机就可以在不同的物理平台上进行迁移。

在服务器虚拟化中,网络接口是一个特殊的设备,具有重要的作用。虚拟服务器都是通过网络向外界提供服务的。在服务器虚拟化中每一个虚拟机都变成了一个独立的逻辑服务器,它们之间的通信通过网络接口进行。每一个虚拟机都被分配了一个虚拟的网络接口,从虚拟机内部看来就是一块虚拟网卡。服务器虚拟化要求对宿主操作系统的网络接口驱动进行修改。经过修改后,物理机的网络接口不仅要承担原有网卡的功能,还要通过软件虚拟出一个交换机,如图2.9所示。虚拟交换机工作于数据链路层,负责转发从物理机外部网络投递到虚拟机网络接口的数据包,并维护多个虚拟机网络接口之间的连接。当一个虚拟机与同一个物理机上的其他虚拟机通信时,它的数据包会通过自己的虚拟网络接口发出,虚拟交换机收到该数据包后将其转发给目标虚拟机的虚拟网络接口。这个转发过程不需要占用物理带宽,因为有虚拟化平台以软件的方式管理着这个网络。

4. 实时迁移技术

实时迁移(Live Migration)技术是在虚拟机运行过程中,将整个虚拟机的运行状态完整、快速地从原来所在的宿主机硬件平台迁移到新的宿主机硬件平台上,并且整个迁移过程是平滑的,用户几乎不会察觉到任何差异,如图2.10所示。由于虚拟化抽象了真实的物理资源,因此可以支持原宿主机和目标宿主机硬件平台的异构性。

实时迁移需要虚拟机监视器的协助,即通过源主机和目标主机上虚拟机监视器的相互配合,来完成客户操作系统的内存和其他状态信息的拷贝。实时迁移开始以后,内存页面被不断地从源虚拟机监视器拷贝到目标虚拟机监视器。这个拷贝过程对源虚拟机的运行不会产生影响。最后一部分内存页面被拷贝到目标虚拟机监视器之后,目标虚拟机开始运行,虚拟机监视器切换源虚拟机与目标虚拟机,源虚拟机的运行被终止,实时迁移过程实时迁移技术最初只应用在系统硬件维护方面。众所周知,数据中心的硬件需要定期地进行维护和更新,而虚拟机上的服务需要7×24不间断地运行。如果使用实时迁移技术,便可以在不宕机的情况下,将虚拟机迁移到另外一台物理机上,然后对原来虚拟机所在的物理机进行硬件维护。维护完成以后,虚拟机迁回到原来的物理机上,整个过程对用户是透明的。目前,实时迁移技术更多地被用做资源整合,通过优化的虚拟机动态调度方法,数据中心的资源利用率可以得到进一步提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值