简单而言,虚拟化(Virtulization)是表示计算机资源的抽象方法。通过虚拟化可以对包括基础设施,系统和软件等计算机资源的表示,访问和管理进行简化,并为这些资源提供标准的接口来接受输入和提供输出。
虚拟化技术有很多种,比如,网络虚拟化,内存的虚拟化,桌面虚拟化,应用虚拟化和虚拟内存等等。因为篇幅的原因,本系列将重点关注系统虚拟化,特别是X86平台。今后此系列当中提到的虚拟化皆指系统虚拟化。
通过使用虚拟化管理器(Virtual Machine Monitor,简称VMM)是在一台物理机上虚拟和运行一台或多台虚拟机(Virtual Machine,简称VM)。VMM主要有两种形式:
主要有那些用处呢?
由于采用技术的不同,可以将系统虚拟化分为五大类:
图1. 硬件仿真架构图
图2. 全虚拟化架构图
图3. 半虚拟化架构图
图4. 操作系统级架构图
根据个人的经验,我在性能,用户体验和使用场景这三方面对这五大类进行了比较,具体请看下图:
性能(和物理机速度之比) |
用户体验 |
形式 |
|
硬件仿真 | 30%- | 简单 | Hosted |
全虚拟化 | 30%-80%+ | 简单 | Hosted/Hypervisor |
半虚拟化 | 80%+ | 困难 | Hypervisor |
硬件辅助虚拟化 | 80%+ | 一般 | Hosted/Hypervisor |
操作系统级虚拟化 | 80% | 困难 | 类似于Hypervisor |
表1. 系统虚拟化五大类之间的比较
因为这表只是我笼统的经验之谈,仅供参考,特别在操作系统级虚拟化这块。
今后X86虚拟化技术的发展将会以硬件辅助虚拟化技术为主,同时以全虚拟化和半虚拟化技术为辅。
扩展阅读:
云计算、SaaS等基于服务的计算模式最近异常灼热。服务器虚拟化技术尤其是对低端廉价x86服务器的虚拟化已被公认为是实现这些计算模式的关键技术,对于能否廉价提供云计算、SaaS等服务至关重要。
服务器虚拟化已经成为当前企业IT架构中越来越重要的组成部分,可能仍然有不少企业的IT架构没有涉足服务器虚拟化这一领域,但我相信所有的IT主管都会关注这一技术的发展与进步。伴随着至强5600和7500的到来,英特尔在服务器互联的虚拟化方面也取得了重大突破。
Hypervisor 是一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。Hypervisor 也可叫做VMM( virtual machine monitor ),即虚拟机监视器。
Hypervisors是一种在虚拟环境中的“元”操作系统。他们可以访问服务器上包括磁盘和内存在内的所有物理设备。Hypervisors不但协调着这些硬件资源的访问,也同时在各个虚拟机之间施加防护。当服务器启动并执行Hypervisor时,它会加载所有虚拟机客户端的操作系统同时会分配给每一台虚拟机适量的内存,CPU,网络和磁盘。
Hypervisor是所有虚拟化技术的核心。 非中断地支持多工作负载迁移的能力是Hypervisor的基本功能。
目前市场上各种x86 管理程序(hypervisor)的架构存在差异,三个最主要的架构类别包括:
其中裸机型的Hypervisor最为常见,直接安装在硬件计算资源上,操作系统安装并且运行在Hypervisor之上。
一般来说,虚拟化技术大概可以分为以下四类:
目前服务器市场上主流产品都是基于完全虚拟化或者半虚拟化技术的。随着各厂家产品的改进,一般都支持半虚拟化和完全虚拟化,如Xen、Hyper-V。
硬件仿真技术能够虚拟出一台完整的计算机所需要的硬件集合,包括CPU指令集、BIOS、寄存器、内存、硬盘、光驱、网络和其它输入输出设备等。
硬件仿真技术是最彻底的虚拟化技术,在计算机的最底层仿真出各个硬件部件。彻底的虚拟方法,使得它也是执行性能最差的虚拟化技术,所以一般只作模拟实验、测试、研究之用,而不适合作服务器虚拟化产品。
通过硬件仿真平台,你可以在宿主系统上创建一个硬件 VM 来仿真所想要的硬件。使用硬件仿真的主要问题是速度会非常慢,因为每条指令都必须在底层硬件上进行仿真,因此速度减慢 100 倍的情况也并不稀奇。若要实现高度保真的仿真,包括周期精度、所仿真的 CPU 管道以及缓存行为,实际速度差距甚至可能会达到 1000 倍之多。
硬件仿真有自己的优点。例如,使用硬件仿真,您可以在一个 ARM 处理器主机上运行为 PowerPC 设计的操作系统,而不需要任何修改。您甚至可以运行多个虚拟机,每个虚拟器仿真一个不同的处理器。
硬件仿真的代表产品有Bochs和qemu。
与硬件仿真相对应,容器方法是最不彻底的虚拟化,它只是简单虚拟出了多个操作系统的软运行环境(在用户看来有多个同型OS同时运行),而没有像其它技术一样,虚拟出完整的计算机平台(CPU、内存、IO设备等)。这是专门为服务器虚拟化而提出的过渡技术。
这种技术在操作系统本身之上实现服务器的虚拟化。它只支持单个操作系统,将独立的服务器相互简单地隔离开来。优点是效率最高,缺点是隔离程度不好,而且只能是同一种操作系统。
这类技术的代表产品有:OpenVZ、Virtuozzo 等。
现在美国有很多廉价的VPS出售(如BurstNET),就是使用了这种虚拟技术。之所以廉价,是因为VPS服务商不遵诺言,过度地部署了VM,如一台物理主机上Host了几十台VPS。因为CPU和内存资源是动态分配的(是共享的,而不是独占的——太灵活了),隔离程度不高,技术上无从得知一台主机Host了多少VM,造成服务质量的不可控性。
Para-Virtualization 直译成中文是“在旁边的虚拟化”。形象地说就是:在虚拟化软件hypervisor上面跑着的诸多客户虚拟机(下称guest VMs或guest OSes,客户操作系统),在它们“旁边”还跑着一个特别OS,叫做“管理OS”或“管理VM”(the Administrative OS/VM,用Citrix Xen的术语叫做Dom0,用Microsoft Hyper-V的术语:the Parent Partition)。
这个“管理VM”是让系统管理员用来管理hypervisor的。客户所使用的是那些在它旁边跑的guest VMs(Citrix Xen叫做DomU,Microsoft Hyper-V叫做Child Partitions)。另外这个“管理OS”还采用native OS的方法管理整个硬件平台上的所有输入输出设备驱动器(IO device drivers),它里面包含了平台上所有输入输出设备驱动器。也就是说Para-Virtualization方法在hypervisor里不对设备驱动器做虚拟(emulation),而仅对CPU和内存做虚拟,所以Para-Virtualization又被翻译作“半虚拟化”。Para-Virtualization还有一个叫法:OS-Assisted-Virtualization,就是因为guest VMs需要“管理OS”协助。这可以形象地看作是guest OS自身不带有设备驱动器而“向旁寻找”帮助。
另外guest OS还会发出一小部分由于硬件不支持而无法被虚拟化的OS指令。在虚拟化理论中,这种不能被虚拟化的guest OS指令属于“低特权态部件发出的敏感指令”:处于低特权态(用户态)的guest OS如果对硬件发出这样的指令,则处于高特权态(内核态)的hypervisor必须先对这些指令进行检查作“无害化”处理后方能交给硬件机器做计算或处理服务。由于以前x86硬件设计上存在缺陷,这一类指令不能自动被hypervisor截获(trap)。对于这些不能自动被hypervisor截获的指令,Para-Virtualization技术采用了在guest OS中人为植入hypercalls的方法使程序流程主动进入hypervisor以获得“无害化”处理。由于需要在guest OS中植入这些hypercalls, 所以Para-Virtualization技术需要对guest OS内核作修改后方能使用于VM内。这一点被认为是Para-Virtualization技术的一个缺点:比如对于非开放源代码OS(如Windows 2000/XP)那就只有OS厂商才能制做guest OS。
半虚拟化的代表产品是Xen,Microsoft Hyper-V。Xen通过给Linux内核打补丁,使Host OS本身也运行在虚拟机上(叫做Domain 0),其它的虚拟机叫做Domain U(Domain U需要为XXen进行修改)。Hyper-V和Xen比较相似,Hyper-V目前集成在Windows 2008中,没启用Hyper-V时,只是一个普通的Windows 2008,一旦启用了Hyper-V,那么Hyper-V一开始就运行,而Windows 2008则在之上成为第一个虚拟机(叫做Parent partition,与Xen的Domain 0相似),在Hyper-V上运行的其它虚拟机应该也需要修改,不过Windows 2008已经修改过了所以可以在Hyper-V上运行。
对于前面提到的guest OS作为“低特权态部件发出的敏感指令”,VMware 找到了一个“可执行代码翻译”(binary translation)方法将这些指令的可执行代码转变为一系列新的指令顺序,翻译得到的新指令顺序不仅与原指令具有等价的语义,而且可以得到硬件虚拟化支持。这样一来就无需再人为在guest OS中植入hypercalls了,所以未经修改的guest OS内核可以直接跑在VM里面。而且guest OS更本无法分辨出自己到底是直接跑在机器硬件上还是在一个虚拟硬件的hypervisor上。
作为一个全虚拟化的hypervisor,VMware ESX将硬件平台上的所有的输入输出设备也都虚拟化了,所以ESX里面含有所有这些设备驱动器,guest OS无须从一个“管理OS”来获得设备驱动器服务。ESX仍然有“管理OS”,叫做the Management Console,其作用是让系统管理员管理ESX hypervisor,仅此而已。
虽然完全虚拟化的速度比硬件仿真的速度要快,但是其性能要低于裸硬件,因为中间经过了 hypervisor 的协调过程。因为多了一个敏感指令的翻译过程,其性能要比半虚拟化稍低。事物都是两面性的,缺点也即是优点,这使得客户操作系统(Guest OS)无需任何修改就可以直接运行。
传统的完全虚拟化的产品主要有Vmware ESX Server,qemu(qemu有两种模式,一种是硬件仿真,一种是完全虚拟化),VirtualBox,Virtual PC / Server,Parallel Workstation等。
目前支持硬件虚拟化的CPU技术有:Intel VT-x与AMD-V。这两家x86处理器厂商最近对处理器硬件作了修改,使前面提到的guest OS“低特权态部件发出的敏感指令”能够自动被hypervisor截获。所以在这种新机器上,Para-Virtualization就没有必要再对guest OS内核作修改,Full-Virtualization也无必要对guest OS做可执行代码翻译。所以我们也可以说,如果不考虑Para-Virtualization与Full-Virtualization在IO设备处理上还有不同之处,那么硬件协助的虚拟化技术已经取消了前两种虚拟化技术之间的差别:两者都可以被看作是全虚拟化技术。
Intel和AMD在对X86服务器硬件协助的虚拟化技术上还做了如下重要工作:统一管理了平台上输入输出设备对内存的直接访问(Direct Memory Access, DMA)。这改变了以前机器上输入输出设备可以自由任意对内存进行直接访问,这种“无政府主义”的危险状态(非常危险!)。用硬件协助的虚拟化技术对DMA作统一管理,这对于x86平台服务器虚拟化技术运用到云计算加强云计算安全方面有很重要的意义。前面我们提到硬件协助的虚拟化技术取消了Para-Virtualization与Full-Virtualization之间的差别,这样的说法没有考虑到两者在IO设备管理上的不同之处。其实正是在对IO设备DMA的统一管理方面,Citrix Xen或MS Hyper-V与VMware ESX有很不同的性质,在云服务安全上有明显的差异。
硬件辅助的虚拟化受到很多产品的支持,目前传统的完全虚拟化产品也都开始对硬件辅助的虚拟化进行支持,比如Vmware Workstation / Server和VirtualBox都开始支持VT和AMD-V,并且在它们上面想要运行64位的Guest OS还必须使用硬件辅助的虚拟化。另外,kvm是设计成硬件辅助的完全虚拟化的(kvm现在也可以通过补丁支持半虚拟化),Xen也能够支持硬件辅助的虚拟化了(终于可以在Xen上安装Windows了)。
Intel的VT(Virtual Technology)和AMD的AMD-V(AMD Virtualization)技术对X86架构处理器打了硬件补丁之后,X86平台在虚拟CPU与内部存储器方面变成了一个支持完全虚拟化的平台,在这方面,Citrix Xen,MS Hyper-V(“在旁边的虚拟化”)与VMware ESX(全虚拟化)之间的差别已不复存在。但我必须提醒:前两者与后者在虚拟输入输出设备(IO Devices)方面仍然存在着一个根本的重要的差别。
与虚拟CPU和内存的情况一样,虚拟一个IO设备也是让一个虚拟机(VM)感觉到它是在独享该设备。所以IO设备虚拟化任务也是替每一个VM分别管理好所用设备的服务状态(service state)。设想当一个设备(如网卡)在某个时间片断为VM1提供了一个服务片断(读入一页网页),在下一个时间片断要转而向VM2提供服务时,此时系统就必须先记住该设备为VM1提供当前服务片断后的状态,才可以让设备转向服务于VM2。只有这样做该设备才会知道以后再回到VM1时怎样继续提供尚未完成的服务。因为每一个IO设备都完全受控于一个叫做设备驱动器的软件,所以对一个设备和一个VM之间进行状态跟踪管理也就是针对相应驱动软件的服务状态进行跟踪管理。
半虚拟化(Para-Virtualization, Citrix Xen与MS Hyper-V都是)采用了非常简单实用的“在旁边有驱动器”之方法:让所有的客户(guest)VM 都去使用安装在那个“管理OS”(Xen的Dom0,Hyper-V的Parent Partition)里面现成的设备驱动器。这样一来整个平台上的IO设备就可以步调一致井井有条地为每一个客户VM服务了。当一个客户VM中的OS(中自有的设备驱动器)向硬件发出IO设备使用指令时,这些指令会被trap到hypervisor里,再被转到管理OS去使用它里面相应的设备驱动器。
与这个方法不同,VMware ESX选择在hypervisor里面置入并管理平台上所有的IO设备驱动器。ESX上的管理OS(又叫做Host OS或Service Console)只负责让系统管理员来管理客户VMs,比如创立、启动客户VM,启动VMotion操作等等,而不负责虚拟任何IO驱动器。另外我们知道ESXi压根就不带有管理OS,系统管理员是通过网络进入hypervisor来管理客户VM的。
Intel和AMD在给X86架构打硬件补丁的工作还实现了统一控制平台上IO设备对内存的直接访问(Direct Memory Access, DMA)。这改变了以前机器上IO设备可以随意对主机内存进行直接访问的无政府主义危险状况。诸位不要以为只有中央处理器(CPU)才是平台上唯一的脑子可以对内存进行访问操作。CPU的确可以被看作是平台上的“大脑”,然而平台上还有诸多“小脑”们:几乎每一个现代IO设备都自身带有固件,里面装有可执行指令可对主机内存进行读写访问。在以前的X86硬件上这些小脑们对主机内存进行DMA读写操作根本不必听从大脑的指挥。幸亏在非虚拟情况下平台上只跑一个操作系统,如果某个小脑对主机内存做了错误操作,造成的破坏也许还可以容忍,因为大不了平台崩溃只不过毁掉了跑在一台机器上的应用(一定遇到过Windows的蓝屏吧!)。如今在一个虚拟化的服务器平台上跑着许多不同虚拟机和不同操作系统,无政府主义的危害就不再那么单纯无邪了。小脑的一个误操作有可能打破不同虚拟机之间的隔离,轻者造成所模拟的操作系统出错,重者导致平台上所有的虚拟机全部崩溃。最近在X86硬件上的补丁工作(Intel的 VT-d, AMD的 IOMMU)对主板进行了重新布线,将所有小脑们的IO连线都统一联到北桥上的一个硬件部件IOMMU,于是大脑就可以使用该部件,采用MMU同样的方法统一协调管理小脑们对内存的IO访问了。有了大脑统一协调管理IOMMU,小脑即使误操作也应该无法穿越不同VM之间的隔离。但是这个说法只适用于通常的非恶意系统软硬件错误情形,不适用于在计算机安全上出错的情形。在考虑安全问题时所谓错误都是恶意攻击的结果,是攻击者有意引入的。在考虑安全问题时小脑们的驱动器软件(请回忆,IO设备都是受驱动器控制的)身处于系统软件栈的哪个权限层次就是一个非常重要的问题。这些软件所处的权限层次越接近硬件层,攻击者对它们进行攻击的手段就越有限也越困难。
对于“在旁边的虚拟化”方法( Citrix Xen与MS Hyper-V),前面我们说过所有设备驱动器软件都安装在管理OS里面。这个管理OS虽然跑在一个低特权态(hypervisor之上的非内核态),却由于需要向平台上所有客户VMs提供设备驱动器服务因而必须可以操控所有这些客户VMs。于是这个处于低特权态的管理OS就自然形成了一个可以被利用来对任一客户VM进行DMA攻击的最薄弱环节。所有对一般OS有效的攻击方法(我们知道有大量这样的方法)都可以被利用来攻击这个OS中的驱动器软件,对客户VM实施DMA攻击。
而VMware ESX的情况不同:平台上所有设备驱动器都是在hypervisor中模拟得到的。我们知道hypervisor是直接跑在硬件上的,即处于最高特权态。一般攻击OS的用户态手段都不能对hypervisor产生有效攻击。另外Intel VT-d和AMD IOMMU都格外注重对hypervisor代码与数据施加保护。如果想要通过攻击hypervisor中设备驱动器的方法来对客户VM实施DMA攻击,那要远比这些设备驱动器处身于用户态OS中的情况困难得多。
业界诸多专家已经认可如下为不争事实:用可信计算技术来保护hypervisor是一个可行方法,Intel的Trusted eXecution Technology(TXT)就是一个典型案例。而用可信计算技术来保护用户态OS是一个不可行方法,MS的Vista OS中的BitLocker技术就是尝试这一方法的一个典型失败案例。
《VMware、Xen和Microsoft虚拟化技术解析》
目前市场上的三大虚拟化技术:VMware vSphere Hypervisor、微软的Hyper-V、思杰的Xen hypervisor。主要厂商有:VMware、微软、Citrix、IBM、Sun、Oracle、Virtual Iron、Novell、Red Hat等。
在某种意义上来说,VMware就是X86虚拟化技术的代名词,不论是从客户端的VMware Workstation系列,还是服务器端的VMware Infrastructure(最近改名为vSphere)系列,都属于X86虚拟化技术的代表之作。
Xen只是一个hypervisor。Virtual Iron公司在XEN的基础上,提供了一整套完整的虚拟化解决方案,包括企业级虚拟机管理工具等。从诸如政策驱动的工作负载管理、动态容量供应、快速VM迁移、报表和分析的先进工具等特性,我们也看出Virtual Iron正在提供企业级管理工具,而这在以前的基于Xen的系统上是没有的。
和之前的Virtual PC、Virtual Server类似,Hyper-V也是微软的一种虚拟化技术解决方案,但在各方面都取得了突飞猛进的发展,从架构上讲只有“硬件-Hyper-V-虚拟机”三层,而且Hyper-V本身非常小巧,代码简单,且不包含任何第三方驱动,所以安全可靠、执行效率高,能充分利用硬件资源,使虚拟机系统性能更接近真实系统性能。
Hyper-V技术基于64位系统,最多支持4颗虚拟处理器和64GB内存,虽然也支持32位系统,但由于后者的内存寻址空间只有4GB,因此实用价值不大,微软也推荐64位Windows Server 2008用户使用该技术。此前的Virtual PC、Virtual Server都是基于32位系统的,且后者仅支持2颗虚拟处理器。
KVM:kernel virtual module(基于内核的虚拟机)的简写,是rhel5.4推出的最新虚拟化技术,目前红帽只支持在64位的rhel5.4上运行kvm,同时硬件需要支持VT技术,使用kvm虚拟机的时候需要关闭selinux;
Red Hat产品和技术总裁Paul Cormier表示:“KVM最大的好处就在于它是与Linux内核集成的。未来几年人们的关注焦点仍然集中在hypervisor上。hypervisor是操作系统的一项功能,自然能够被用户所接受。微软和Red Hat操作系统的不同中间件和管理功能将起到重要的作用。”
VirtualBox 是由Sun Microsystems公司出品的软件。2010年1月21日,欧盟终于同意Oracle收购Sun,VirtualBox再次改名变成 Oracle VM VirtualBox。VirtualBox是开源软件,可以在 virtualbox.org或openxvm.org免费下载而无需为费用和许可问题而头疼。目前VirtualBox 3.2.0支持的操作系统包括:Debian, Fedora, Linux, Mac OS X(Intel), Mandriva, OpenSolaris, PCLiunxOS, Red Hat, SUSE Linux, Solaris 10, Ubuntu, Windows, Xandros, openSUSE等。
和同性质的 VMware 及 Virtual PC 比较下,VirtualBox 独到之处包括 Remote Desktop Protocol (RDP)、iSCSI 及 USB 的支援,VirtualBox 在客户机操作系统上已可以支援 USB 2.0 的硬件装置。
OpenVZ是开源软件,是基于Linux平台的操作系统级服务器虚拟化解决方案(容器)。OpenVZ采用SWsoft的Virutozzo虚拟化服务器软件产品的内核,Virutozzo是SWsoft公司提供的商业虚拟化解决方案。
OpenVZ可以在单个物理服务器上创建多个隔离的虚拟专用服务器(VPS)并以最大效率共享硬件和管理资源。每个VPS的运行和独立服务器完全一致,因其自身的用户、应用程序都可以独立重起,它拥有根访问权限、用户、IP地址、内存、处理器、文件、应用服务、系统库文件和配置文件等。拥有轻量级处理损耗和高效设计的OpenVZ是运行应用服务和实时数据生产型服务器虚拟化的最佳选择。
扩展阅读:
性能
网络和带宽
景安互联网数据中心 http://vps.zzidc.com/product.html
我们这些网站站长,面对国内日益恶化的网络环境,不得不将自己心爱的网站迁移到太平洋另一边的美国。虽然美国的空间主机或者VPS和服务器价格都是那么的低廉、性价比那么的高,唯有一个问题让我们一直很头疼,那就是中美网络的连接速度。隔着一个太平洋,不管是再好的光线也是有损耗的。那么今天我就给大家罗列一下从中国到美国VPS机房速度最快ping值最低的几个机房吧。
1.peer1 dedicated洛杉矶机房。
针对中国线路进行了优化,ping值在200ms以内。
2.he.net 加州(Frement)机房
he.net的单线路机房,这个线路对中国电信和网通比较友好,结点少,速度快。ping值200ms左右。
linode(加州数据中心)用的就是这个机房。
3.krypt圣安娜机房
对中国速度快,结点少,ping值200ms左右。
4.PacificRack的nLayer优化段
对中国速度快,结点少,ping值200ms左右。
大家继续补充,希望能够为新买vps/独立服务器的朋友一共参考。
比如加州还有几个机房,
https://www.staminus.net/ 跟Krypt的洛杉矶机房在同一座ONE Wilshire大厦。
http://www.Awknet.com/ 跟PacificRack的洛杉矶机房在同一座大厦里。
http://www.webnx.com/ 跟PacificRack的洛杉矶机房在同一座大厦里。
官网:http://thrustvps.com
Ping 测试
下载测试:
Ramhost提供OpenVZ的VPS,他们承诺自己的VPS不会超卖,并且提供了在线状态系统可供实时查看。他们有Atlanta和Kansas City两个机房。
测试IP:
可选配置:
机房在美国东部宾夕法尼亚州斯克兰顿机房,ping 延迟大约有 300 ms ,比西部的主机(200 ms)慢。
特点是价格便宜,性价比很高。
销售价格(淘宝店、示例站 Ubuntu China)(以下均为OpenVZ,XEN的贵很多):
提供基于Xen和OpenVZ的VPS,位于加州Los Angeles洛杉矶机房,大陆访问速度比较不错,有中文客服
本文参考和摘抄自: