剖析系统虚拟化(17页).doc
《剖析系统虚拟化(17页).doc》由会员分享,可在线阅读,更多相关《剖析系统虚拟化(17页).doc(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-剖析系统虚拟化(1)-简介作者:厚朴教育来源:点击数:712更新时间:2010-5-20简单而言,虚拟化(Virtulization)是表示计算机资源的抽象方法。通过虚拟化可以对包括基础设施,系统和软件等计算机资源的表示,访问和管理进行简化,并为这些资源提供标准的接口来接受输入和提供输出。虚拟化技术有很多种,比如,网络虚拟化,内存的虚拟化,桌面虚拟化,应用虚拟化和虚拟内存等等。因为篇幅的原因,本系列将重点关注系统虚拟化,特别是X86平台。今后此系列当中提到的虚拟化皆指系统虚拟化。系统虚拟化的目的通过使用虚拟化管理器(Virtual Machine Monitor,简称VMM)是在一台物理机上
2、虚拟和运行一台或多台虚拟机(Virtual Machine,简称VM)。VMM主要有两种形式:Hypervisor VM,它直接运行在硬件(Bare Metal)上面,提供接近于物理机的性能,并在I/O上面做了特别多的优化,主要用于服务器类的应用,也被称为“Type 1”。Hosted(托管)VM,它运行在物理机的操作系统上,虽然其本身性能不如Hypervisor(因为它和硬件之间隔了一层OS),但是其安装和使用非常方便,而且功能丰富,比如支持三维加速等特性,常用于桌面应用,也被称为“Type 2”。系统虚拟机的分类由于采用技术的不同,可以将系统虚拟化分为五大类:硬件仿真(Emulation)
3、简介:属于Hosted模式,在物理机的操作系统上创建一个模拟硬件的程序(Hardware VM)来仿真所想要的硬件,并在此程序上跑虚拟机,而且虚拟机内部的客户操作系统(Guest OS)无需修改。知名的产品有Bochs,QEMU和微软的Virtual PC(它还使用少量的全虚拟化技术)。图1. 硬件仿真架构图优点:Guest OS无需修改,而且非常适合用于操作系统开发,也利于进行固件和硬件的协作开发。固件开发人员可以使用目标硬件 VM 在仿真环境中对自己的实际代码进行验证,而不需要等到硬件实际可用的时候。缺点:速度非常慢,有时速度比物理情况慢100倍以上。未来:因为速度的问题,渐趋颓势,但是还
4、应该有一席之地。全虚拟化(Full Virtulization)简介:主要是在客户操作系统和硬件之间捕捉和处理那些对虚拟化敏感的特权指令,使客户操作系统无需修改就能运行,速度会根据不同的实现而不同,但大致能满足用户的需求。这种方式是业界现今最成熟和最常见的,而且属于 Hosted 模式和 Hypervisor 模式的都有,知名的产品有IBM CP/CMS,VirtualBox,KVM,VMware Workstation和VMware ESX(它在其4.0版,被改名为VMware vSphere)。图2. 全虚拟化架构图优点:Guest OS无需修改,速度和功能都非常不错,更重要的是使用非常简
5、单,不论是 VMware 的产品,还是Sun(Oracle?)的 VirtualBox。缺点:基于Hosted模式的全虚拟产品性能方面不是特别优异,特别是I/O方面。未来:因为使用这种模式,不仅Guest OS免于修改,而且将通过引入硬件辅助虚拟化技术来提高其性能,我个人判断,在未来全虚拟化还是主流。半虚拟化(Parairtulization)简介:它与完全虚拟化有一些类似,它也利用Hypervisor来实现对底层硬件的共享访问,但是由于在Hypervisor 上面运行的Guest OS已经集成与半虚拟化有关的代码,使得Guest OS能够非常好地配合Hyperivosr来实现虚拟化。通过这种
6、方法将无需重新编译或捕获特权指令,使其性能非常接近物理机,其最经典的产品就是Xen,而且因为微软的Hyper-V所采用技术和Xen类似,所以也可以把Hyper-V归属于半虚拟化。图3. 半虚拟化架构图优点:这种模式和全虚拟化相比,架构更精简,而且在整体速度上有一定的优势。缺点:需要对Guest OS进行修改,所以在用户体验方面比较麻烦。未来:我觉得其将来应该和现在的情况比较类似,在公有云(比如Amazon EC2)平台上应该继续占有一席之地,但是很难在其他方面和类似VMware vSphere这样的全虚拟化产品竞争,同时它也将会利用硬件辅助虚拟化技术来提高速度,并简化架构。硬件辅助虚拟化(Ha
7、rdware Assisted Virtualization)简介:Intel/AMD等硬件厂商通过对部分全虚拟化和半虚拟化使用到的软件技术进行硬件化(具体将在下文详述)来提高性能。硬件辅助虚拟化技术常用于优化全虚拟化和半虚拟化产品,而不是独创一派,最出名的例子莫过于VMware Workstation,它虽然属于全虚拟化,但是在它的6.0版本中引入了硬件辅助虚拟化技术,比如Intel的VT-x和AMD的AMD-V。现在市面上的主流全虚拟化和半虚拟化产品都支持硬件辅助虚拟化,包括VirtualBox,KVM,VMware ESX和Xen。优点:通过引入硬件技术,将使虚拟化技术更接近物理机的速度
8、。缺点:现有的硬件实现不够优化,还有进一步提高的空间。未来:因为通过使用硬件技术不仅能提高速度,而且能简化虚拟化技术的架构,所以预见硬件技术将会被大多数虚拟化产品所采用。操作系统级虚拟化(Operating System Level Virtualization)简介:这种技术通过对服务器操作系统进行简单地隔离来实现虚拟化,主要用于VPS。主要的技术有Parallels Virtuozzo Containers,Unix-like系统上的chroot和Solaris上的Zone等。图4. 操作系统级架构图优点:因为它是对操作系统进行直接的修改,所以实现成本低而且性能不错。缺点:在资源隔离方面表
9、现不佳,而且对Guest OS的型号和版本有限定。未来:不明朗,我觉得除非有革命性技术诞生,否则还应该属于小众,比如VPS。五大类之间比较根据个人的经验,我在性能,用户体验和使用场景这三方面对这五大类进行了比较,具体请看下图:性能(和物理机速度之比)用户体验形式硬件仿真30%-简单Hosted全虚拟化30%-80%+简单Hosted/Hypervisor半虚拟化80%+困难Hypervisor硬件辅助虚拟化80%+一般Hosted/Hypervisor操作系统级虚拟化80%困难类似于Hypervisor表1. 系统虚拟化五大类之间的比较因为这表只是我笼统的经验之谈,仅供参考,特别在操作系统级虚
10、拟化这块。系统虚拟化的用处主要有那些用处呢?软件测试,通过使用VirtualBox和VMware Workstation来配置测试环境,不仅比物理方式快捷很多,而且无需购买很多昂贵的硬件,更重要的是,通过它们自带的SnapShot/Pause功能可以非常方便地将错误发生的状态保存起来,这样将极有利于测试员和程序员之间的沟通。现在已经有很多软件都通过虚拟机的形式进行测试,最著名的例子,莫过于以VirtualBox虚拟机形式发布的Chrome OS测试版。我第一次接触到虚拟化技术强大威力就是在软件测试方面。桌面应用,通过诸如VirtualBox和VMware Workstation等桌面虚拟化软件
11、能让用户使用其他平台的专属软件,比如使用Linux的用户能够通过VirtualBox上虚拟的Windows环境来访问使用ActiveX技术的网上银行。服务器整合,通过 VMware ESX 和 Xen 能够将多台物理机上的工作量整合到一台物理机上。现有普遍的整合率在1:8左右,也就是使用这些软件能将原本需要八台物理机的工作量整合到一台物理机上。服务器整合不仅能减低硬件,能源和场地等开支,还能极大地简化IT架构的复杂度。自动化管理,通过使用类似DRS(Distributed Resource Scheduling,分布式资源调度),Live Migration(动态迁移),DPM(Distrib
12、uted Power Management,分布式电源管理)和HA(High Availability,高可用性) 等高级虚拟化管理技术,能极大地提高整个数据中心的自动化管理程度。加快应用部署,通过引入虚拟化应用发布格式OVF(Open Virtualization Format),不仅能使第三方应用供应商更方便地发布应用,而且使系统管理员非常简单地部署这个应用(大多数情况下只要轻轻一个点击就可以完成整套部署工作)。本篇结束,下篇将关注X86虚拟化技术的发展。剖析系统虚拟化(2)-X86虚拟化技术作者:厚朴教育来源:点击数:889更新时间:2010-5-22上个月,我曾经和一个龙芯的支持者聊过
13、关于龙芯和云计算的关系。虽然我个人还是非常支持龙芯,但是在谈到龙芯的未来,我深有顾虑,原因有二:其一,是缺乏经验丰富的工程师团队,虽然胡老师研究毛选的水平相当顶尖,但是我个人觉得身为龙芯项目带头人的他在芯片设计上面的造诣很难列于世界顶尖。其二,和本文是密切相关的,就是在低功耗和移动方面,龙芯的MIPS架构好比RISC的代表IBM的Power,而ARM架构和CISC的代表Intel的X86有几分类似,虽然IBM的Power架构在早期由于RISC的原因,在速度上面极为领先,但是由于X86在所支持软件方面的优势,使Intel能投入几倍的资源在研发上面,使得它不仅在市场上处于垄断,而且在速度上面直追P
14、ower芯片。这个在PC时代发生的故事我希望不要在云计算时代重演。(因为在CPU产业上面的研究不是很深入,如果我说了什么不合适的,请见谅。我个人也希望龙芯能成功)接下来就跟大家讲解一下上面提到的X86架构的虚拟化技术。虚拟化的三大特征在1974年Popek和Goldberg发表的虚拟化名篇Formal Requirements for Virtualizable Third Generation Architectures中定义了虚拟机(VM)可以被认为是物理机的一种高效隔离的复制,并指出虚拟机应具有的三大特征:1.一致性, 一个运行于虚拟机上的程序,其行为应与直接运行于物理机上的同程序的行为
15、基本一致,只允许有细微的差异,比如在系统时间方面。2.可控性,VMM(虚拟化管理器)对系统资源有完全的控制能力和管理权限,包括资源的分配,监控和回收。3.高效性,绝大多数的客户机指令应该由硬件直接执行而无需VMM的参与。但是要满足这三点,并非易事,因为系统的指令集架构(ISA)需要相应地满足四个的条件:1.CPU能支持多个特权级,并且VM上面运行的指令能在底特权级(比如Ring 3)下正确执行。2.非特权指令(允许用户直接使用的指令)的执行效果不依赖于CPU的特权级。3.敏感指令(对系统资源配置有影响的指令)都是特权指令(不允许用户直接使用的指令)。4.必须支持一种内存保护机制来保证多个虚拟机
16、之间在内存方面的隔离,例如段保护或页保护。为什么X86架构很难被虚拟化?虽然X86架构在PC市场占据绝对的垄断地位,但是由于其在初始设计时,并没有考虑到虚拟化需求,所以它对虚拟化的支持不够,特别是它没有满足上面四个条件里面的第三个,其因为是X86的ISA有17条敏感指令(比如LGDT等)不属于特权指令。也就是说,当虚拟机执行到这些敏感指令的时候,很有可能出现错误,将会影响到整个机器的稳定。更困难的是,上面所提出的问题只是X86虚拟化所需要面对的问题的一小部分而已,还有许许多多的问题还未涉及。下面将分CPU虚拟化,内存虚拟化和I/O虚拟化这三部分来介绍全虚拟化,半虚拟化和硬件辅助虚拟化所采用的相
17、关技术。CPU虚拟化CPU虚拟化的目标是使虚拟机上的指令能被正常地执行,而且效率接近物理机。全虚拟化:主要采用优先级压缩(Ring Compression)和二进制代码翻译技术(Binary Translation)这两个技术。优先级压缩能让VMM和Guest运行在不同的特权级下,对X86架构而言,就是VMM运行在特权级最高Ring 0下,Guest的内核代码运行在Ring 1下,Guest的应用代码运行在Ring 3下。通过这种方式能让VMM截获一部分在Guest上执行的特权指令,并对其进行虚拟化。但是有一些对虚拟化不友好的指令则需要二进制代码翻译来处理,它通过扫描并修改Guest的二进制代
18、码来将那些难以虚拟化的指令转化为支持虚拟化的指令。半虚拟化:其通过修改Guest OS的代码,使其将那些和特权指令相关的操作都转换会发给VMM的Hypercall(超级调用),而且Hypercall支持Batch(批处理)和异步这两种优化方式,使得通过Hypercall能得到近似于物理机的速度,硬件辅助虚拟化:主要有Intel的VT-x和AMD的AMD-V这两种技术,而且这两种技术在核心思想上非常相似,都是通过引入新的指令和运行模式,来让VMM和Guest OS能分别运行在其合适的模式下。在实现方面,VT-X支持两种处理器工作方式:第一种称为Root模式(Operation),VMM运行于此模
19、式,用于处理特殊指令,另一种称为Non-Root模式(Operation),Guest OS运行于此模式,当在Non-Root 模式Guest执行到特殊指令的时候,系统会切换到运行于Root模式VMM,让VMM来处理这个特殊指令。内存虚拟化内存虚拟化的目标是能做好虚拟机内存空间之间的隔离,使每个虚拟机都认为自己拥有了整个内存地址,并且效率也能接近物理机。全虚拟化:影子页表 (Shadow Page Table),就是为每个Guest都维护一个“影子页表”,在这个表中写入虚拟化之后的内存地址映射关系,而Guest OS的页表则无需变动,最后,VMM将影子页表交给MMU进行地址转换。半虚拟化:页表
20、写入法,当Guest OS创建一个新的页表时,其会向VMM注册该页表,之后在Guest运行的时候,VMM将不断地管理和维护这个表,使Guest上面的程序能直接访问到合适的地址。硬件辅助虚拟化:EPT(Extended Page Table,扩展页表),EPT通过使用硬件技术,使其能在原有的页表的基础上,增加了一个EPT页表,通过这个页表能够将Guest的物理地址直接翻译为主机的物理地址,从而减低整个内存虚拟化所需的Cost。还有,在EPT推出之前,硬件辅助虚拟化技术在内存虚拟化方面有一个TLB(Translation lookaside buffer) Miss的软肋。I/O虚拟化I/O虚拟化
21、的目标是不仅让虚拟机访问到它们所需要的I/O资源,而且要做好它们之间的隔离工作,更重要的是,减轻由于虚拟化所带来的开销。全虚拟化:通过模拟I/O设备(磁盘和网卡等)来实现虚拟化。对Guest OS而言,它所能看到就是一组统一的I/O设备,同时Guest OS每次I/O操作都会陷入到VMM,让VMM来执行。这种方式,对Guest而言,非常透明,无需顾忌底层硬件,比如Guest操作的是SCSI的设备,但实际物理机只有SATA的硬盘。半虚拟化:通过前端(Front-End)/后端(Back-End)架构,将Guest的I/O请求通过一个环状队列传递到特权域(Privileged Domain,也被称
22、为Domain-0)。因为这种方式的相关细节较多,所以会在后文进行深入分析。硬件辅助虚拟化:最具代表性莫过于Intel的VT-d,AMD的IOMMU和PCI-SIG的IOV(I/O Virtulization)这三个技术。在这里介绍一下VT-d,其核心思想就是让虚拟机能直接使用物理设备,但是这会牵涉到I/O地址访问和DMA的问题,而VT-d通过采用DMA重映射(Remapping)和I/O页表来解决这两个问题,从而让虚拟机能直接访问物理设备。还有,IOMMU和VT-d在技术上有很多相似之处。总结首先,通过一个表格来总结一下X86虚拟化技术:全虚拟化半虚拟化硬件辅助虚拟化CPU虚拟化二进制代码翻
23、译HypercallVT-x内存虚拟化影子页表页表写入法EPTI/O虚拟化模拟I/O设备前端/后端架构VT-d表1. X86虚拟化技术总结其次,由于这三种虚拟化技术各有千秋,所以在取舍方面很让人为难,但是也是两个规则可循,其一是如果使用最新的芯片,比如45nm的Nehalem和32nm的Westmare,那么硬件虚拟化技术是一个比较不错的选择,甚至胜于半虚拟化技术。其二是如果是跑有很多TLB Miss的应用(比如Java应用),那么应避免使用硬件虚拟化技术。总体而言,就像VMware的白皮书Virtual Machine Monitor Execution Modes: in VMware v
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 剖析 系统 虚拟 17
限制150内