作者:
IT168评测中心 Lucifer 2007-06-25
【IT168
评测
中心】当前非常热门的Virtuali
z
ation虚拟化技术的出现和应用其实已经有数十年的历史了,在早期,这个技术主要应用在
服务器以及大型主机上面,现在,随着PC性能的不断增长,Virtuali z ation也开始逐渐在x86架构的个人电脑上流行起来。
虚拟化技术将各种资源虚拟出多台主机,以提高这些资源的共享率和利用率
虚拟化可以将IT环境改造成为更加强大、更具弹性、更富有活力的架构。通过把多个操作系统整合到一台高性能 服务器上,最大化利用硬件平台的所有资源,用更少的投入实现更多的应用,还可以简化IT架构,降低管理资源的难度,避免IT架构的非必要扩张。客户虚拟机的真正硬件无关性还可以实现虚拟机的运行时迁移,可以实现真正的不间断运行,从而最大化保持业务的持续性,而不用为购买超高可用性平台而付出高昂的代价。
在我们常见的x86架构上,核心指令集已经几乎20年都没有什么变化了,但 Intel和 AMD两个伟大的公司却一直在往其中添加重大的技术改进,使其继续保持着新鲜和活力,这些激动人心的改进包括增强内存寻址能力的64位扩展、处理图形的更多指令以及浮点计算的增强等等。
其中和虚拟化技术最为相关的是: Intel和 AMD引入了芯片级的虚拟化辅助技术,这将最终使得虚拟化从市场宣传走入广泛的现实应用。
Intel Virtualization Technology自从在Pentium D 9xx系列CPU上出现已经很有一段时日了,然而我们很少看到有相关的技术介绍和性能分析,因此我们IT168评测中心就意图对这方面一探究竟。
在讨论
Intel Virtuali
z
ation Technology之前,我们先要看看通常情况下的虚拟化如何实现――一般而言,我们谈论的是 软件虚拟化技术,大型机内置的硬件虚拟化不在讨论之例。
通常的虚拟化具有三种不同的实现形式,这些形式的区别主要在于用于管理各个虚拟机的VMM (Virtual Machine Monitor,虚拟机监视器)或者Hypervisor(监控者)的所在位置、功能、实现方式有所不同。
Full Virtualization 完全虚拟化
完全虚拟化技术也就是表中的“Virtual Machine”,这种技术在虚拟机和底层硬件之间建立的抽象层:Hypervisor来管理各个虚拟机。通过Hypervisor,完全虚拟化技术模拟出多个包括所有硬件的完整的虚拟硬件平台,因此完全虚拟化技术几乎能让兼容所有的操作系统(一些特别的条件下,甚至指令集不同都可以),而这些客户操作系统并不知道自己运行在虚拟化环境下。完全虚拟化的缺点,中间层的代码转换会给系统带来开销。 VMware和 微软的Virtual PC/Virtual Server是代表该方法的两个商用产品,而基于核心的虚拟机(KVM)是面向Li
nux系统的开源产品。
Para-Virtualization 部分虚拟化
Para-Virtualization也叫做准虚拟化,完全虚拟化要求Hypervisor管理各个虚拟
服务器,并提供代码级别的翻译转换,因此负担沉重。部分虚拟化就是为了减轻这种负担:改动客户操作系统,集成与Hypervisor协同工作的界面,从而提升了性能。部分虚拟化的著名例子有Xen,这是一个开源准虚拟化技术,BSD、Li nux、Solaris及其他开源操作系统都对其进行了集成。
OS Virtualization 操作系统层虚拟化
操作系统层虚拟化没有独立的Hypervisor层,主机操作系统负责在多个虚拟 服务器之间分配硬件资源,这种虚拟化方式速度最快,不过操作系统的类型受到了严格的限制。Solaris Container和面向Linux的Virtuozzo/OpenVZ是这方面的例子。
软件虚拟化主要的问题是性能和隔离性。Full Virtuali
z
ation完全虚拟化技术可以提供较好的客户操作系统独立性,不过其性能不高,在不同的应用下,可以消耗掉主机10%~30%的资源。而 OS Virtuali z ation可以提供良好的性能,然而各个客户操作系统之间的独立性并不强。无论是何种软件方法,隔离性都是由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 Virtuali
z
ation 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(客户状态区)和H
ost-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 Workst
ation和VMware Server都属于H
osted 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 H
ost OS/32bit Guest OS,VT打开下的HD Tach RW,读写速度和W
DC3200YS前段速度一致,而突发速率则要高出不少。
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性能、内存性能。
[IT168 评测中心观点]由于使用了负荷并不算强的理论测试 软件,因此仅能测试架构带来的理论性能表现:CPU理论性能方面并无太大差别,而内存性能则使用VT后具有明显的提升
在
Intel CPU上,通过VT的支持,可以实现如图的应用
同时, Intel的Long模式64bit无法提供内存隔离所需要的足够保护措施,而通过Intel VT技术,则能解决这个问题,因此Intel CPU只有具有VT技术的时候才能运行64bit虚拟机。更好的隔离性或许用户一眼无法看到,然而当客户操作系统异常崩溃的时候,你才可以感觉到它的用处。
VMware可以建立复杂的虚拟 网络环境,这些都可以在同一台主机上实现
VT技术通过为VMM提供了一个单独的VMX root oper
ation环境,与普通虚拟机的VMX non-root oper ation环境隔离开来,通过让虚拟机也能执行Privilege 0特权指令,降低虚拟代码转换的损耗来达到提升性能的目的,测试中的负载很低,因此并没有体现出什么优势。我们预计在如上图般繁重复杂的虚拟环境下VT技术可以表现出明显的优势,频繁的虚拟机切换、特权指令执行、虚拟中断等,可以让VT架构得到充分的发挥。
在3~4个虚拟机的普通CPU负载下,VMware有望从芯片辅助的虚拟化技术中获益,我们期望在下一篇文章中对ESX Server 3.0进行测试,ESX看起来可以充分利用新的处理器特性,应该会有大量的性能提升。
以前的Vanderpool,现在的Intel Virtuali
zation Technlogogy已经消除了困扰x86虚拟化厂商很长时间的许多硬件难题,提供了更好的性能和隔离/ 安全性,这也意味着所有聪明的技术设计人员能够最终实现自己的梦想:通过解决性能和管理问题来将
服务器虚拟化成熟地提供给各种应用环境。现在,虚拟化市场正在向成熟稳步迈进,更多的桌面用户、企业用户将可以享受这个“免费”的虚拟化技术带来的好处。
本文摘自IT168评测