可以参考以下信息:
当今发达国家在设计、制造、加工技术等方面已经达到相当自动化的水平,其产品设计普遍采用CAD、CAM、CAE和计算机仿真等手段,企业管理也已采用了科学的规范化的管理方法和手段,目前其主要从制造系统自动化方面寻找出路,为此提出了一系列新的制造系统,如敏捷制造、并行工程、计算机集成制造系统等。近些年,从虚拟机的大量部署到成功案例逐渐涌现,越来越多的制造企业开始关注虚拟化技术给优化IT基础架构,推动业务创新带来的启发,希望将其与业务相结合,找到掌握新技术、革新先进制造系统和先进制造模式的方法。虚拟化目前应用于制造业信息化主要体现在IT整合和节约成本,在其他方面很少,而实际上由于虚拟化技术的特点,其应用价值可以在远程办公、虚拟制造、工业控制等制造业相关领域都能得到体现。本文主要对虚拟化技术及其在制造业的应用现状进行综述,提出虚拟化在制造业的应用框架,为相关人员提供该领域的应用研究进展与发展趋势方面的介绍。
1 虚拟化技术
虚拟化是指为运行的程序或软件营造它所需要的执行环境,在采用虚拟化技术后,程序或软件的运行不再独享底层的物理计算资源,它只是运行在一个完全相同的物理计算资源中,而底层的影响可能与之前所运行的计算机结构完全不同。虚拟化的主要目的是对IT基础设施和资源管理方式的简化。虚拟化的消费者可以是最终用户、应用程序、 *** 作系统、访问资源或与资源交互相关的其他服务。由于虚拟化能降低消费者与资源之间的耦合程度,消费者不再依赖于资源的特定实现,因此在对消费者的管理工作影响最小的基础上,可以通过手工、半自动、或者服务级协定(SLA)等来实现对资源的管理。
11 虚拟化的分类
从虚拟化的目的来看,虚拟化技术主要分为以下几个大类:
(1)平台虚拟化(Platform Virtualization),它是针对计算机和 *** 作系统的虚拟化,又分成服务器虚拟化和桌面虚拟化。服务器虚拟化是一种通过区分资源的优先次序,并将服务器资源分配给最需要它们的工作负载的虚拟化模式,它通过减少为单个工作负载峰值而储备的资源来简化管理和提高效率。桌面虚拟化是为提高人对计算机的 *** 控力,降低计算机使用的复杂性,为用户提供更加方便适用的使用环境的一种虚拟化模式。平台虚拟化主要通过CPU虚拟化、内存虚拟化和I/O接口虚拟化来实现。
(2)资源虚拟化(Resource Virtualization),针对特定的计算资源进行的虚拟化,例如,存储虚拟化、网络资源虚拟化等。存储虚拟化是指把 *** 作系统有机地分布于若干内外存储器,两者结合成为虚拟存储器。网络资源虚拟化最典型的是网格计算,网格计算通过使用虚拟化技术来管理网络上的数据,并在逻辑上将其作为一个系统呈现给消费者,它动态地提供了符合用户和应用程序需求的资源,同时还将提供对基础设施的共享和访问的简化。当前,有些研究人员提出利用软件代理技术来实现计算网络空间资源的虚拟化,如Gaia,Net Chaser[21],Spatial Agent。
(3)应用程序虚拟化(Application Virtualization),它包括仿真、模拟、解释技术等。Java 虚拟机是典型的在应用层进行虚拟化。基于应用层的虚拟化技术,通过保存用户的个性化计算环境的配置信息,可以实现在任意计算机上重现用户的个性化计算环境。服务虚拟化是近年研究的一个热点,服务虚拟化可以使业务用户能按需快速构建应用的需求,通过服务聚合,可屏蔽服务资源使用的复杂性,使用户更易于直接将业务需求映射到虚拟化的服务资源。现代软件体系结构及其配置的复杂性阻碍了软件开发生命周期,通过在应用层建立虚拟化的模型,可以提供最佳开发测试和运行环境。
(4)表示层虚拟化。在应用上与应用程序虚拟化类似,所不同的是表示层虚拟化中的应用程序运行在服务器上,客户机只显示应用程序的UI界面和用户 *** 作。表示层虚拟化软件主要有微软的Windows 远程桌面(包括终端服务)、Citrix Metaframe Presentation Server和Symantec PcAnywhere等。
12 虚拟化的方法
通常所说的虚拟化主要是指平台虚拟化,它通过控制程序隐藏计算平台的实际物理特性,为用户提供抽象的、统一的、模拟的计算环境。通常虚拟化可以通过指令级虚拟化和系统级虚拟化来实现。
121 指令级虚拟化方法
在指令集层次上实现虚拟化,即将某个硬件平台上的二进制代码转换为另一个平台上的二进制代码,实现不同指令集间的兼容,也被称作“二进制翻译”。二进制翻译是通过仿真来实现的,即在一个具有某种接口和功能的系统上实现另一种与之具有不同接口和功能的系统。二进制翻译的软件方式,它可以有3 种方式实现:解释执行、静态翻译、动态翻译。
近年来,最新的二进制翻译系统的研究主要在运行时编译、自适应优化方面,由于动态翻译和执行过程的时间开销主要包括四部分:即磁盘访问开销、存储访问开销、翻译和优化开销、目标代码的执行开销,所以要提高二进制翻译系统的效率主要应减少后3个方面的开销。目前典型的二进制翻译系统主要有Daisy/BOA、Crusoe、Aeries、IA-32EL、Dynamo 动态优化系统和JIT编译技术等。
122 系统级虚拟化方法
系统虚拟化是在一台物理机上虚拟出多个虚拟机。从系统架构看,虚拟机监控器(VMM)是整个虚拟机系统的核心,它承担了资源的调度、分配和管理,保证多个虚拟机能够相互隔离的同时运行多个客户 *** 作系统。系统级虚拟化要通过CPU虚拟化、内存虚拟化和I/O虚拟化实现。
(1)CPU虚拟化
CPU虚拟化为每个虚拟机提供一个或多个虚拟CPU,多个虚拟CPU分时复用物理CPU,任意时刻一个物理CPU只能被一个虚拟CPU使用。VMM必须为各虚拟CPU合理分配时间片并维护所有虚拟CPU的状态,当一个虚拟CPU的时间片用完需要切换时,要保存当前虚拟CPU的状态,将被调度的虚拟CPU的状态载入物理CPU。X86 的CPU虚拟化方法主要有:二进制代码动态翻译(dynamic binary translation)、半虚拟化(para-virtualization)和预虚拟化技术。为了弥补处理器的虚拟化缺陷,现有的虚拟机系统都采用硬件辅助虚拟化技术。CPU虚拟化需要解决的问题是:①虚拟CPU的正确运行,虚拟CPU正确运行的关键是保证虚拟机指令正确执行,各虚拟机之间不互相影响,即指令的执行结果不改变其他虚拟机的状态,目前主要是通过模拟执行和监控运行;②虚拟CPU的调度。虚拟CPU的调度是指由VMM决定当前哪一个虚拟CPU实际在物理CPU上运行,保证虚拟机之间的隔离性、虚拟CPU的性能、调度的公平。虚拟机环境的调度需求是要充分利用CPU资源、支持精确的CPU分配、性能隔离、考虑虚拟机之间的不对等、考虑虚拟机之间的依赖。常见的CPU调度算法有BVT、SEDF、CB等。
(2)内存虚拟化
VMM通常采用分块共享的思想来虚拟计算机的物理内存。VMM将机器的内存分配给各个虚拟机,并维护机器内存和虚拟机内存之间的映射关系,这些内存在虚拟机看来是一段从地址0 开始的、连续的物理地址空间。在进行内存虚拟化后,内存地址将有机器地址、伪物理地址和虚拟地址三种地址。在X86 的内存寻址机制中,VMM能够以页面为单位建立虚拟地址到机器地址的映射关系,并利用页面权限设置实现不同虚拟机间内存的隔离和保护。为了提高地址转换的性能,X86 处理器中加入TLB,缓存已经转换过的虚拟地址,在每次虚拟地址空间切换时,硬件自动完成切块TLB。为了实现虚拟地址到物理地址的高效转换,通常采取复合映射的思想,通过MMU半虚拟化和影子页表来实现页表的虚拟化。虚拟机监控器的数据不能被虚拟机访问,因此需要一种隔离机制,这种隔离机制主要通过修改客户 *** 作系统或段保护来实现。内存虚拟化的优化机制,包括按需取页、虚拟存储、内存共享等。
(3)I/O虚拟化
由于I/O设备具有异构性强,内部状态不易控制等特点,VMM系统针对I/O设备虚拟化有全虚拟化、半虚拟化、软件模拟和直接I/O访问等设计思路。近年来,更多的学者将I/O虚拟化的研究放在共享的网络设备虚拟化研究,提出将IOVM结构映射到多核心服务器平台。I/O设备除了增加吞吐量和固有的并行数据流、联系串行特性以及基于分组的协议外,还应该考虑到传统的PCI 兼容的PCI Express的硬件,建立相应的总线适配器,以弥补象单一主机无专门的驱动程序时的需要。有些研究人员专注于外存储虚拟化的研究,提出让存储虚拟化系统上的SCSI目标模拟器运行在SAN上,存储动态的目标主机的物理信息,并使用映射表方法来修改SCSI命令地址,使用位图的技术来管理可用空间等思想。存储虚拟化系统应提供诸如逻辑卷大小、各种功能、数据镜像和快照,并兼容集群主机和多个 *** 作系统。由于外存储虚拟化能全面提升存储区域网络的服务质量,而带外虚拟化与带内虚拟化相比具有性能高和扩展性好等优点,通过运用按序 *** 作、Redo日志以及日志完整性鉴别,设计基于关系模型的磁盘上虚拟化元数据组织方式,可以形成一致持久的带外虚拟化系统。
13 虚拟化的管理
虚拟化的管理主要指多虚拟机系统的管理,多虚拟机系统是指在对多计算系统资源抽象表示的基础上,按照自己的资源配置构建虚拟计算系统,其主要包括虚拟机的动态迁移技术和虚拟机的管理技术。
(1)虚拟机之间的迁移
将虚拟化作为一种手段管理现有的资源和加强其在网络计算的利用率,通过构建分布式可重构的虚拟机,必要时在物理服务器运行时迁移服务。通过移动代理技术、分布式虚拟机等提高资源利用率和服务可用性,通过寻找服务最优的策略在可重构和分布式虚拟机上迁移。为了将虚拟机运行的 *** 作系统与应用程序从一个物理结点迁移到另外一个运行结点,同时保持客户 *** 作系统和应用程序不受干扰,有些研究者提出以数据为中心的可迁移的虚拟运行环境,使得用户 *** 作环境实现异地迁移、无缝重构;
也有研究人员提出程序执行环境的动态按需配置机制。在跨物理服务器迁移虚拟机,进行自动化的虚拟服务器的管理,必须考虑高层次的服务质量要求和资源管理成本。有些研究人员提出了通过管理程序控制的方法,以支持移动IP的实时迁移虚拟机在网络上,使虚拟机实时迁移其分布计算资源,从而改善迁移性能,降低网络恢复延迟,提供高可靠性和容错。有些研究机构通过设计一个通用的硬件抽象层,实现多个虚拟机的移植,具有高效率执行环境中的移动设备。虚拟机的迁移步骤一般有启动迁移、内存迁移、冻结虚拟机、虚拟机恢复执行。
(2)虚拟机的管理
对于多虚拟机来说,一个非常重要的方面是减少用户对动态的和复杂的物理设备的管理和维护,通过软件和工具来实现任务管理。当前典型的多虚拟机服务器管理软件是Virtual Infrastructure,它通过Virtual Center管理服务器的虚拟机池,通过VMotion完成虚拟机的迁移,通过VMFS管理多虚拟机文件系统。其次,Parallax 是针对Xen 的多虚拟机管理器,它通过采用消除写共享,增强客户端的缓存等方式并利用模板映像来建立整个系统;同时使用快照(snapshot)以及写时复制(copy-on-write)机制来实现块级共享,并使用副本来保证可用性。虚拟机监控器直接控制parallax 使用的物理盘,它们运行物理设备驱动器,并给虚拟磁盘镜像VDI 的本地虚拟机提供一个普通的块接口。
2 虚拟化在制造业信息化中的应用
21 虚拟化在制造业信息化中的应用框架
当今制造业正朝着精密化、自动化、柔性化、集成化、网络化、信息化和智能化的方向发展,在这种趋势下,诞生了许多先进制造技术和先进制造模式。这些先进制造技术和先进制造模式要求现有的IT基础设施能提供更高的计算服务水平,因此在制造业信息化中,需要建立以虚拟化为导向的资源分配体系结构,提供客户驱动的服务管理和计算风险管理,维持以服务水平协议(SLA)为导向的资源分配体系。虚拟化在制造业信息化中主要用于集中IT管理、应用整合、工业控制、虚拟制造等。
处在最底层的是制造业企业的虚拟计算资源池(VirtualCluster),它由多台物理服务器(PhysicsMachine)形成,各物理服务器上运行着虚拟化软件(VMM),虚拟化软件上运行着完成各种任务需求的虚拟机,虚拟计算资源池的虚拟化管理软件(VMS)为IT环境提供集中化、 *** 作自动化、资源优化的功能,可以快速部署向导和虚拟机模板。虚拟计算资源池中的虚拟机将不同类型的客户 *** 作系统(Guest OS)和运行其上的数据层、服务层应用程序(App)封装在一起,形成一个企业协同设计制造的完整系统,为表示层的用户提供多种形态的数据处理和显示功能。在图1 的框架中,虚拟计算资源池的动态资源调度(DRS)模块可以跨越物理机不间断地监控资源利用率,并根据反映业务需要和不断变化的优先级的预定规则,在多个虚拟机之间分配可用资源。在制造业信息化中,集中IT管理、应用整合、工业控制、虚拟制造等多种应用需求都将以各种服务的形式被封装到了虚拟机中,例如制造任务协同服务、资源管理服务、信息访问服务、>1 什么是服务器虚拟化服务器虚拟化是指在单个物理服务器上运行多个相互独立的 *** 作系统的一种技术。通过虚拟化软件将单个物理服务器划分为多个虚拟机。每个虚拟机都能共享物理主机上的物理资源,包括CPU、内存、磁盘和网络资源等。作为一种主流应用技术,越来越多的组织机构都已经或者正在实施服务器虚拟化,它可以帮助节省投资、增加资源利用率,对现有基础设施无需重大变更就可以提高IT响应速度和灵活性。
2 服务器虚拟化技术的优势
① 提高服务器利用率:大部分服务器的利用率仅为全部性能的三分之一甚至更少,通过将多个工作负荷整合至一台服务器上,可以实现更高的资源利用率。
② 提高业务持续性:业务持续性对系统可靠性提出了更高要求,服务器虚拟化技术强大的容错、灾备、快速恢复特性,可以提高系统可靠性,从而维持业务持续性。
③ 动态资源调配:服务器虚拟化可以实时自动平衡工作负载。通过实时迁移功能,资源调配工具可以将运行中的虚拟机在线迁移至拥有更多资源的其他服务器上,或者灵活调整其他虚拟机,从而匹配工作负载,实现业务和资源最优化。
3 利用服务器虚拟化的几种情况
31 优化已退出业务应用但仍需保持在线的系统
随着业务不断发展,一些系统已不再适用,新系统取而代之,一般的做法是数据迁移至新系统,旧系统下线,但也有一些情况并不迁移数据,旧系统维持在线作为历史查阅之用。对于这样的情况,由于对服务能力要求的大幅降低,继续保持旧系统运行会造成一定的资源浪费,此时便可以将其虚拟化,整合多个业务到一个物理服务器中集中运行,从而降低综合运维成本。
32 迁移运维困难的旧系统
一个应用系统也许会持续使用多年,硬件设备随时间推移逐渐老化,由于厂商服务及备件问题,后期运维成本逐渐增大以致无法维持,而随着硬件技术的发展和 *** 作系统更新,新的服务器却可能因兼容性而无法使用,为解决这一矛盾,利用虚拟化软件的兼容性,将新服务器虚拟化之后,模拟原运行环境,部署旧系统和应用,使之得以延续生命周期。
33 利用计算能力强的新硬件,整合多个旧系统
每个系统对服务器性能都有一定要求,而随着技术的发展,新硬件的计算能力大幅提高,远超出旧系统的需求,如果在更新服务器时,同时利用虚拟化将多个旧系统装入一个物理服务器中,通过合理调配虚拟机资源,可以保证在节省空间、节约电力,节约投资的同时又满足多系统并存对资源的需求。
34 软件开发和测试环境
通过服务器虚拟化,可以以较低的成本,快速创建和复制特定类型的软硬件环境,用于软件开发和测试。同时虚拟机的快照和快速恢复特性也非常适合于此类环境的工作要求。
35 提高服务的安全性
通过服务器虚拟化,将相同类型的一组服务,根据不同的服务对象或业务需要,部署同一物理主机的在不同的虚拟机中,使服务之间相互隔离,互不影响,从而提高服务的可靠性和安全性。
4 服务器虚拟化的常用软件
41 Microsoft Hpyer-V
Hyper-V是微软伴随Windows Server 2008推出的服务器虚拟化解决方案,采用了全新的64位微内核管理程序架构,让Hyper-V在性能和安全性上都有较大提高。利用新的虚拟服务程序/虚拟服务客户端(VSP/VSC)架构使磁盘、网络等核心资源的访问利用得到改善。Hyper-V支持不同类型的(例如Windows、Linux及其他 *** 作系统)32位和64位 *** 作系统,具有非常好的硬件兼容性,但Hyper-V要求处理器必须支持AMD-V或者Intel VT技术。
42 VMware ESX server
ESX server是当前服务器市场上最成熟,最流行的虚拟服务器产品。是适用于任何系统环境的高效灵活的企业级虚拟主机平台,对比其他虚拟软件产品,ESX的最大优点是可以极大减少宿主系统所占用资源,其内核直接运行在硬件之上,系统稳定性和性能都有很大的提高。其大型机级别的架构提供了空前的性能和资源控制特性,适合各种要求严格的应用程序的需要。同样VMware ESX Server需要处理器支持硬件辅助虚拟化技术才可以更加有效地运行。
43 Citrix XenServer
XenServer作为一种开放的、功能强大的服务器虚拟化系统,能够为任何服务器和数据中心虚拟化项目提供所有关键特性,强大的可扩展性支持任何规模的企业,满足Windows和Linux系列的 *** 作系统以及复杂的存储需求。XenServer基于开源的Xen系统管理程序,直接运行在服务器硬件上,作为准虚拟化技术的代表,其响应能力基本接近未经虚拟化处理的物理服务器,可以以较低的部署成本实现最佳的性能和可扩展性。
5 服务器虚拟化之后的常见问题
51 单点故障风险
虚拟化最大的优势就是服务器整合,节省运营成本,但这对用户来说也意味着要将所有的鸡蛋放在一个篮子里,增加了风险。过去在多台物理服务器上运行不同的工作负载,当其中一台服务器宕机时,不至于所有工作负载都停止运行。而在虚拟化环境里,一旦物理服务器故障宕机,就意味着所有该服务器承载的工作负载(虚拟机)都会陷入瘫痪,若不能及时恢复将给企业带来灾难性的后果。因此应设立额外的冗余物理服务器,当某一物理服务器出现故障,通过虚拟化软件的在线迁移工具将其对应的工作负载及时动态迁移到别的物理服务器上,虽然增加了虚拟化成本,但可以有效避免全部虚拟服务器崩溃的风险。
52 潜在安全风险
和很多技术方案一样,服务器虚拟化由于系统架构固有特点决定了在安全方面存在一定的潜在风险。当不同的工作负载在虚拟机上运行的时候,作为宿主的物理主机的安全变得更为重要。如果一个未经授权的用户获取了宿主 *** 作系统的访问权限,便有可能复制敏感数据或破获整个虚拟机系统。同时也可以关闭虚拟机或进行宿主机层面的重新配置,从而造成严重的服务中断。对于访问者而言虚拟服务器和物理服务器没有区别,同样面临被人恶意攻击的风险,一旦一台有漏洞的虚拟机被攻陷,安全威胁就可以透过网络扩散到其它虚拟机,从未威胁整个虚拟机管理系统。物理服务器作为虚拟服务器的根本,保护其稳定安全,是安全防范工作的重中之重。虚拟机环境下,病毒和恶意软件的影响很可能是同一台物理服务器上的所有虚拟工作负载,而不仅仅是一个单独的虚拟机,会给系统资源造成相当大的负荷。另外关于病毒防护,一般做法是将每个独立虚拟机单独安装病毒防护软件,这样将导致总体消耗的系统资源非常巨大,如果能采用专门应用于虚拟化平台的安全防护软件效果可能会更好。
53 I/O瓶颈和数据备份
相对于计算能力,存储性能增长的速度明显要慢得多。对于虚拟化而言,I/O瓶颈和缓慢的存储性能成为一大难题。高密度的虚拟化产生大量I/O流导致物理硬盘的频繁 *** 作,极大增加了磁盘工作负载,并且缓存对性能的提升效果也越来越有限。服务器虚拟化环境下,如果仍然使用传统备份方法来保护数据将是得不偿失的,在一台物理服务器上同时进行多个虚拟机数据备份时,备份任务将对服务器硬件资源进行激烈争夺,同时虚拟机的工作负载迁移工具会使得备份问题变得更加复杂。因此每台虚拟服务器,都必需实施相应的备份策略,对配置文件、虚拟机文件及其中的重要数据都要进行备份。预留一定的服务器资源用于备份任务,安排合理完善的备份计划,合理利用虚拟机快照工具有助于改善这一状况。
6 结语
近几年,服务器虚拟化已被广大用户所接受,它将固定不变的硬件设备转化为可以动态管理的“资源池”,从而提高资源的利用率,简化管理,提高系统可用性,节约投资,降低综合运维成本,增强IT对业务的变化的适应力,所有这些对用户都是真实的利益所在。任何一种技术都会有优势和劣势,但是随着技术的不断进步,相信虚拟化应用过程中出现的各种不足和问题都会得以改进和解决。
参考文献:
[1]郝勇、许秀文、杨铭,浅谈服务器虚拟化[J]中国管理信息化,2011(04)
[2]韩寓,服务器虚拟化技术研究与分析[J]电脑知识与技术,2011(07)
什么是虚拟化
虚拟化(Virtualization)技术最早出现在 20 世纪 60 年代的 IBM 大型机系统,在70年代的 System 370 系列中逐渐流行起来,这些机器通过一种叫虚拟机监控器(Virtual Machine Monitor,VMM)的程序在物理硬件之上生成许多可以运行独立 *** 作系统软件的虚拟机(Virtual Machine)实例。随着近年多核系统、集群、网格甚至云计算的广泛部署,虚拟化技术在商业应用上的优势日益体现,不仅降低了 IT 成本,而且还增强了系统安全性和可靠性,虚拟化的概念也逐渐深入到人们日常的工作与生活中。
虚拟化是一个广义的术语,对于不同的人来说可能意味着不同的东西,这要取决他们所处的环境。在计算机科学领域中,虚拟化代表着对计算资源的抽象,而不仅仅局限于虚拟机的概念。例如对物理内存的抽象,产生了虚拟内存技术,使得应用程序认为其自身拥有连续可用的地址空间(Address Space),而实际上,应用程序的代码和数据可能是被分隔成多个碎片页或段),甚至被交换到磁盘、闪存等外部存储器上,即使物理内存不足,应用程序也能顺利执行。
虚拟化技术的分类
虚拟化技术主要分为以下几个大类 [1]:
平台虚拟化(Platform Virtualization),针对计算机和 *** 作系统的虚拟化。
资源虚拟化(Resource Virtualization),针对特定的系统资源的虚拟化,比如内存、存储、网络资源等。
应用程序虚拟化(Application Virtualization),包括仿真、模拟、解释技术等。
我们通常所说的虚拟化主要是指平台虚拟化技术,通过使用控制程序(Control Program,也被称为 Virtual Machine Monitor 或 Hypervisor),隐藏特定计算平台的实际物理特性,为用户提供抽象的、统一的、模拟的计算环境(称为虚拟机)。虚拟机中运行的 *** 作系统被称为客户机 *** 作系统(Guest OS),运行虚拟机监控器的 *** 作系统被称为主机 *** 作系统(Host OS),当然某些虚拟机监控器可以脱离 *** 作系统直接运行在硬件之上(如 VMWARE 的 ESX 产品)。运行虚拟机的真实系统我们称之为主机系统。
平台虚拟化技术又可以细分为如下几个子类:
全虚拟化(Full Virtualization)
全虚拟化是指虚拟机模拟了完整的底层硬件,包括处理器、物理内存、时钟、外设等,使得为原始硬件设计的 *** 作系统或其它系统软件完全不做任何修改就可以在虚拟机中运行。 *** 作系统与真实硬件之间的交互可以看成是通过一个预先规定的硬件接口进行的。全虚拟化 VMM 以完整模拟硬件的方式提供全部接口(同时还必须模拟特权指令的执行过程)。举例而言,x86 体系结构中,对于 *** 作系统切换进程页表的 *** 作,真实硬件通过提供一个特权 CR3 寄存器来实现该接口, *** 作系统只需执行 "mov pgtable,%%cr3" 汇编指令即可。全虚拟化 VMM 必须完整地模拟该接口执行的全过程。如果硬件不提供虚拟化的特殊支持,那么这个模拟过程将会十分复杂:一般而言,VMM 必须运行在最高优先级来完全控制主机系统,而 Guest OS 需要降级运行,从而不能执行特权 *** 作。当 Guest OS 执行前面的特权汇编指令时,主机系统产生异常(General Protection Exception),执行控制权重新从 Guest OS 转到 VMM 手中。VMM 事先分配一个变量作为影子 CR3 寄存器给 Guest OS,将 pgtable 代表的客户机物理地址(Guest Physical Address)填入影子 CR3 寄存器,然后 VMM 还需要 pgtable 翻译成主机物理地址(Host Physical Address)并填入物理 CR3 寄存器,最后返回到 Guest OS中。随后 VMM 还将处理复杂的 Guest OS 缺页异常(Page Fault)。比较著名的全虚拟化 VMM 有 Microsoft Virtual PC、VMware Workstation、Sun Virtual Box、Parallels Desktop for Mac 和 QEMU。
超虚拟化(Paravirtualization)
这是一种修改 Guest OS 部分访问特权状态的代码以便直接与 VMM 交互的技术。在超虚拟化虚拟机中,部分硬件接口以软件的形式提供给客户机 *** 作系统,这可以通过 Hypercall(VMM 提供给 Guest OS 的直接调用,与系统调用类似)的方式来提供。例如,Guest OS 把切换页表的代码修改为调用 Hypercall 来直接完成修改影子 CR3 寄存器和翻译地址的工作。由于不需要产生额外的异常和模拟部分硬件执行流程,超虚拟化可以大幅度提高性能,比较著名的 VMM 有 Denali、Xen。
硬件辅助虚拟化(Hardware-Assisted Virtualization)
硬件辅助虚拟化是指借助硬件(主要是主机处理器)的支持来实现高效的全虚拟化。例如有了 Intel-VT 技术的支持,Guest OS 和 VMM 的执行环境自动地完全隔离开来,Guest OS 有自己的“全套寄存器”,可以直接运行在最高级别。因此在上面的例子中,Guest OS 能够执行修改页表的汇编指令。Intel-VT 和 AMD-V 是目前 x86 体系结构上可用的两种硬件辅助虚拟化技术。
部分虚拟化(Partial Virtualization)
VMM 只模拟部分底层硬件,因此客户机 *** 作系统不做修改是无法在虚拟机中运行的,其它程序可能也需要进行修改。在历史上,部分虚拟化是通往全虚拟化道路上的重要里程碑,最早出现在第一代的分时系统 CTSS 和 IBM M44/44X 实验性的分页系统中。
*** 作系统级虚拟化(Operating System Level Virtualization)
在传统 *** 作系统中,所有用户的进程本质上是在同一个 *** 作系统的实例中运行,因此内核或应用程序的缺陷可能影响到其它进程。 *** 作系统级虚拟化是一种在服务器 *** 作系统中使用的轻量级的虚拟化技术,内核通过创建多个虚拟的 *** 作系统实例(内核和库)来隔离不同的进程,不同实例中的进程完全不了解对方的存在。比较著名的有 Solaris Container [2],FreeBSD Jail 和 OpenVZ 等。
这种分类并不是绝对的,一个优秀的虚拟化软件往往融合了多项技术。例如 VMware Workstation 是一个著名的全虚拟化的 VMM,但是它使用了一种被称为动态二进制翻译的技术把对特权状态的访问转换成对影子状态的 *** 作,从而避免了低效的 Trap-And-Emulate 的处理方式,这与超虚拟化相似,只不过超虚拟化是静态地修改程序代码。对于超虚拟化而言,如果能利用硬件特性,那么虚拟机的管理将会大大简化,同时还能保持较高的性能。
本文讨论的虚拟化技术只针对 x86 平台(含 AMD 64),并假定虚拟机中运行的 Guest OS 也是为 x86 平台设计的。
--------------------------------------------------------------------------------
回页首
纯软件虚拟化技术的原理及面临的挑战
虚拟机监控器应当具备的条件
1974 年,Popek 和 Goldberg 在《Formal Requirements for Virtualizable Third Generation Architectures》[3] 论文中提出了一组称为虚拟化准则的充分条件,满足这些条件的控制程序可以被称为虚拟机监控器(Virtual Machine Monitor,简称 VMM):
资源控制。控制程序必须能够管理所有的系统资源。
等价性。在控制程序管理下运行的程序(包括 *** 作系统),除时序和资源可用性之外的行为应该与没有控制程序时的完全一致,且预先编写的特权指令可以自由地执行。
效率性。绝大多数的客户机指令应该由主机硬件直接执行而无需控制程序的参与。
尽管基于简化的假设,但上述条件仍为评判一个计算机体系结构是否能够有效支持虚拟化提供了一个便利方法,也为设计可虚拟化计算机架构给出了指导原则。
原理简介
我们知道,传统的 x86 体系结构缺乏必要的硬件支持,任何虚拟机监控器都无法直接满足上述条件,所以不是一个可虚拟化架构,但是我们可以使用纯软件实现的方式构造虚拟机监控器。
虚拟机是对真实计算环境的抽象和模拟,VMM 需要为每个虚拟机分配一套数据结构来管理它们状态,包括虚拟处理器的全套寄存器,物理内存的使用情况,虚拟设备的状态等等。VMM 调度虚拟机时,将其部分状态恢复到主机系统中。并非所有的状态都需要恢复,例如主机 CR3 寄存器中存放的是 VMM 设置的页表物理地址,而不是 Guest OS 设置的值。主机处理器直接运行 Guest OS 的机器指令,由于 Guest OS运行在低特权级别,当访问主机系统的特权状态(如写 GDT 寄存器)时,权限不足导致主机处理器产生异常,将运行权自动交还给 VMM。此外,外部中断的到来也会导致 VMM 的运行。VMM 可能需要先将 该虚拟机的当前状态写回到状态数据结构中,分析虚拟机被挂起的原因,然后代表 Guest OS 执行相应的特权 *** 作。最简单的情况,如Guest OS 对 CR3 寄存器的修改,只需要更新虚拟机的状态数据结构即可。一般而言,大部分情况下,VMM 需要经过复杂的流程才能完成原本简单的 *** 作。最后 VMM 将运行权还给 Guest OS,Guest OS 从上次被中断的地方继续执行,或处理 VMM “塞”入的虚拟中断和异常。这种经典的虚拟机运行方式被称为 Trap-And-Emulate,虚拟机对于 Guest OS 完全透明,Guest OS 不需要任何修改,但是 VMM 的设计会比较复杂,系统整体性能受到明显的损害。
面临的挑战
在设计纯软件 VMM 的时候,需要解决如下挑战 [4]:
确保 VMM 控制所有的系统资源。
x86 处理器有 4 个特权级别,Ring 0 ~ Ring 3,只有运行在 Ring 0 ~ 2 级时,处理器才可以访问特权资源或执行特权指令;运行在 Ring 0 级时,处理器可以访问所有的特权状态。x86 平台上的 *** 作系统一般只使用 Ring 0 和 Ring 3 这两个级别, *** 作系统运行在 Ring 0 级,用户进程运行在 Ring 3 级。为了满足上面的第一个充分条件-资源控制,VMM 自己必须运行在 Ring 0 级,同时为了避免 Guest OS 控制系统资源,Guest OS 不得不降低自身的运行级别,运行在 Ring 1 或 Ring 3 级(Ring 2 不使用)。
特权级压缩(Ring Compression)。
VMM 使用分页或段限制的方式保护物理内存的访问,但是 64 位模式下段限制不起作用,而分页又不区分 Ring 0, 1, 2。为了统一和简化 VMM的设计,Guest OS 只能和 Guest 进程一样运行在 Ring 3 级。VMM 必须监视 Guest OS 对 GDT、IDT 等特权资源的设置,防止 Guest OS 运行在 Ring 0级,同时又要保护降级后的 Guest OS 不受 Guest 进程的主动攻击或无意破坏。
特权级别名(Ring Alias)。
特权级别名是指 Guest OS 在虚拟机中运行的级别并不是它所期望的。VMM 必须保证 Guest OS 不能获知正在虚拟机中运行这一事实,否则可能打破等价性条件。例如,x86 处理器的特权级别存放在 CS 代码段寄存器内,Guest OS 可以使用非特权 push 指令将 CS 寄存器压栈,然后 pop 出来检查该值。又如,Guest OS 在低特权级别时读取特权寄存器 GDT、LDT、IDT 和 TR,并不发生异常,从而可能发现这些值与自己期望的不一样。为了解决这个挑战,VMM 可以使用动态二进制翻译的技术,例如预先把 “push %%cs” 指令替换,在栈上存放一个影子 CS 寄存器值;又如,可以把读取 GDT 寄存器的 *** 作“sgdt dest”改为“movl fake_gdt, dest”。
地址空间压缩(Address Space Compression)。
地址空间压缩是指 VMM 必须在Guest OS 的地址空间中保留一部分供其使用。例如,中断描述表寄存器(IDT Register)中存放的是中断描述表的线性地址,如果 Guest OS 运行过程中来了外部中断或触发处理器异常,必须保证运行权马上转移到 VMM 中,因此 VMM 需要将 Guest OS 的一部分线性地址空间映射成自己的中断描述表的主机物理地址。VMM 可以完全运行在 Guest OS 的地址空间中,也可以拥有独立的地址空间,后者的话,VMM 只占用 Guest OS 很少的地址空间,用于存放中断描述表和全局描述符表(GDT)等重要的特权状态。无论如何哪种情况,VMM 应该防止 Guest OS 直接读取和修改这部分地址空间。
处理 Guest OS 的缺页异常。
内存是一种非常重要的系统资源,VMM 必须全权管理,Guest OS 理解的物理地址只是客户机物理地址(Guest Physical Address),并不是最终的主机物理地址(Host Physical Address)。当 Guest OS 发生缺页异常时,VMM 需要知道缺页异常的原因,是 Guest 进程试图访问没有权限的地址,或是客户机线性地址(Guest Linear Address)尚未翻译成 Guest Physical Address,还是客户机物理地址尚未翻译成主机物理地址。一种可行的解决方法是 VMM 为 Guest OS 的每个进程的页表构造一个影子页表,维护 Guest Linear Address 到 Host Physical Address 的映射,主机 CR3 寄存器存放这个影子页表的物理内存地址。VMM 同时维护一个 Guest OS 全局的 Guest Physical Address 到 Host Physical Address 的映射表。发生缺页异常的地址总是Guest Linear Address,VMM 先去 Guest OS 中的页表检查原因,如果页表项已经建立,即对应的Guest Physical Address 存在,说明尚未建立到 Host Physical Address的映射,那么 VMM 分配一页物理内存,将影子页表和映射表更新;否则,VMM 返回到 Guest OS,由 Guest OS 自己处理该异常。
处理 Guest OS 中的系统调用。
系统调用是 *** 作系统提供给用户的服务例程,使用非常频繁。最新的 *** 作系统一般使用 SYSENTER/SYSEXIT 指令对来实现快速系统调用。SYSENTER 指令通过IA32_SYSENTER_CS,IA32_SYSENTER_EIP 和 IA32_SYSENTER_ESP 这 3 个 MSR(Model Specific Register)寄存器直接转到 Ring 0级;而 SYSEXIT 指令不在 Ring 0 级执行的话将触发异常。因此,如果 VMM 只能采取 Trap-And-Emulate 的方式处理这 2 条指令的话,整体性能将会受到极大损害。
转发虚拟的中断和异常。
所有的外部中断和主机处理器的异常直接由 VMM 接管,VMM 构造必需的虚拟中断和异常,然后转发给 Guest OS。VMM 需要模拟硬件和 *** 作系统对中断和异常的完整处理流程,例如 VMM 先要在 Guest OS 当前的内核栈上压入一些信息,然后找到 Guest OS 相应处理例程的地址,并跳转过去。VMM 必须对不同的 Guest OS 的内部工作流程比较清楚,这增加了 VMM 的实现难度。同时,Guest OS 可能频繁地屏蔽中断和启用中断,这两个 *** 作访问特权寄存器 EFLAGS,必须由 VMM 模拟完成,性能因此会受到损害。 Guest OS 重新启用中断时,VMM 需要及时地获知这一情况,并将积累的虚拟中断转发。
Guest OS 频繁访问特权资源。
Guest OS对特权资源的每次访问都会触发处理器异常,然后由 VMM 模拟执行,如果访问过于频繁,则系统整体性能将会受到极大损害。比如对中断的屏蔽和启用,cli(Clear Interrupts)指令在 Pentium 4 处理器上需要花费 60 个时钟周期(cycle)。又如,处理器本地高级可编程中断处理器(Local APIC)上有一个 *** 作系统可修改的任务优先级寄存器(Task-Priority Register),IO-APIC 将外部中断转发到 TPR 值最低的处理器上(期望该处理器正在执行低优先级的线程),从而优化中断的处理。TPR 是一个特权寄存器,某些 *** 作系统会频繁设置(Linux Kernel只在初始化阶段为每个处理器的 TPR 设置相同的值)。
软件 VMM 所遇到的以上挑战从本质上来说是因为 Guest OS 无法运行在它所期望的最高特权级,传统的 Trap-And-Emulate 处理方式虽然以透明的方式基本解决上述挑战,但是带来极大的设计复杂性和性能下降。当前比较先进的虚拟化软件结合使用二进制翻译和超虚拟化的技术,核心思想是动态或静态地改变 Guest OS 对特权状态访问的 *** 作,尽量减少产生不必要的硬件异常,同时简化 VMM 的设计。
--------------------------------------------------------------------------------
回页首
Intel-VT 硬件辅助虚拟化技术详解
2005 年冬天,英特尔带来了业内首个面向台式机的硬件辅助虚拟化技术 Intel-VT 及相关的处理器产品,从而拉开了 IA 架构虚拟化技术应用的新时代大幕。支持虚拟化技术的处理器带有特别优化过的指令集来自动控制虚拟化过程,从而极大简化 VMM 的设计,VMM 的性能也能得到很大提高。其中 IA-32 处理器的虚拟化技术称为 VT-x,安腾处理器的虚拟化技术称为 VT-i。AMD 公司也推出了自己的虚拟化解决方案,称为 AMD-V。尽管 Intel-VT 和 AMD-V 并不完全相同,但是基本思想和数据结构却是相似的,本文只讨论 Intel-VT-x 技术。
新增的两种 *** 作模式
VT-x 为 IA 32 处理器增加了两种 *** 作模式:VMX root operation 和 VMX non-root operation。VMM 自己运行在 VMX root operation 模式,VMX non-root operation 模式则由 Guest OS 使用。两种 *** 作模式都支持 Ring 0 ~ Ring 3 这 4 个特权级,因此 VMM 和 Guest OS 都可以自由选择它们所期望的运行级别。
这两种 *** 作模式可以互相转换。运行在 VMX root operation 模式下的 VMM 通过显式调用 VMLAUNCH 或 VMRESUME 指令切换到 VMX non-root operation 模式,硬件自动加载 Guest OS的上下文,于是 Guest OS 获得运行,这种转换称为 VM entry。Guest OS 运行过程中遇到需要 VMM 处理的事件,例如外部中断或缺页异常,或者主动调用 VMCALL 指令调用 VMM 的服务的时候(与系统调用类似),硬件自动挂起 Guest OS,切换到 VMX root operation 模式,恢复 VMM 的运行,这种转换称为 VM exit。VMX root operation 模式下软件的行为与在没有 VT-x 技术的处理器上的行为基本一致;而VMX non-root operation 模式则有很大不同,最主要的区别是此时运行某些指令或遇到某些事件时,发生 VM exit。
虚拟机控制块
VMM 和 Guest OS 共享底层的处理器资源,因此硬件需要一个物理内存区域来自动保存或恢复彼此执行的上下文。这个区域称为虚拟机控制块(VMCS),包括客户机状态区(Guest State Area),主机状态区(Host State Area)和执行控制区。VM entry 时,硬件自动从客户机状态区加载 Guest OS 的上下文。并不需要保存 VMM 的上下文,原因与中断处理程序类似,因为 VMM 如果开始运行,就不会受到 Guest OS的干扰,只有 VMM 将工作彻底处理完毕才可能自行切换到 Guest OS。而 VMM 的下次运行必然是处理一个新的事件,因此每次 VMM entry 时, VMM 都从一个通用事件处理函数开始执行;VM exit 时,硬件自动将 Guest OS 的上下文保存在客户机状态区,从主机状态区中加载 VMM 的通用事件处理函数的地址,VMM 开始执行。而执行控制区存放的则是可以 *** 控 VM entry 和 exit 的标志位,例如标记哪些事件可以导致 VM exit,VM entry 时准备自动给 Guest OS “塞”入哪种中断等等。
客户机状态区和主机状态区都应该包含部分物理寄存器的信息,例如控制寄存器 CR0,CR3,CR4;ESP 和 EIP(如果处理器支持 64 位扩展,则为 RSP,RIP);CS,SS,DS,ES,FS,GS 等段寄存器及其描述项;TR,GDTR,IDTR 寄存器;IA32_SYSENTER_CS,IA32_SYSENTER_ESP,IA32_SYSENTER_EIP 和 IA32_PERF_GLOBAL_CTRL 等 MSR 寄存器。客户机状态区并不包括通用寄存器的内容,VMM 自行决定是否在 VM exit 的时候保存它们,从而提高了系统性能。客户机状态区还包括非物理寄存器的内容,比如一个 32 位的 Active State 值表明 Guest OS 执行时处理器所处的活跃状态,如果正常执行指令就是处于 Active 状态,如果触发了三重故障(Triple Fault)或其它严重错误就处于 Shutdown 状态,等等。
前文已经提过,执行控制区用于存放可以 *** 控 VM entry 和 VM exit 的标志位,包括:
External-interrupt exiting:用于设置是否外部中断可以触发 VM exit,而不论 Guest OS 是否屏蔽了中断。
Interrupt-window exiting:如果设置,当 Guest OS 解除中断屏蔽时,触发 VM exit。
Use TPR shadow:通过 CR8 访问 Task Priority Register(TPR)的时候,使用 VMCS 中的影子 TPR,可以避免触发 VM exit。同时执行控制区还有一个 TPR 阈值的设置,只有当 Guest OS 设置的 TR 值小于该阈值时,才触发 VM exit。
CR masks and shadows:每个控制寄存器的每一位都有对应的掩码,控制 Guest OS 是否可以直接写相应的位,或是触发 VM exit。同时 VMCS 中包括影子控制寄存器,Guest OS 读取控制寄存器时,硬件将影子控制寄存器的值返回给 Guest OS。
VMCS 还包括一组位图以提供更好的适应性:
Exception bitmap:选择哪些异常可以触发 VM exit,
I/O bitmap:对哪些 16 位的 I/O 端口的访问触发 VM exit。
MSR bitmaps:与控制寄存器掩码相似,每个 MSR 寄存器都有一组“读”的位图掩码和一组“写”的位图掩码。
每次发生 VM exit时,硬件自动在 VMCS 中存入丰富的信息,方便 VMM 甄别事件的种类和原因。VM entry 时,VMM 可以方便地为 Guest OS 注入事件(中断和异常),因为 VMCS 中存有 Guest OS 的中断描述表(IDT)的地址,因此硬件能够自动地调用 Guest OS 的处理程序。
更详细的信息请参阅 Intel 开发手册 [5]。
解决纯软件虚拟化技术面临的挑战
首先,由于新的 *** 作模式的引入,VMM 和 Guest OS 的执行由硬件自动隔离开来,任何关键的事件都可以将系统控制权自动转移到 VMM,因此 VMM 能够完全控制系统的全部资源。
其次,Guest OS 可以运行在它所期望的最高特权级别,因此特权级压缩和特权级别名的问题迎刃而解,而且 Guest OS 中的系统调用也不会触发 VM exit。
硬件使用物理地址访问虚拟机控制块(VMCS),而 VMCS 保存了 VMM 和 Guest OS 各自的 IDTR 和 CR3 寄存器,因此 VMM 可以拥有独立的地址空间,Guest OS 能够完全控制自己的地址空间,地址空间压缩的问题也不存在了。
中断和异常虚拟化的问题也得到了很好的解决。VMM 只用简单地设置需要转发的虚拟中断或异常,在 VM entry 时,硬件自动调用 Guest OS 的中断和异常处理程序,大大简化 VMM 的设计。同时,Guest OS 对中断的屏蔽及解除可以不触发 VM exit,从而提高了性能。而且 VMM 还可以设置当 Guest OS 解除中断屏蔽时触发 VM exit,因此能够及时地转发积累的虚拟中断和异常。
--------------------------------------------------------------------------------
回页首
未来虚拟化技术的发展
我们可以看到,硬件辅助虚拟化技术必然是未来的方向。Intel-VT目前还处在处理器级虚拟化技术的初级阶段,尚需在如下方面进行发展:
提高 *** 作模式间的转换速度。
两种 *** 作模式间的转换发生之如此频繁,如果不能有效减少其转换速度,即使充分利用硬件特性,虚拟机的整体性能也会大打折扣。早期的支持硬件辅助虚拟化技术的 Pentium 4 处理器需要花费 2409 个时钟周期处理 VM entry,花费 508 个时钟周期处理由缺页异常触发的 VM exit,代价相当高。随着 Intel 技术的不断完善,在新的 Core 架构上,相应时间已经减少到 937 和 446 个时钟周期。未来硬件厂商还需要进一步提高模式的转换速度,并提供更多的硬件特性来减少不必要的转换。
优化翻译后援缓冲器(TLB)的性能。
每次 VM entry 和 VM exit 发生时,由于需要重新加载 CR3 寄存器,因此 TLB(Translation Lookaside Buffer)被完全清空。虚拟化系统中 *** 作模式的转换发生频率相当高,因此系统的整体性能受到明显损害。一种可行的方案是为 VMM 和每个虚拟机分配一个全局唯一 ID,TLB 的每一项附加该 ID 信息来索引线性地址的翻译。
提供内存管理单元(MMU)虚拟化的硬件支持。
即使使用 Intel-VT 技术,VMM 还是得用老办法来处理 Guest OS 中发生的缺页异常以及Guest OS 的客户机物理地址到主机物理地址的翻译,本质原因是 VMM 完全控制主机物理内存,因此 Guest OS 中的线性地址的翻译同时牵涉到 VMM 和 Guest OS 的地址空间,而硬件只能看到其中的一个。Intel 和 AMD 提出了各自的解决方案,分别叫做 EPT(Extended Page Table)和 Nested Paging。这两种技术的基本思想是,无论何时遇到客户机物理地址,硬件自动搜索 VMM 提供的关于该 Guest OS 的一个页表,翻译成主机物理地址,或产生缺页异常来触发 VM exit。
支持高效的 I/O 虚拟化。
I/O 虚拟化需要考虑性能、可用性、可扩展性、可靠性和成本等多种因素。最简单的方式是 VMM为虚拟机模拟一个常见的 I/O 设备,该设备的功能由 VMM 用软件或复用主机 I/O 设备的方法实现。例如 Virtual PC 虚拟机提供的是一种比较古老的 S3 Trio64显卡。这种方式提高了兼容性,并充分利用 Guest OS 自带的设备驱动程序,但是虚拟的 I/O 设备功能有限且性能低下。为了提高性能,VMM 可以直接将主机 I/O 设备分配给虚拟机,这会带来两个主要挑战:1 如果多个虚拟机可以复用同一个设备,VMM 必须保证它们对设备的访问不会互相干扰。2 如果 Guest OS 使用 DMA 的方式访问 I/O 设备,由于 Guest OS 给出的地址并不是主机物理地址,VMM 必须保证在启动 DMA *** 作前将该地址正确转换。Intel 和 AMD 分别提出了各自的解决方案,分别称为 Direct I/O(VT-d)和 IOMMU,希望用硬件的手段解决这些问题,降低 VMM 实现的难度。虚拟化方式有Vmware KVM等
按系统主流就是windows2008和linux
按环境来搭配一般有:
IIS+ACCESS,IIS+MSSQL
APACHE+MySQL+PHP
TOMCAT+MSSQL,TOMCAT+ORACLE
Weblogic+oracle
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)