《云计算核心技术剖析》第五章


1、虚拟化的概念:

虚拟化是通过使用虚拟化管理程序(VMM,也叫hypervisor)在一台物理机上虚拟和运行一台或多台虚拟机,而且这些虚拟机可以像真实机器一样运行各种软件,而且在资源占用方面虚拟机之间是相互隔离的,以保证运行的安全和稳定。


2、虚拟化管理程序的分类:

1)hypervisor类型

以类似操作系统的形式安装在硬件上面,主要用于服务器类的应用。代表有VMware的ESX和Xen。

2)托管类型

安装在传统的操作系统之上,其性能本身不如hypervisor。代表有VMware的workstation。


3、CPU虚拟化技术的分类:

经典的虚拟化方法:

现代计算机体系结构一般至少有两个特权级(即用户态和核心态,x86有4个特权级,分别是ring 0到ring 3)用来分割系统软件和应用软件。可读写系统的关键资源的指令称之为敏感指令。只能在处理器的最高特权级(内核态)执行的指令称之为特权指令,如果执行特权指令时处理器的状态不在内核态,会引发一个异常而交由系统软件来处理这个非法访问。

经典的虚拟化方法就是使用“特权解除”和“陷入 - 模拟”的方式。就是将Guest OS运行在非特权级,而将VMM运行在最高特权级(完全控制系统资源)。“解除”了Guest OS的特权级后,Guest OS的大部分指令仍可以在硬件上直接运行,只有执行到特权指令时,会引发异常并交由VMM处理(这个过程称之为“陷入”),VMM模拟处理器执行特权指令(VMM向处理器执行该特权指令,然后将结果通过VMM反馈给Guest OS),整个过程称为“陷入 - 模拟”。

很多非x86服务器很早已经利用该虚拟化方法支持虚拟化(虚拟化技术由来已久,早在20世纪60年代中期,IBM就推出了世界上第一台支持虚拟化技术的计算机IBM 7044。在接下来的几十年里,IBM system 360、IBM Z系列、IBM P系列和HP小型机都开始支持虚拟化技术,但是应用范围属于小众和高端)。但是由于x86架构处理器在设计初期并没有考虑到虚拟化(x86指令集中有若干条指令是需要被VMM捕获的敏感指令,但是却不是特权指令,“特权解除”并不能导致它们发生“陷入 - 模拟”),因此x86架构CPU无法只依赖经典的虚拟化方法实现完全虚拟化。


鉴于x86指令集自身的局限,针对x86的虚拟化实现大致分为两派:以VMware为代表的“全虚拟化”(full virtualization)和以Xen为代表的“半虚拟化/准虚拟化”(paravirtualization):

1)全虚拟化(full virtualization)

hypervisor/VMM方式。在客户操作系统和硬件之间捕捉和处理那些对虚拟机敏感的特权指令,是客户操作系统无需修改就能运行,速度回根据不同的实现而不同,但大致能满足客户的需求。知名的产品有:KVM、VMware ESX和VMware workstation。

VMware全虚拟化技术实现:“陷入(trap) - 模拟(emulation)”+“二进制翻译(binary translation)”

主要思想是在执行时将VM上执行的Guest OS指令翻译成x86指令集的一个子集,其中的敏感指令被替代成陷入指令。翻译过程与指令执行交叉进行,不含敏感指令的用户态程序可以不经翻译而直接执行。

2)半虚拟化(paravirtualization)

hypervisor/VMM方式。在虚拟机管理程序上运行的客户操作系统已经集成了与半虚拟化有关的代码,客户操作系统能够非常好地配合虚拟机管理程序来实现虚拟化。无需重新编译或捕捉特权指令,其性能非常接近物理机。最经典的产品就是Xen。微软的hyper-v也归属为半虚拟化。

3)硬件辅助虚拟化(hardware assisted virtualization)

是Intel/AMD等硬件厂商通过针对部分全虚拟化和半虚拟化使用到的软件技术进行硬件化来提高性能。由于通过硬件辅助虚拟化,将大量复杂的虚拟化逻辑从软件中抽离,硬件辅助虚拟化能够极大地简化虚拟化产品的架构。但是,硬件辅助虚拟化并非独创一派,而是常用于优化全虚拟化和半虚拟化产品。比如VMware workstation的6.0版本中引入了硬件辅助虚拟化技术,比如Intel的VT-x和AMD的AMD-V。用户可以选择是否开启硬件辅助虚拟化模式。主流的全虚拟化和半虚拟化产品都支持硬件辅助虚拟化,包括KVM、VMware ESX、Xen等。

硬件辅助虚拟化技术消除了操作系统的ring转换问题,降低了虚拟化门槛,支持任何操作系统的虚拟化而无需修改OS内核,得到了虚拟化软件厂商的支持。硬件辅助虚拟化技术已经逐渐消除软件虚拟化技术之间的差别,并成为未来的发展趋势。

比如Xen除了Domain0(运行修改过的Linux kernel)和DomainU PV Guest(运行修改过内核的操作系统)外,还提供DomainU HVM Guest(完全虚拟化,不需要修改客户机操作系统)。


4、内存虚拟化技术:



背景知识:

1、x86指令集:

x86指令集是Intel为其第一块16位CPU(i8086)专门开发的,IBM1981年推出的世界第一台PC机中的CPU—i8088(i8086简化版)使用的也是X86指令,同时电脑中为提高浮点数据处理能力而增加的X87芯片系列数学协处理器则另外使用X87指令。以后就将X86指令集和X87指令集统称为X86指令集。虽然随着CPU技术的不断发展,Intel陆续研制出更新型的i80386、i80486直到今天,为了保证电脑能继续运行以往开发的各类应用程序以保护和继承丰富的软件资源,Intel公司所生产的所有CPU仍然继续使用X86指令集。所以它的CPU仍属于X86系列。由于Intel X86系列及其兼容CPU都使用X86指令集,所以就形成了今天庞大的X86系列及兼容CPU阵容。


2、CPU