当前非常热门的Virtualization虚拟化技术的出现和应用其实已经有数十年的历史了,在早期,这个技术主要应用在服务器以及大型主机上面,现在,随着PC性能的不断增长,Virtualization也开始逐渐在x86架构的个人电脑上流行起来。
虚拟化技术将各种资源虚拟出多台主机,以提高这些资源的共享率和利用率
虚拟化可以将IT环境改造成为更加强大、更具弹性、更富有活力的架构。通过把多个操作系统整合到一台高性能服务器上,最大化利用硬件平台的所有资源,用更少的投入实现更多的应用,还可以简化IT架构,降低管理资源的难度,避免IT架构的非必要扩张。客户虚拟机的真正硬件无关性还可以实现虚拟机的运行时迁移,可以实现真正的不间断运行,从而最大化保持业务的持续性,而不用为购买超高可用性平台而付出高昂的代价。
在我们常见的x86架构上,核心指令集已经几乎20年都没有什么变化了,但Intel和AMD两个伟大的公司却一直在往其中添加重大的技术改进,使其继续保持着新鲜和活力,这些激动人心的改进包括增强内存寻址能力的64位扩展、处理图形的更多指令以及浮点计算的增强等等。
其中和虚拟化技术最为相关的是:Intel和AMD引入了芯片级的虚拟化辅助技术,这将最终使得虚拟化从市场宣传走入广泛的现实应用。
Intel Virtualization Technology自从在Pentium D 9xx系列CPU上出现已经很有一段时日了,然而我们很少看到有相关的技术介绍和性能分析,因此我们IT168评测中心就意图对这方面一探究竟。
在讨论Intel Virtualization Technology之前,我们先要看看通常情况下的虚拟化如何实现——一般而言,我们谈论的是软件虚拟化技术,大型机内置的硬件虚拟化不在讨论之例。
通常的虚拟化具有三种不同的实现形式,这些形式的区别主要在于用于管理各个虚拟机的VMM (Virtual Machine Monitor,虚拟机监视器)或者Hypervisor(监控者)的所在位置、功能、实现方式有所不同。
Full Virtualization 完全虚拟化
完全虚拟化技术也就是表中的“Virtual Machine”,这种技术在虚拟机和底层硬件之间建立的抽象层:Hypervisor来管理各个虚拟机。通过Hypervisor,完全虚拟化技术模拟出多个包括所有硬件的完整的虚拟硬件平台,因此完全虚拟化技术几乎能让兼容所有的操作系统(一些特别的条件下,甚至指令集不同都可以),而这些客户操作系统并不知道自己运行在虚拟化环境下。完全虚拟化的缺点,中间层的代码转换会给系统带来开销。VMware和微软的Virtual PC/Virtual Server是代表该方法的两个商用产品,而基于核心的虚拟机(KVM)是面向Linux系统的开源产品。
Para-Virtualization 部分虚拟化
Para-Virtualization也叫做准虚拟化,完全虚拟化要求Hypervisor管理各个虚拟服务器,并提供代码级别的翻译转换,因此负担沉重。部分虚拟化就是为了减轻这种负担:改动客户操作系统,集成与Hypervisor协同工作的界面,从而提升了性能。部分虚拟化的著名例子有Xen,这是一个开源准虚拟化技术,BSD、Linux、Solaris及其他开源操作系统都对其进行了集成。
OS Virtualization 操作系统层虚拟化
操作系统层虚拟化没有独立的Hypervisor层,主机操作系统负责在多个虚拟服务器之间分配硬件资源,这种虚拟化方式速度最快,不过操作系统的类型受到了严格的限制。Solaris Container和面向Linux的Virtuozzo/OpenVZ是这方面的例子。
软件虚拟化主要的问题是性能和隔离性。Full Virtualization完全虚拟化技术可以提供较好的客户操作系统独立性,不过其性能不高,在不同的应用下,可以消耗掉主机10%~30%的资源。而OS Virtualization可以提供良好的性能,然而各个客户操作系统之间的独立性并不强。无论是何种软件方法,隔离性都是由Hypervisor软件提供的,过多的隔离必然会导致性能的下降。
这些问题主要跟x86设计时就没有考虑虚拟化有关。我们先来看看x86处理器的Privilege特权等级设计。
x86架构为了保护指令的运行,提供了指令的4个不同Privilege特权级别,术语称为Ring,从Ring 0~Ring 3。Ring 0的优先级最高,Ring 3最低。各个级别对可以运行的指令有所限制,例如,GDT,IDT,LDT,TSS等这些指令就只能运行于Privilege 0,也就是Ring 0。要注意Ring/Privilege级别和我们通常认知的进程在操作系统中的优先级并不同。
操作系统必须要运行一些Privilege 0的特权指令,因此Ring 0是被用于运行操作系统内核,Ring 1和Ring 2是用于操作系统服务,Ring 3则是用于应用程序。然而实际上并没有必要用完4个不同的等级,一般的操作系统实现都仅仅使用了两个等级,即Ring 0和Ring 3,如图所示:
也就是说,在一个常规的x86操作系统中,系统内核必须运行于Ring 0,而VMM软件以及其管理下的Guest OS却不能运行于Ring 0——因为那样就无法对所有虚拟机进行有效的管理,就像以往的协同式多任务操作系统(如,Windows 3.1)无法保证系统的稳健运行一样。在没有处理器辅助的虚拟化情况下,挑战就是采用Ring 0之外的等级来运行VMM (Virtual Machine Monitor,虚拟机监视器)或Hypervisor,以及Guest OS。
现在流行的解决方法是Ring Deprivileging(暂时译为特权等级下降),并具有两种选择:客户OS运行于Privilege 1(0/1/3模型),或者Privilege 3(0/3/3模型)。
无论是哪一种模型,客户OS都无法运行于Privilege 0,这样,如GDT,IDT,LDT,TSS这些特权指令就必须通过模拟的方式来运行,这会带来很明显的性能问题。特别是在负荷沉重、这些指令被大量执行的时候。
同时,这些特权指令是真正的“特权”,隔离不当可以严重威胁到其他客户OS,甚至主机OS。Ring Deprivileging技术使用IA32架构的Segment Limit(限制分段)和Paging(分页)来隔离VMM和Guest OS,不幸的是EM64T的64bit模式并不支持Segment Limit模式,要想运行64bit操作系统,就必须使用Paging模式。
对于虚拟化而言,使用Paging模式的一个致命之处是它不区分Privileg 0/1/2模式,因此客户机运行于Privileg 3就成为了必然(0/3/3模型),这样Paging模式才可以将主机OS和客户OS隔离开来,然而在同一个Privileg模式下的不同应用程序(如,不同的虚拟机)是无法受到Privileg机构保护的,这就是目前IA32带来的隔离性问题,这个问题被称为Ring Compression。
IA32不支持VT,就无法虚拟64-bit客户操作系统
这个问题的实际表现是:VMware在不支持Intel VT的IA32架构CPU上无法虚拟64-bit客户操作系统,因为无法在客户OS之间安全地隔离。
我们谈到了目前IA32架构采用Ring等级带来的虚拟化难题,自然而言地,我们可以预料到Intel Virtualization Technology可以解决这些问题。
不错,Intel VT就是为此而生!
Intel VT下面的VMM其实可以认为就是主机操作系统
作为一个芯片辅助(Chip-Assisted)的虚拟化技术,VT可以同时提升虚拟化效率和虚拟机的安全性,下面我们就来看看Intel VT带来了什么架构上的变迁。我们谈论的主要是IA32上的VT技术,一般称之为VT-x,而在Itanium平台上的VT技术,被称之为VT-i。
VT-x将IA32的CU操作扩展为两个forms(窗体):VMX root operation(根虚拟化操作)和VMX non-root operation(非根虚拟化操作),VMX root operation设计来供给VMM/Hypervisor使用,其行为跟传统的IA32并无特别不同,而VMX non-root operation则是另一个处在VMM控制之下的IA32环境。所有的forms都能支持所有的四个Privileges levels,这样在VMX non-root operation环境下运行的虚拟机就能完全地利用Privilege 0等级。
两个世界:VMX non-root和VMX root
和一些文章认为的很不相同,VT同时为VMM和Guest OS提供了所有的Privilege运行等级,而不是只让它们分别占据一个等级:因为VMM和Guest OS运行于不同的两个forms。
由此,GDT、IDT、LDT、TSS等这些指令就能正常地运行于虚拟机内部了,而在以往,这些特权指令需要模拟运行。而VMM也能从模拟运行特权指令当中解放出来,这样既能解决Ring Aliasing问题(软件运行的实际Ring与设计运行的Ring不相同带来的问题),又能解决Ring Compression问题,从而大大地提升运行效率。Ring Compression问题的解决,也就解决了64bit客户操作系统的运行问题。
为了建立这种两个虚拟化窗体的架构,VT-x设计了一个Virtual-Machine Control Structure(VMCS,虚拟机控制结构)的数据结构,包括了Guest-State Area(客户状态区)和Host-State Area(主机状态区),用来保存虚拟机以及主机的各种状态参数,并提供了VM entry和VM exit两种操作在虚拟机与VMM之间切换,用户可以通过在VMCS的VM-execution control fields里面指定在执行何种指令/发生何种事件的时候,VMX non-root operation环境下的虚拟机就执行VM exit,从而让VMM获得控制权,因此VT-x解决了虚拟机的隔离问题,又解决了性能问题。
我们可以看到VT带来的CPU内部运行架构的重大改变,然而在实际上用户可能完全不能感受出来,假如用户不能感受到实际操作上有所改变,或者性能没有增长,那么这个技术有没有用就很难说。因此我们实际测试了Intel VT技术的性能表现。
为了搭建一个虚拟化环境,我们选用了VMware Server 1.0.3虚拟机软件。主流的虚拟机软件都开始支持x86虚拟化技术了——包括Intel VT和AMD-V。
软件虚拟化领域的巨头VMware的产品是完全虚拟化的著名例子,一般的VMware Workstation和VMware Server都属于Hosted Architecture寄居架构,而企业级产品VMware ESX Server则属于Bare Metal Architecture裸金属架构,这种架构在商业化产品上很难得,可以充分地发挥硬件的威力。我们使用VMware Server的原因是:易于使用。ESX Server难以配置。
Microsoft Virtual Server 2005 R2发布也有了一段时日,虽然仍不如VMware完善,不过提供了一些VMware不能提供的有趣特性。
Xen一般应用在Unix类Unix环境。
VMware Server包含了很多组件。
Intel方只有在支持VT的CPU上才能安装64-bit客户操作系统。 强大的网络功能是VMware的特色:两个VMware虚拟网卡。VMware可以实现非常复杂的虚拟化网络环境。 |
可以直接存取物理磁盘也是一个独特的优势,这可以带来性能上的提升。
一般而言,预先分配所有的磁盘空间(上一个选框)和分割磁盘为2GB的文件(下一个选框)可以提升性能。
SCSI类型的虚拟磁盘在实际使用SCSI的时候可以提供不错的性能,同时,在建立服务器群集的时候,这是必须的。
|
提供虚拟SMP的支持,最多虚拟2个处理器(在硬件不支持SMP的时候都可以)。
同时运行两个虚拟机,VMware就建立两个VMware Server VMX进程。
每个虚拟机虚拟了两个CPU,因此每个VMware Server VMX进程就具有两个虚拟CPU线程,并分布在我们硬件的两个CPU核心上。
|
我们分别在Window Server 2003 R2 Enterprise Edition SP2的32bit和64bit环境下进行了测试——主机操作系统和客户操作系统都分别采用了这两种操作系统,并再分别测试了VT和无VT下的表现。主机的性能也进行了测试。 对于虚拟机应用而言,CPU性能、内存性能、IO性能是最重要的,因此我们选用了数种测试硬件来测试CPU性能、内存性能和磁盘性能,这只是一个初步的测试(尽管测试起来也比较复杂),如网络IO性能的测试也很重要,不过并不在今次测试的范围内。 |
CPU性能 在仅运行单个虚拟机的情况下,理论测试表明,在32bit主机操作系统下打开VT并没有性能上的优势——64bit下则相反,打开VT可以获得更好的CPU性能。 虽然VMware虚拟出来的显卡并不能支持“硬件”3D操作,不过OpenGL仍然可以运行,我们可以看出其虚拟OpenGL运行的性能非常之低,这时VT在32bit下的CPU表现不错。 总体而言,VT在CPU性能上没有显示出什么特别的地方,看来VT须要在更大的虚拟机负荷下才能表现出其性能上的优势。 内存性能 由于虚拟架构改变,VT下的内存性能表现非常好,如WinRAR这样的成绩非常突出。 磁盘性能 虚拟机情况下的磁盘性能非常之强劲,这是因为相关的数据很容易地就可以缓冲的缘故,这需要大量的内存支持。 这是我们虚拟机所在的硬盘HD Tach RW测试成绩,虚拟机的虚拟磁盘都位于这个WD3200YS的前端。 32bit Host OS/32bit Guest OS,VT打开下的HD Tach RW,读写速度和WDC3200YS前段速度一致,而突发速率则要高出不少。 32bit Host OS/64bit Guest OS下的突发传输更快,达到了349.1MB/s,这实际上表现了64bit系统比32bit系统的内存性能更加强劲。 64bit Host OS/32bit Guest OS,没有打开VT的情况下,也能提供很不错的突发速度:300.5MB/s。 64bit Host OS/32bit Guest,打开VT之后与上面对比,突发略有下降。 64bit性能 毫无疑问,64bit下可以提供更好的CPU性能、内存性能。 |
由于使用了负荷并不算强的理论测试软件,因此仅能测试架构带来的理论性能表现:CPU理论性能方面并无太大差别,而内存性能则使用VT后具有明显的提升。
在Intel CPU上,通过VT的支持,可以实现如图的应用
同时,Intel的Long模式64bit无法提供内存隔离所需要的足够保护措施,而通过Intel VT技术,则能解决这个问题,因此Intel CPU只有具有VT技术的时候才能运行64bit虚拟机。更好的隔离性或许用户一眼无法看到,然而当客户操作系统异常崩溃的时候,你才可以感觉到它的用处。
VMware可以建立复杂的虚拟网络环境,这些都可以在同一台主机上实现
VT技术通过为VMM提供了一个单独的VMX root operation环境,与普通虚拟机的VMX non-root operation环境隔离开来,通过让虚拟机也能执行Privilege 0特权指令,降低虚拟代码转换的损耗来达到提升性能的目的,测试中的负载很低,因此并没有体现出什么优势。我们预计在如上图般繁重复杂的虚拟环境下VT技术可以表现出明显的优势,频繁的虚拟机切换、特权指令执行、虚拟中断等,可以让VT架构得到充分的发挥。
在3~4个虚拟机的普通CPU负载下,VMware有望从芯片辅助的虚拟化技术中获益,我们期望在下一篇文章中对ESX Server 3.0进行测试,ESX看起来可以充分利用新的处理器特性,应该会有大量的性能提升。
以前的Vanderpool,现在的Intel Virtualization Technlogogy已经消除了困扰x86虚拟化厂商很长时间的许多硬件难题,提供了更好的性能和隔离/安全性,这也意味着所有聪明的技术设计人员能够最终实现自己的梦想:通过解决性能和管理问题来将服务器虚拟化成熟地提供给各种应用环境。现在,虚拟化市场正在向成熟稳步迈进,更多的桌面用户、企业用户将可以享受这个“免费”的虚拟化技术带来的好处。