时间:2024-07-28
李霞
虚拟机技术是计算机科学近年来最激动人心的成就之一[19]。虽然虚拟机技术早在上世纪 60年代就已在 IBM大型机中得到实现[14],但近年来虚拟机通过和个人计算机的结合使其重新焕发了强大的生命力,具有了全新的内涵。虚拟机也从最初的一种补充性技术发展成为重要的基础性平台,并使得现代计算机系统的结构、应用模式产生了重大变革[14]。
虚拟机系统的结构如图1所示。虚拟机系统在传统计算机的硬件和操作系统(OS: Operating System)中间加入了一个新的软件层,称为虚拟机监视器(VMM:Virtual Machine Monitor,也称为Hypervisor)。VMM可以模拟多个虚拟机(VM: Virtual Machine),在每个VM上可以安装运行不同的操作系统,通常把这些OS称为Guest OS,以和传统的、直接运行于硬件之上的OS相区别。VMM可以为VM提供保证服务质量的资源(如CPU时间、内存、网络带宽等),VM 之间完全隔离,这种服务质量保障和安全隔离能力是虚拟机系统具有强大生命力的根本原因之一。
VMM的主要功能是实现计算机系统的虚拟化,即处理器、内存和I/O设备的虚拟化。在基于x86架构的计算机系统上设计VMM面临许多挑战。本文将对这些问题依次进行分析,并比较总结已有研究成果。
图1 虚拟机系统结构
Goldberg研究指出,VMM的设计应满足三个特性[24]:1) 所有在VMM上运行的程序必须像在原始硬件上运行的效果一样,确保对操作系统的透明性;
2) 大多数的指令必须直接在真实的处理器上运行,而不需要解释执行,确保虚拟机系统的性能;
3) VMM必须完全控制硬件,任何VM不能穿越VMM直接访问硬件,确保虚拟机之间安全隔离。
现代计算机系统基于特权级和特权指令机制来实现进程和 OS之间的隔离保护,OS总是处于最高特权级并可执行特权指令;进程运行于较低特权级,不允许执行特权指令。在虚拟机系统中,VMM取代了传统OS的地位处于最高特权级,而Guest OS只能运行于较低特权级。IBM 370主机中基于处理器的支持,采用“Trap and Emulation”方法来满足这些特性[14],既处于非特权级的操作系统执行特权指令时处理器将产生陷入,然后由VMM来模拟这些指令。
传统的 x86处理器在设计时并未考虑对虚拟化的支持,在实现虚拟化时面临诸多挑战[11]。x86 处理器中有一些能够显示或修改处理器状态信息(如特权级)的非特权指令,称之为敏感指令。根据对敏感指令处理方式的不同,虚拟机实现方式可分为两类:全虚拟化和准虚拟化。
全虚拟化方式完全满足Goldberg所提出的3个特性。目前虚拟机系统中主要采用二进制翻译技术来实现全虚拟化:在VM的代码运行之前,VMM分析将要执行的二进制代码,将敏感指令替换成功能相同但非敏感的指令或调用VMM程序的指令。如果为后者,则当VM执行敏感指令时将陷入 VMM,由 VMM 来模拟执行这些指令。VMWare、Virtual PC就是采用二进制翻译技术来实现x86处理器的虚拟化[21-31]。基于二级制翻译技术的全虚拟化方式具有良好的兼容性,其缺点在于技术复杂,而且分析二级制代码和替换敏感指令也会导致较大的开销。为了优化性能,可以会将这些已经处理过的指令块进行缓存,则当再次执行时就不需要再进行扫描和替换[20]。
解决x86处理器敏感指令的另外一个方法,就是不再保持 Goldberg所提的特性,而是直接修改操作系统源代码,不再使用这些敏感指令。这种方法也称为准虚拟化,xen[5]、Denali[34]则是其典型代表。准虚拟化方式的优点在于技术相对简单,易于实现;操作系统和VMM之间可以相互配合,从而到达更优的性能。其缺点则在于兼容性差,限制了其适用范围。
近年来虚拟化技术受到处理器厂商的高度重视,Intel和AMD都分别提出了相应的虚拟化方案以简化虚拟机的实现,如VT-x、 VT-i [30]和Pacific[2]。这些方案基本类似。本文仅简要介绍VT-x。
VT-x增加了两种CPU工作模式:root和non-root,扩展了一些指令用以实现两种模式间的转换。每种模式仍然保留了原来IA-32的所有特性,包括4个特权级以及所有指令。Non-root模式特权级低于root模式,该模式下每个VM有一个数据结构VMCS保存其状态,并控制VM在哪些条件下陷入到root模式。Guest OS运行于non-root模式的ring 0优先级,当Guest OS执行特权指令时,CPU将自动陷入到VMM运行的root模式,从而可以模拟执行特权指令。VT-x显著简化了虚拟机的设计,无需采用二进制翻译就能实现全虚拟化。
现代计算机系统采用虚拟内存以支持多进程并实现进程间的隔离保护。进程根据虚拟地址(VA: Virtual Address),进程访问内存时内存管理单元MMU把根据页表把虚拟地址转换为物理地址(PA: Physical Address),并根据PA来访问物理内存。物理内存的地址从0x0开始并且连续,OS负责物理内存的管理调度。
引入VMM后,内存由VMM来管理和调度,并由多个Guest OS共享,Guest OS不再拥有对内存的最终管理权限。为了把真实机器上的内存和Guest OS“看到”的物理内存相区别,把机器内存的地址称为机器地址(MA:Machine Address)。至此在虚拟机系统中存在3种地址:进程使用的虚拟地址VA、操作系统使用的物理地址PA、VMM使用的机器地址MA;从而需要执行2个地址翻译过程:操作系统将 VA翻译为 PA,VMM将 PA翻译为MA。
为了实现上述翻译过程,VMM在Guest OS构造的页表(称为 GPT:Guest Page Table)的基础上,构造一个VA到MA翻译的页表,这个页表也称为影子页表(SPT:Shadow Page Table)。处理器实际使用的就是VMM构造的SPT,而不再是OS建立的GPT。
影子页表的构造在准虚拟化和全虚拟化方式中有所不同。在准虚拟化方式下, Guest OS修改页表时可主动调用VMM的程序来同步影子页表的更新[5]。但在全虚拟化系统中,VMM 只能在Guest OS加载新页表时(既写x86 CR3寄存器,为特权操作)截获该操作并构造影子页表;并将存放Guest OS页表的内存页面属性设置为只读,则当Guest OS修改页表内容时VMM就能截获该操作并同步影子页表[33]。
有效的内存管理和调度对于保证虚拟机系统的性能至关重要。Guest OS可以获知每个页面的用途(代码、数据或缓存等)以及每个页面的访问情况,从而可以制定有效的回收策略。但VMM无法像OS一样获得每个页面的使用情况,难以实现有效的页面调度。为解决该问题,VMWare提出了Balloon Process的方法[33]。Balloon Process是运行在 Guest OS上的一个进程,可利用私有通道和VMM通信。当VMM需要从一个VM回收内存时,就通知Balloon Process,让其从OS申请物理内存,然后将这些内存的物理地址告诉VMM,VMM就可以回收并重新使用这些内存。
当多个虚拟机运行上相同的OS时,就存在OS映象的多个拷贝。由于OS代码庞大,多个映象必然占用大量内存。如果让不同虚拟机上的OS共享只读代码段,就可在计算机上同时运行更多的虚拟机。VMWare虚拟机中比较不同VM页面的内容,如果内容相同就让它们共享同一个页面;如果一个虚拟机要修改共享页,则使用写时拷贝技术为其分配独立的页面[33]。
虚拟机系统中每次Guest OS修改页表时都需要陷入到VMM以同步影子页表,这种处理严重影响虚拟机系统的性能。为解决该问题,Intel和AMD分别提出了Extended Page Tables (EPT)和 Nested Page Tables (NPT)的 MMU 虚拟化方法[2]。这些方法定义了由处理器支持的2级页表,分别完成VA到PA、PA到MA的翻译,VMM不再需要维护影子页表,从而有效提高虚拟机系统的性能。
目前虚拟机中存 I/O 虚拟化的实现可分为VMM-based I/O、Host-based I/O、和Direct I/O等多种方式。
该模型的结构如图2(a)所示。该模型中由VMM实现对物理I/O设备的驱动。与此同时,VMM为每个VM模拟一个独享的设备,该模拟设备和物理设备可以不同。当VM访问模拟I/O设备时会陷入VMM。VMM根据模拟设备的状态执行相关指令。当一个完整的操作能够执行时,比如已设置好模拟网卡的相关寄存器并启动发送网络包时,VMM将在真实的I/O设备执行该操作。虽然这种模型性能优异,但由于计算机系统中I/O设备的多样性和复杂性,为其开发驱动是一个极其繁重的工作,因此这种模型一般在面向服务器的虚拟机系统如VMWare ESX 中使用[20],而在面向个人计算机的虚拟机中更多使用Host-based I/O模型。
现代操作系统对各种I/O设备已提供了完善的支持,利用已有操作系统中的驱动程序来访问I/O设备可以显著简化虚拟机的设计。这种模型的结构如图2(b)所示。
图2 虚拟机I/O实现模型
该模型中用一个定制的、运行在VM上的OS完成I/O设备驱动功能,并在OS上运行I/O设备模拟程序,这个OS也称为Host OS。当Guest OS访问I/O设备时VMM将I/O请求转交给运行在Host OS上的设备模拟程序,模拟程序再调用OS 的系统调用来完成对物理I/O设备的访问。很显然,这种简化I/O驱动开发的代价是显著增加了I/O访问路径的长度,降低了I/O吞吐量。虚拟机Xen中利用Host OS和Guest OS之间共享页面来减少数据拷贝的次数,并采用批处理方式一次发送多个I/O请求来减少处理开销。这些优化获得显著效果,使得Guest OS访问I/O设备的性能可以接近于Host OS的性能[18]。笔者提出了一种适用于全虚拟化系统的I/O优化方法,该方法将模拟I/O设备的状态保存在VMM中,而实现模拟设备功能的代码仍然运行在Host OS 中,在不改变VMM结构的前提下显著提高了I/O吞吐量[35]。
虚拟机的Host-based I/O模型和VMM-based I/O模型难以满足高性能计算的需求。为了减少通信延迟,可借鉴OS-Bypass的思想[4],让运行在OS上的应用程序绕过OS和VMM直接访问I/O设备,这种方式称为Direct I/O。这种模型的实现需要I/O设备的支持,文献[16]对这种模型进行了研究,获得了良好的结果,这种模型在高性能计算领域具有良好应用前景。
基于软件方式实现I/O虚拟化存在安全隔离和性能两方面的问题:虚拟机系统中一个 VM 可通过 I/O设备的DMA操作访问到其它VM的空间,因此无法实现彻底隔离;另一方面,Guest OS对设备的访问都要经过VMM,影响了I/O性能。通过硬件方式实现I/O虚拟化则可以有效解决这些问题。目前工业界对I/O设备虚拟化的支持分为2个阶段:IOMMU和PCI-SIG,后者的标准仍在制定之中[23]。Intel和AMD目前已实现了对IOMMU的支持,分别称为VT-d和DEV[1][2][6]。IOMMU位于计算机的北桥芯片中,能够检查并限制I/O设备在执行DMA操作时能够访问的地址空间范围,从而实现VM之间的安全隔离;IOMMU还可以实现地址翻译,将 I/O设备发出的DMA操作地址(物理地址)翻译为机器地址,因此VM直接访问设备时不再需要VMM进行地址翻译。IOMMU的不足之处在于无法支持多个VM对设备的共享,这一问题有望在PCI-SIG规范中得到解决。
现代计算机系统性能的快速发展,尤其是近年来多核CPU 的发展为虚拟机应用提供了广阔的舞台。基于虚拟机可以实现服务器的整合,将原来运行在不同计算机、不同操作系统上的任务整合到单台计算机上,从而显著降低信息系统的购置、运行和维护成本;虚拟机也是新兴的云计算的基础[8]。云计算基于虚拟机技术为用户提供可定制、可保证服务质量的计算能力,使得计算成为一种可按需定制的公用服务,有望成为未来计算机应用的主要模式。
虚拟机使得其上的Guest OS和底层硬件不再紧密耦合,从而可以将其状态完整地迁移到其它计算机系统并恢复运行,这种在线迁移能力为集群均衡、移动计算、以及高可靠系统的实现提供了革新的技术手段[21][32];虚拟机监视器可以监控Guest OS的行为,并且自身复杂度小,可以实现可验证的安全,基于虚拟机实现可信计算基是一个新的途经,已受到广泛关注[15][26][29];虚拟机系统中系统软件的安装可简化为一个简单的文件拷贝。这种基于虚拟机系统,包含了定制OS和应用软件的方式有可能成为未来软件发布的主要方式[22]。
本文对虚拟机的原理进行了介绍,对其关键技术和当前发展现状进行了深入分析。虚拟机的研究和应用方兴未艾。由于虚拟机系统将原来运行在多台独立计算机系统中的任务整合到单台计算机上,因此虚拟机系统的性能,尤其是I/O系统的性能,以及服务质量的保证在长时间内仍将是研究的热点。基于分布式协同的VMM将是虚拟机系统的发展方向。而基于虚拟机技术的云计算将成为未来计算机应用的主要模式。
[1]Abramson D,Jackson J,Muthrasanallur S,et al. Intel Virtualization Technology for Directed I/O [J]. Intel Technology Journal, 2006, 10(3): 179-192.
[2]AMD Inc.AMD64 Virtualization Codenamed“Pacifica”[Z]. Technology: Secure Virtual Machine Architecture Reference Manual, May 2005.http://www.amd.com/us-en/assets/content_type/white_p apers_and_tech_docs/33047.pdf.
[3]AMD Inc. AMD I/O Vitualization Technology (IOMMU)Specification. 2007.http://www.amd.com/us-en/assets/content_type/white_p apers_and_tech_docs/34434.pdf.
[4]Bhoedjang R A F,Ruhl T, et al. User-Level Network Interface Protocols [J]. IEEE Computer, pages 53–60.Nov,1998.
[5]Barham P, Fraser D B,K Xen and the Art of Virtualization [C]//ACM Symposium on Operating Systems Principles,2003,164-177.
[6]Yehuda M B, Mason J, Krieger O, Wahlig E. Utilizing IOMMUs for Virtualization in Linux and Xen [C]//Proc.of the 2006 Ottawa Linux Symposium (OLS), Ottawa,Canada, July, 2006.
[7]Bradford R , Kotsovinos E , Feldmann A , Schiöberg H.Live wide-area migration of virtual machines including local persistent state [C]//Proceedings of the 3rd international conference on Virtual execution environments. San Diego, California, USA . Jue.,2007.
[8]Hayes B. Cloud computing [J]. Communication of ACM. 2008,51(7).
[9]Childs S, Coghlan B, O'Callaghan D, Quigley G, Walsh J. Deployment of grid gateways using virtual machines[C]//Advance in Grid Computing - EGC 2005. Lecture Notes in Computer Science 3470: 761-770, 2005.
[10]Clark C,Fraser, K,Hand S.et al. Live Migration of Virtual Machines [C]//Proceedings of the Second Symposium on Networked Systems Design and Implementation (NSDI), 2005, 273-286.
[11]Dong Y,Li S,Mallick A., et al. Extending Xen with Intel Virtualization Technology [J]. Intel Technology Journal,10(3):193-204.
[12]Bugnion E, Devine S, Govil K, et al. Disco: Running Commodity Operating Systems on Scalable Multiprocessors [J]. ACM Transaction on Computer Systems, 1997,15(4)
[13]Fraser K,Hand S,Neugebauer R,et al. Safe Hardware Access with the Xen Virtual Machine Monitor[C]//Proceedings of the Workshop on Operating System and Architectural Support for the On Demand IT InfraStructure (OASIS), 2004.
[14]Gum P H. System/370 Extended Architecture: Facilities for Virtual Machines [J]. IBM Journal of Research and Development, 1983, 27 (6): 530-544.
[15]Gregory Collier, Derek Plassman, Mahmoud Pegah.Virtualization's next frontier: security [C]//Proceedings of the 35th annual ACM SIGUCCS conference on User services SIGUCCS '07, Oct. 2007.
[16]Liu J,Huang W,Abali B,et al. High Performance VMM-Bypass I/O in Virtual Machines [C]//Proceedings of the International Conference on Supercomputing,2006, 125-134.
[17]Menasc´e D A,Bennani M N. Autonomic Virtualized Environments [C]//International Conference on Autonomic and Autonomous Systems, 2006, ICAS'06.art. no. 1690238.
[18]Menon A,Cox A L,Zwaenepoel W.Optimizing Network Virtualization in Xen [C]//Proceedings of the USENIX Annual Technical Conference, 2006, 15-28.
[19]Rosenblum M, Garfinkel T. Virtual Machine Monitors:Current technology and future trends [J]. Computer,2005, 38 (5): 39-47.
[20]Steil M. Inside VMware[DB/OL].2006. http://events.ccc.de/congress/2006/Fahrplan/attachments/1132-Inside VMware.pdf.
[21]Kozuch M.Satyanarayanan. Internet Suspend/Resume[C]//Proc. IEEE Workshop Mobile Computing Systems and Applications, IEEE Press, 2002, pp. 40-46.
[22]Open Virtual Machine Format Specification (OVF)[DB/OL].2007.http://xml.coverpages.org/ni2007-09-11-a.html.
[23]PCI-SIG I/O Virtualization (IOV)Specifications[DB/OL]. http://www.pcisig.com/specifications/iov/
[24]Popek G J,Goldberg R P. Formal requirements for virtualizable third generation architectures [J].Communications of the ACM, 1974, 17 (7): 412-421
[25]Robin J S,Irvine, C E Analysis of the Intel Pentium’s Ability to Support a Secure Virtual Machine Monitor[C]//Proceedings of the 9th USENIX Security Symposium, 2000, 129-144.
[26]Samsung Inc. Secure Xen on ARM: Status and Driver Domain Separation [DB/OL].Xen Summit. Nov.,2007.http://www.xen.org/xensummit/xensummit_fall_2007.ht ml
[27]Sapuntzakis C P,Chandra R,Pfaff B,et al. Optimizing the Migration of Virtual Computers [J]. ACM SIGOPS Operating Systems Review, 2002, 36 (SI): 377-390.
[28]Sugerman J,Venkitachalam G,Lim B H. Virtualizing I/O Devices on Vmware Workstation’s Hosted Virtual Machine Monitor [C]//Proceedings of the 2001 USENIX Annual Technical Conference, 2001, 1-14 .
[29]Garfinkel T. Terra: A Virtual-Machine-Based Platform for Trusted Computing [C]//Proc. of ACM Symp.Operating Systems Principles, 2003.
[30]Uhlig R.Neiger, G .Rodgers, D.et a1. Intel virtualization technology [J]. Computer, 2005, 38(5): 48-56.
[31]Virtual PC Technical Overview[DB/OL]. 2004.http://www.microsoft.com/windowsxP/virtualPc/evaluat ion/techoverview.asp
[32]Vmware Inc. VMware Infrastructure: Resource Management with VMware DRS[DB/OL].http://www.vmware. com/pdf/vmware_drs_wp.pdf.
[33]Waldspurger C A. Memory resource management in VMware ESX server [C]//Proceedings of the 5th USENIX Symposium on Operating Systems Design and Implementation, 2002, 181-194.
[34]Whitaker A,Shaw M,Gribble S D.Denali: Lightweight Virtual Machines for Distributed and Networked Applications [C]//Proceedings of the 5th USENIX Symposium on Operating Systems Design and Implementation,2002, 195-209
[35]Zhang Jian, Li Xiaoyong, Guan Haibing. The Optimization of Xen Network Virtualization [C]// IEEE Conference proceedings on Computer Science and Software Engineering, 2008.
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!