每一个操作系统都运行在一个不能在虚拟机中运行的CPU

深入解析x86&CPU硬件辅助虚拟化之迷[图文版]
摘要:在计算机中,CPU无疑是最重要的部件,要想虚拟化出一台电脑,CPU的虚拟化无疑是重中之重,事实上英特尔和AMD近年来也在全力推广CPU的虚拟化技术。那么究竟哪些处理器是支持硬件虚拟化,除了处理器还需要什么配合才能实现硬件虚拟化呢?
关于CPU虚拟化技术
CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。&
  虚拟化技术与多任务以及超线程技术是完全不同的。多任务是指在一个操作系统中多个程序同时并行
运行,而在虚拟化技术中,则可以同时运行多个操作系统,而且每一个操作系统中都有多个程序运行,每一个操作系统都运行在一个虚拟的CPU或者是虚拟主机
上;而超线程技术只是单CPU模拟双CPU来平衡程序运行性能,这两个模拟出来的CPU是不能分离的,只能协同工作。&
虚拟化其实就是在“学习”计算机体系中硬件抽象层和API抽象层的工作内容。在计算机中,CPU无疑是最重要的部件,要想虚拟化出一台电脑,CPU的虚拟化无疑是重中之重,事实上英特尔和AMD近年来也在全力推广CPU的虚拟化技术。那么究竟哪些处理器是支持硬件虚拟化,除了处理器还需要什么配合才能实现硬件虚拟化呢?
虚拟化的硬件环境,需要哪些硬件支持?
从处理器推出硬件虚拟化技术到现在,已经有六年的时间。虽然不少主流市售的处理器已经支持硬件虚拟化技术,一些新型的主板芯片组也提供了对I/O虚拟化的支持,但总的来看并非所有平台已经普及硬件虚拟化支持。对于企业用户来说,要想知道自己是否可以从本文中学以致用,首先要看公司的设备是否有配套的“兵器”(CPU或者主板),有必要对公司的硬件装备进行一次例行检查。
英特尔VT(Vanderpool
Technology,简称VT技术,如不特殊说明,本文均只指VT-x技术)和AMD-V的硬件支持不仅仅局限于CPU,BIOS中是否开启相关选项,芯片组是否内置相关技术都是虚拟化支持的条件。
英特尔CPU对虚拟化的支持情况精确到了CPU的SPEC code,以英特尔 Core2
Duo系列处理器为例,即使是同一型号,也有可能分为支持虚拟化和不支持虚拟化的多个批次,例如Core 2 Duo
E7500中,编号为SLB9Z的不支持,SLGTE的支持。如果大家想了解公司的英特尔CPU是否支持虚拟化,最好的办法是去官方网站查询,查询网址是:/Products/VirtualizationTechnology
AMD最早支持AMD-V的产品是2006年发布的Orlean内核的Athlon
64。在服务器CPU方面,REV.F版本的皓龙(Opteron)及后续版本(包括巴塞罗那、上海、伊斯坦布尔等核心)的处理器都支持;在桌面处理器方面,除了Sempron系列、Rev.F版本以前的Athlon/Athlon
64 X2系列,均支持AMD-V;除了Sempron系列和Turion K8 Rev
E系列以外,AMD之后的移动处理器均支持。
图1 BIOS界面里的虚拟化开启选项
BIOS是否支持虚拟化也很重要,一般会有如图1的设置界面,若要实现虚拟化功能,需要用户在BIOS中启用它。如果BIOS中找不到相关选项,那么就只能到主板厂家的官方站点去查询下载新版的BIOS,看是否提供了开启虚拟化的功能。英特尔和AMD其实都提供了对应的MSR寄存器来对硬件虚拟化技术进行激活和屏蔽处理。主板厂家在写BIOS
Code的时候只需要进行相应设定即可。
关于芯片组支持虚拟化特性,主要是指对虚拟化I/O的支持。在英特尔平台是指支持VT-d,ICH9系列和ICH10系列南桥都符合要求,而如果采用X58芯片组配合Core
i7系列处理器,则可以组成虚拟化功能最全面的配置。AMD方面则主要在它们的服务器芯片组领域提供了I/O、MMU的虚拟化支持特性,例如SR5690和SR5670芯片组。
如何用工具检测
上面三点是检测虚拟化功能的三个要点,但对于一般用户来说,总是希望能通过软件直接了解公司的配置是否支持虚拟化。能够检测虚拟化技术的工具软件非常多,笔者推荐SecurAble,因为其它一些CPU信息类检测软件检测到的VT开启实际上多半只是对CPU寄存器的探测,并没有考虑到BIOS相关设定。
这是笔者在BIOS中关闭VT选项后SecurAble的截图
另外提醒大家注意的是,这款工具并不能检测VT-d。当有如图2所示显示的时候,就表明你的英特尔CPU支持虚拟化并且在BIOS中VT的设置已经打开,如果显示Locked
Off(图3)则表示在BIOS中进行了屏蔽或相关设定,使得虚拟化选项没有正常开启,如果显示NO则表示CPU不支持虚拟化。&
传统的软件CPU虚拟化模式
软件辅助的CPU虚拟化主要有两大流派,一种叫做软件完全虚拟化(Soft Full
Virtualization),以VMware为代表,另一种则是以Xen联盟为代表的半虚拟化(Para
Virtualization,也有译作操作系统协助虚拟化)。
软件完全虚拟化的整个过程中并不需要硬件和操作系统协助参与,它不需要对客户操作系统进行代码修改。而半虚拟化则不同,它不但在VMM上面运行一个或者多个客户操作系统,还在这些客户操作系统“旁边”运行一个特别的“管理操作系统”(用Citrix
Xen的术语叫做Dom0,用Microsoft
Hyper-V的术语叫做theParentPartition)。这个“管理操作系统”是给系统管理员用来管理VMM的。而客户操作系统在Citrix
Xen体系中叫做DomU,在Microsoft
Hyper-V架构中叫做ChildPartitions。在解决x86指令集漏洞这个问题上,半虚拟化技术是通过修改客户操作系统的源代码从而使得客户操作系统和VMM工作在不同特权级别以方便进行陷入和模拟。这项技术之前有一个明显的不足,那就是对像Windows这样不开发源代码的操作系统就无法进行虚拟化,但在硬件辅助虚拟化出现后,这个缺陷已经得以补正,而近期英特尔和Xen的合作相当紧密,使得半虚拟化技术的发展也很迅速。
在传统的CPU虚拟化模型中,CPU最常采用的是特权解除(Privilege
Deprivileging)和“先陷入后模拟”的技术。其中特权解除是指为了实现VMM对虚拟机的全盘控制从而降低客户操作系统的运行特权级别的技术,它可以使VMM和客户操作系统进行类似原生操作系统中用户态和核心态之间的请求和调度返还。客户操作系统被解除特权后一般会降至Ring1或者Ring3层次(形成上期文章中提到的0/1/3和0/3/3模型,这个现象也被称为特权压缩—Ring
Compression),无论是哪一种模型,客户操作系统都无法运行于最高特权级别Ring0上,这样类似GDT,IDT,LDT和TSS这些特权指令就没法直接运行,只能通过陷入模拟的方式进行,大大增加了系统开销。而现在的x86-64平台上因为必须使用分页模式(它不能区分Ring0和Ring1/2),使得客户操作系统和客户机应用程序均运行在Ring3上,从而出现了有名的IA-32隔离安全性问题,这也是软件完全虚拟化中无法在IA32架构上虚拟出64bit客户操作系统的真正原因。
特权解除这项技术的初衷是使得大部分指令可以由客户操作系统直接执行,而执行特权指令时则可以顺利地产生陷阱,将指令交由最高特权级的VMM去处理。听上去的确很美好,但这种技术在x86指令集上却存在问题。正如前文所讲,x86指令集漏洞使得有部分指令不能够正常的陷入,而完全虚拟化中的动态二进制翻译(Dynamic
Translation,常简称DBT)技术和半虚拟化中的修改客户操作系统源码的技术都可以对付这些不友好的指令(下文我们仅以动态二进制翻译作为案例进行讲解)。
图3 软件完全虚拟化的Ring架构示意图
从图3中,我们不难看出,动态二进制翻译解决的正是发生在Guest
OS、VMM、系统硬件三者之间的部分敏感指令不能正常陷入的问题(x86指令集虚拟化漏洞)。在这里我们有必要对动态二进制翻译技术(这里只考虑相同ISA结构下的情况)进行简单的讲解。
所谓的动态二进制翻译,其实就是将客户操作系统中正在执行的核心态代码动态地转换为已经虚拟的安全代码的过程。这里所谓的“安全”,指的是对其它被客户操作系统以及VMM来讲是安全的代码。二进制代码翻译工作只发生在客户操作系统的内核态代码被调用的情况下,如图4所示。
动态二进制翻译发展到今天已经越来越成熟,一些减少动态二进制翻译系统开销的优化技术也渐渐成熟,二进制翻译后的代码是保存在转译缓存中,当遇上需要转译的指令流中存在循环指令的情况下,就可以直接从缓存中读取这部分指令流而不需要再次转译,同时它还可以起到Trace
Cache(追踪缓存)的作用,可以对跳转指令进行优化处理,这在一定程度上减小了动态二进制翻译的性能开销,如图5。
图5 一个优化二进制翻译操作包括一个代码缓存和一个代码缓存管理器
尽管优化后的动态二进制翻译已经在性能损耗上有明显下降,但动态二进制翻译技术依然有几个大的难题不易解决,它们分别是:1.系统调用、2.访问的芯片组和I/O,3.中断和DMA,内存管理、4.实时代码和精确异常等问题。这里面我们简单讲解一下系统调用机理,因为半虚拟化的超级调用和硬件辅助虚拟化中的陷入模拟都和其机理相似;而I/O,中断和内存方面的问题在硬件辅助虚拟化越来越成熟后已经得到了明显改变,但第4点中提到的缺陷则还没有非常好的解决办法。
我们可以说动态二进制翻译的系统性能开销有相当大的“功劳”是来自于系统调用。什么是系统调用呢?熟悉操作系统原理的人一定对此并不陌生,我们就以大家最熟悉的Windows平台为例,一个系统调用就是一个用户应用程序请求内核服务的结果。系统调用提供了进程和操作系统的接口(注:上一期我们讲解的ABI概念中提到了系统调用),这些调用通常以汇编语言的指令形式出现。系统调用大约可以分成进程控制、文件管理、设备管理、通信和信息维护五类,下面我们就以图6进程控制中的申请内存资源分配为例进行讲解。
图6 系统调用过程中申请内存资源的流程示意图
我们可以看到,用户程序通过产生陷阱从用户态切入了内核态,去申请扩大自己的内存使用资源,申请成功后又从内核态返回了用户态,在x86体系中系统调用的命令为:SYSENTER和SYSEXIT(或者快速SYSCALL指令等)。根据相关测试数据表明,一个在虚拟机上运行的系统调用比运行虚拟机的物理本机运行系统调用的开销大10倍。VMware的工程师曾经测试过一个采用3.8GHz
Pentium 4的系统,结果如下:
◎物理机器的系统调用需要242周期;
◎在Ring1层级上,一个32位客户操作系统上运行一个二进制转译的系统调用需要2308周期。
可以看出它浪费的周期和原生物理电脑相比还是相当大的,这在一定程度上阻碍了虚拟化的进一步性能提升,不过在硬件辅助虚拟化功能越来越成熟的今天,这个局面已经得到了有效的改善。
基于软件的二进制翻译,可以分为三类:解释执行、静态翻译和动态翻译。
解释执行对源处理器代码中的每条指令实时解释执行,系统不保存也不缓存解释过的指令,不需要用户干涉,也不进行任何优化.解释器相对容易开发,比较容易与老的体系结构高度兼容,但代码执行效率很差。
静态翻译是在源处理器代码执行之前对其进行翻译,将源机器上的二进制可执行程序文件A完全翻译成目标机器上的二进制可执行程序文件B,然后在目标机上执行程序B。一次翻译的结果可以多次使用。静态翻译器离线翻译程序,有足够的时间进行更完整细致的优化,代码执行效率较高。然而,静态翻译器可能无法完整地翻译一个程序,因而需要依赖解释器的支持;而且静态翻译器需要终端用户的参与,这给用户使用造成了很大不便。
动态翻译则在程序运行时对执行到的片断进行翻译,它克服了静态翻译的一些缺点—比如,由于不能知道控制流中某点的寄存器或内存的值而不能实现代码挖掘。动态翻译还可以解决大部分实际情况中的自修改代码问题,而这在静态翻译是不可能的;动态翻译可以利用执行时的动态信息来发掘静态编译器所不能发现的优化机会;动态翻译器对用户可以做到完全透明,无需用户干预。&
分为两家的x86 CPU硬件虚拟化
英特尔和AMD现在都是新增了针对虚拟化的操作模式和相关指令,而在机理相似的虚拟机控制结构方面,英特尔称呼它为VMCS,而AMD则叫VMCB。尽管在一些指令和模式细节上两者依然存在不同,但在整体实现原理上基本上没有太大差别,主要不同可参见图8和图9。
图8 英特尔方面,新增的虚拟化相关指令较多,而且分工明确,通过引入新的根操作模式(VMX Root
Operation)和非根操作模式(VMX Non-Root Operation)来解决旧有的陷入再模拟漏洞。
而AMD方面,则新增的指令较少,VMRUN指令是整个虚拟化技术的基础,和英特尔引出了两种专用模式不同的是,AMD只引入了Guest
Mode操作模式。
在AMD虚拟化架构中,VMRUN指令处于核心地位,它是衔接宿主机指令流和客户指令流的关键,而在英特尔方面则是细分了若干指令分别进行专项处理。
在此笔者并非给大家展示两家技术细节,而是要告诉大家什么是x86平台的硬件辅助虚拟化。因此本期将以英特尔处理器的虚拟化技术为例进行讲解。&
x86硬件辅助CPU虚拟化的过程
注:首先需要明确一点,英特尔的CPU虚拟化采用的技术别称为VT-x,但VT-x中并不仅仅只包含CPU虚拟化,还包括中断虚拟化和内存虚拟化等内容,而AMD在AMD-V在官方资料中也是把CPU、内存和中断等虚拟化技术全部放在了SVM技术规范中进行统一讲解的。
传统的IA32处理器架构并不是十分可靠的虚拟化架构,为了解决这个问题,英特尔通过VT-x技术对原有架构进行了扩展补充,其核心操作模式示意图如图11。
图11 支持VT-x技术的虚拟化架构
VT-x技术引入了两种专为虚拟化打造的操作模式,称为根操作模式(VMX Root Operation)和非根操作模式(VMX
Operation),其中VMM运行在根操作模式下,而客户操作系统则运行在非根操作模式下,每个模式都存在Ring0-3四个特权级别,所以在VT-x中,对特权级别进行描述时必须说明是在根模式还是在非根模式下。对照前面我们讲解的软件完全虚拟化时的示意图我们不难发现,客户操作系统(Guest
OS)所运行的特权级别发生了变化,由Ring1变成了Ring0,而原本工作在Ring0的VMM则被注明是工作在根操作模式下的Ring0上(有一些文档中称之为Ring-1)。相信仔细阅读上期虚拟化文章的读者朋友,不难理解英特尔为什么要制造出两个新的操作模式来,因为客户操作系统重新回到了Ring0上(当然这里是非根模式下的),而且经过英特尔对相关指令的重新设计,使得原本不能通过先陷入后模拟的方式执行的指令都可以顺利执行,而在根模式下,所有指令的执行和传统IA-32相比不会有任何变化,从而保证了原有软件和虚拟环境的正常运转。
图12 英特尔VCPU创建,运行和退出示意图
在硬件辅助CPU虚拟化中,陷入的概念已经被VM-Exit操作取代,它意味着从非根操作模式切换到根操作模式,对应的从根操作模式切换回非根操作模式被称为VMEntry。我们在上一期的文章中提到了CPU虚拟化的基本原理,这里我们有必要温习一下。里面提到了“CPU虚拟化是为物理机器上的每一个虚拟机提供一个或者多个虚拟CPU(简称VCPU),每个VCPU分时复用物理CPU,在任意时刻一个物理CPU只能被一个VCPU使用,VMM要在整个过程中合理分配时间片以及维护所有VCPU的状态”,这里谈到的VCPU状态维护其实就是VCPU的上下文切换,而VCPU的环境结构主要有硬件使用部分和软件使用部分组成,软件部分主要由VMM控制,主要包括VCPU的状态信息,浮点寄存器等,而硬件使用部分指的是英特尔和AMD用来描述和保存VCPU状态信息的内存空间,它们分别存放在被称为VMCS(Virtual-Machine
Control Structure,虚拟机控制结构)和VMCB(Virtual-Machine Control
Block虚拟机控制块)的数据域中,VMCS和VMCB都是最大不超过4KB的内存块。在进行VCPU上下文切换的时候,要涉及硬件部分和软件部分两方面,而本篇主要是介绍和硬件部分关系密切的VMCS和VMCB。
介绍完两种操作模式,下面我们就以英特尔平台为例来对新指令和虚拟机控制结构进行进一步介绍。
如果暂不考虑EPT(内存虚拟化)相关指令,英特尔为VMX和VMCS共引入了十条指令,并且分别有明确的分工和定义,下面先简单介绍一下引入指令。
图13 每个VMCS对应一个虚拟CPU(假设每个虚拟机只用一个虚拟CPU)
VMX ON和VMX
OFF是用来打开和关闭VMX操作模式的指令,在默认情况下,VMX是关闭的,当需要使用这个功能时,可以通过VMX
ON随时进行VMX模式。在进入VMX模式后,VMM又会通过VMLAUNCH或者VM
RESUME指令产生VMEntry,使CPU从根操作模式切换至非根操作模式,从而开始运行客户机相关软件。在运行软件的过程中如果发生中断或者异常,就会激活VM-Exit操作,此时CPU又进行了一次模式切换,只不过这次是切换到根操作模式,在处理完成后一般又会返回非根操作模式去运行客户机软件。如果不想运行虚拟机软件的时候,则会利用VMX
OFF关闭VMX操作模式。除此之外,还有一条VMCALL指令,因为这个指令涉及到大家不常用的SMM(系统管理模式)VM
Exit,所以这里就不多作介绍了。
而在VMCS方面,每个VMCS对应一个虚拟CPU(VCPU),在虚拟化软件的设置中,我们一般设置一个虚拟机对应一个虚拟CPU。
图14 VMCS的内部结构
而VMCS在使用时要与逻辑CPU绑定,一个逻辑CPU在任意的一个时间点都只能绑定一个VMCS,而VMCS在不同的时刻是可以和不同的逻辑CPU绑定的。VMCS用来绑定和解除绑定的命令分别是VMPTRLD和VMCLEAR,而用来对VMCS数据域进行读写的指令分别为VMREAD和VMWRITE。除此之外还有一条VMPTRST的指令,是指将当前的VMCS状态值存储到一个指定的内存空间。
最后我们来谈一谈VMCS结构,看一看这个4KB大小的内存空间里都有些什么。
在偏移0处是VMCS版本标识,偏移4处是VMX失败指示,这里将存放因VM-Exit执行不成功而产生的VMX失败原因,而我们下面要详细介绍的是在偏移8处的VMCS数据域。我们可以把这个数据域分成三部分:状态区域,控制区域和VM退出信息区域(见表1)。
&客户机状态域
&宿主机状态域
&VM执行控制域
&VM-Exit控制域
&VM-Entry控制域
&VM退出信息区域
&VM-Exit信息域
客户机状态域是用来保存非根模式VCPU运行状态的,当发生VM-Exit时,VCPU的当前运行状态将写入客户机状态域(并非全部,另有一部分为VMM控制的软件部分,下同),而当VM-Entry发生时,CPU会将客户机状态域中保存的状态加载到自己身上从而保证顺利地切换到非根操作模式。而宿主机状态域则用来保存在根操作模式下CPU的运行状态,它仅仅在发生VM-Exit时将状态值写入CPU中,而在VMEntry发生时不进行保存操作。
控制区域中VM-Entry控制域和VM-Exit控制域是对VM-Entry和VM-Exit操作的具体行为进行控制规定的地方,如VM-Entry控制域中的MSR加载、事件注入控制和VM-Exit控制域中的主机地址空间等,而VM执行控制域的作用是控制VM-Exit操作发生时的行为,比如某些敏感指令、异常和中断是否产生VM-Exit操作,也就是说只要是在这个控制域里列明的指令,都是可根据实际情况进行VM-Exit操作的开启和关闭操作的。当然没有写入控制域的一些指令也会产生VM-Exit操作,那些指令可以称之为无条件VM-Exit指令,凡是产生VM-Exit操作的指令都会由VMM来模拟完成。
VM-Exit信息域比较简单,存放的是VM-Exit产生的原因和具体的分类细化指标。
本期我们所讲的就是x86硬件CPU虚拟化中的基本概念和流程控制。简而言之,虚拟化环境无非就是VCPU的建立、运行、退出到再运行的这样一个循环的过程,而类似VMX
ON这些指令就像是在各个环节的节点进行盖章确认操作。VCPU的建立和退出主要和VMEntry和VM-Exit操作相对应,而VCPU的日常运行我们并不需要关心,相关的程序会进行合理调度,VCPU的再运行则会在操作方式和指令上有一些变化。
最后我们再综合回顾一下英特尔平台的CPU硬件虚拟化的基础过程。首先执行VMX
ON指令进行VMX根操作模式,然后初始化VCPU相关信息,VMCS也进行了相应域的初始化设定,通过VMLAUNCH或者VM
RESUME指令产生VM-Entry,进入这个状态后,处理器会作以下操作,首先执行基本检查确保VM-Entry可以开始;然后对宿主机状态域和客户机状态域进行有效性检查,并加载客户机状态域中的状态值;再根据VM-Entry控制域中的相关要求进行相关操作。如果一切正常就把执行环境切换到客户机上,如果失败则会在信息域上注明。进入客户机环境后,大部分的操作都可以自行完成而不用切换到根模式中来,这就是VCPU的运行过程。
如果在此过程中,客户机程序因为特权级不够,访问敏感资源或者产生中断就都需要VCPU进行退出处理,也就是要进行VM-Exit处理(这时又分成两种情况,有一部分产生VM-Exit的指令是可通过VM执行控制域进行开关控制的,而还有一部分指令是无论如何都会产生VM-Exit的,只要产生VM-Exit的,都需要进行先陷入后模拟的过程),这时CPU先记录退出原因到VMCS的信息域中,然后将当前VCPU的运行状态保存到客户机状态域中,其它相关信息如MSR类信息也可能按照设置写入相关区域。接下来根据VM-Exit控制域和宿主机状态域中的设置,将MSR相关设定和宿主机状态域中的内容加载到CPU相应寄存器中。至此,CPU又切换回了VMX根操作模式,下一步将转由VMM来处理VM-Exit了,处理完成后又是下一个VM-Entry,也即是VCPU的再运行,如果VCPU还在同一个CPU上运行的话(也即不需要VMCS针对不同的CPU进行解除再绑定的操作),就可以用执行效率更高的VMRESUME(相比VMLAUNCH)指令来实现VM-Entry,如此循环即是一个完整的虚拟化流程。当然,真正的x86
CPU硬件虚拟化设计远比今天描述的要复杂得多,感兴趣的读者可以进一步深入研究。(MC特约评论员
黄继承(中国人寿信息技术部专家))
CPU虚拟化其实远比文中描述的复杂,对于中断虚拟化,多处理器虚拟化等复杂技术点我们并没有深入探讨。尽管CPU已经全面支持x86硬件辅助CPU虚拟化,但大部分企业的刀片服务器和机架式服务器却在BIOS中默认屏蔽了虚拟化选项,而且很多企业信息技术人员并不知道去开启这项特性,在提交内部虚拟化解决方案时只知道针对虚拟机软件进行分析,甚至不少企业还在用着老版本的虚拟化软件,让人有一种用奔驰车拉土豆的感觉。未来希望企业用户能真正将硬件虚拟化应用起来,发挥其应有的威力。(来源:微型计算机2010.5上)
延伸阅读:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。计算机虚拟化技术_百度百科
声明:百科词条人人可编辑,词条创建和修改均免费,绝不存在官方及代理商付费代编,请勿上当受骗。
计算机虚拟化技术
虚拟化是一个的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU 并行,允许一个平台同时运行多个操作系统,并且应用都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
计算机虚拟化技术简介
与多任务以及是完全不同的。多任务是指在一个操作系统中多个同时并行运行,而在虚拟化技术中,则可以同时运行多个操作系统,而且每一个操作系统中都有多个程序运行,每一个操作系统都运行在一个虚拟的CPU或者是虚拟上;而超线程技术只是单CPU模拟双CPU来平衡程序运行,这两个模拟出来的CPU是不能分离的,只能。虚拟化技术也与如今VMware Workstation等同样能达到虚拟效果的软件不同,是一个巨大的技术进步,具体表现在减少软件相关开销和支持更广泛的操作系统方面。
纯软件虚拟化解决方案存在很多限制。“客户”操作系统很多情况下是通过VMM(Virtual Machine Monitor,虚拟机监视器)来与硬件进行通信,由VMM来决定其对系统上所有虚拟机的访问。(注意,大多数和内存访问独立于VMM,只在发生特定事件时才会涉及VMM,如错误。)在纯软件虚拟化解决方案中,VMM在软件套件中的位置是传统意义上操作系统所处的位置,而操作系统的位置是传统意义上应用所处的位置。这一额外的通信层需要进行转换,以通过提供到物理(如处理器、内存、存储、显卡和网卡等)的接口,模拟硬件环境。这种转换必然会增加系统的复杂性。此外,客户操作系统的支持受到的能力限制,这会阻碍特定技术的部署,如64位客户操作系统。在纯软件解决方案中,软件增加的复杂性意味着,这些环境难于管理,因而会加大确保系统可靠性和安全性的困难。
而CPU的是一种硬件方案,支持的CPU带有特别优化过的
计算机虚拟化技术
集来控制虚拟过程,通过这些指令集,VMM会很容易提高,相比软件的虚拟实现方式会很大程度上提高性能。可提供基于芯片的功能,借助兼容VMM软件能够改进纯软件解决方案。由于虚拟化硬件可提供全新的架构,支持操作系统直接在上面运行,从而无需进行,减少了相关的性能开销,极大简化了VMM设计,进而使VMM能够按通用标准进行编写,性能更加强大。另外,在纯软件VMM中,如今缺少对64位客户操作系统的支持,而随着64位的不断普及,这一严重缺点也日益突出。而CPU的虚拟化技术除支持广泛的传统操作系统之外,还支持64位客户操作系统。
虚拟化技术是一套解决方案。完整的情况需要CPU、、BIOS和软件的支持,例如VMM软件或者某些操作系统本身。即使只是CPU支持,在配合VMM的软件情况下,也会比完全不支持虚拟化技术的系统有更好的。
两大CPU巨头Intel和AMD都想方设法在虚拟化中占得先机,但是AMD的虚拟化技术在时间上要比Intel落后几个月。Intel自2005年末开始便在其产品线中推广应用Intel Virtualization Technology(Intel VT)虚拟化技术。如今,已经发布了具有Intel VT虚拟化技术的一系列处理器产品,包括桌面平台的Pentium 4 6X2系列、Pentium D 9X0系列和Pentium EE 9XX系列,还有Core Duo系列和Core Solo系列中的部分产品,以及服务器/平台上的Xeon LV系列、Xeon 5000系列、Xeon 5100系列、Xeon MP 7000系列以及Itanium 2 9000系列;同时绝大多数的Intel下一代主流处理器,包括核心,核心桌面处理器,核心服务器处理器,以及基于Montecito核心的Itanium 2高端服务器处理器都将支持Intel VT虚拟化技术。
而AMD方面也已经发布了支持Virtualization Technology(AMD VT)虚拟化技术的一系列产品,包括Socket S1接口的Turion 64 X2系列以及Socket AM2接口的Athlon 64 X2系列和Athlon 64 FX系列等等,并且绝大多数的AMD下一代主流处理器,包括即将发布的Socket F接口的都将支持AMD 。
计算机虚拟化技术计算机虚拟化的特点
Fidelity(保真性):应用系统程序在虚拟机上执行,除了时间因素外(会比物理硬件上执行慢一点),将表现为与在物理硬件上相同的执行行为。[1]
Performance(高性能):在虚拟环境中应用程序绝大多数指令在不受干预的情况下,直接在物理硬件上执行。[1]
Safety(安全性):物理硬件由虚拟机管理器全权管理,被虚拟出来的执行环境的程序(包括操作系统)不能直接访问物理硬件。[1]
计算机虚拟化技术四种虚拟化技术
()和分区(Partition)技术是紧密结合在一起,从60年代诞生起,虚拟化技术和分区技术就开始了发展,并且经历了从“硬件分区”-&“”-&“准虚拟机”-&“虚拟操作系统”的发展历程。最早的分区技术诞生自人们想提升大型利用率需求。比如在金融、科学等,大型通常价值数千万乃至上亿元,但是实际使用中多个却不能很好的其计算能力,常导致需要计算的部门无法获得计算能力,而不需要大量计算能力的部门占有了过多的。这个时候分区技术出现了,它可以将一台大型服务器分割成若干分区,分别提供给生产部门、测试部门、研发部门以及其他部门。[2]
计算机虚拟化技术硬件分区技术
硬件分区技术:硬件被划分成数个分区,每个分区享有独立的、内存,并安装独立的操作系统。在一台服务器上,存在有多个系统实例,同时启动了多个操作系统。这种分区方法的主要缺点是缺乏很好的灵活性,不能对资源做出有效调配。随着技术的进步,如今对于资源划分的已经远远提升,例如在IBM AIX系统上,对CPU资源的划分颗粒可以达到0.1个CPU。这种分区方式,在目前的融领域,比如在银行信息中心得到了广泛采用。
计算机虚拟化技术虚拟机技术
在技术(Virtual Machine Monitor)中,不再对底层的硬件进行划分,而是部署一个统一的Host系统。在Host系统上,加装了Virtual Machine Monitor,虚拟层作为应用级别的软件而存在,不涉及。虚拟层会给每个虚拟机模拟一套独立的硬件设备,包含CPU、内存、主板、显卡、网卡等硬件资源,在其上安装所谓的操作系统。最终用户的应用,运行在Guest操作系统中。这种虚拟机运行的方式有一定的优点,比如能在一个节点上安装多个不同类型的操作系统;但缺点也非常明显,虚拟硬件设备要消耗资源,大量代码需要被翻译执行,造成了的损耗,使其更合适用于实验室等特殊环境。其代表产品有旗下的系列、微软旗下的Virtual PC/Server系列等。[2]
计算机虚拟化技术准虚拟机技术
为了改善技术(Virtual Machine Monitor)的,一种新的准(Para-Virtualizion)技术诞生了。这种虚拟技术以为代表,其特点是修改操作系统的,加入一个Xen Hypervisor层。它允许安装在同一硬件设备上的多个系统可以同时启动,由Xen Hypervisor来进行调配。在这种下,依然需要模拟硬件设备,安装Guest操作系统,并且还需要修改操作系统的内核。Xen相对于传统的Virtual Machine Monitor,性能稍有提高,但并不十分显著。为了进一步提高性能,和AMD分别开发了
VT和Pacifica虚拟技术,将虚拟加入到了CPU中。使用了CPU支持的硬件虚拟技术,将不再需要修改操作系统,而是由CPU特有的进行相应的转换操作。[2]
计算机虚拟化技术
计算机虚拟化技术操作系统虚拟化技术
最新的已经发展到了操作系统虚拟化,以的/和Sun基于平台的Container技术为代表,其中Virtuozzo是商业解决方案,而OpenVZ是以Virtuozzo为基础的。他们的特点是一个单一的节点运行着唯一的操作系统实例,通过在这个系统上加装,可以将系统划分成多个独立隔离的容器,每个容器是一个虚拟的操作系统,被称为(即VE,Virtual Environment),也被称为(即,Virtual Private Server)。在操作系统虚拟化技术中,每个节点上只有唯一的系统,不虚拟任何硬件设备。此外,多个虚拟环境以模板的方式一个文件系统,得以大幅度提升。在生产环境中,一台服务器可根据环境需要,运行一个VE/VPS,或者运行上百个VE/VPS。所以,操作系统是面向生产环境、商业运行环境的技术。从最早的硬件分区到现阶段的和虚拟操作系统,虚拟化技术已经发展了好几代,不同的也带来了不同的优劣势。选择什么样的技术和产品,用户还是应该结合自身的预算和应用实践来决策。[2]
计算机虚拟化技术优势
所能提供的优势取决于客户的目标、所选择的特殊以及现有的IT基础架构。并非所有的客户都能够从实现某一特殊虚拟化解决方案中获得同样的利益。现在,即使是使用虚拟化进行简单的服务器整合,客户们也经常可以在某种程度上获得以下很多利益:更高的利用率——虚拟可支持实现物理资源和的动态,提高资源利用率,特别是针对那些平均需求远低于需要为其提供专用资源的不同负载。
计算机虚拟化技术降低管理成本
虚拟可通过以下途径提高工作人员的效率:减少必须进行管理的物理的数量;隐藏物理资源的部分复杂性;通过实现化、获得更好的信息和实现中央管理来简化任务;实现负载。另外,虚拟还可以支持在多个平台上使用公共的工具。
计算机虚拟化技术提高使用灵活性
通过虚拟可实现动态的部署和重,满足不断变化的业务需求。
计算机虚拟化技术提高安全性
虚拟可实现较简单的共享机制无法实现的隔离和划分,这些特性可实现对数据和服务进行可控和安全的访问。
计算机虚拟化技术更高的可用性
虚拟可在不影响用户的情况下对物理进行删除、
计算机虚拟化技术
升级或改变。
计算机虚拟化技术更高的可扩展性
根据不同的产品,分区和汇聚可支持实现比个体物理资源小得多或大得多的,这意味着您可以在不改变物理资源配置的情况下进行规模调整。
计算机虚拟化技术互操作性和投资保护
虚拟可提供底层物理资源无法提供的与各种接口和的兼容性。
计算机虚拟化技术改进资源供应
与个体物理单位相比,虚拟能够以更小的单位进行。与物理资源相比,虚拟资源因其不存在硬件和操作系统方面的问题而能够在出现后更快地恢复。
计算机虚拟化技术AMD虚拟化技术
简言之,AMD Virtualization技术是一项基于硬件的技术,该技术支持在一台基于的物理服务器上运行多个操作系统和应用,有助于服务器实现更高的效率和利用率。你无需再采用“一个操作系统、一个应用和一台”这种运行模式。AMD的技术使你能更好地利用自己的,你的服务器和将变得更加高效,的运转也更加有效。例如,当今的服务器在以不足15%的容量运行时,其能耗和散热仍保持在24×7的水平。AMD Virtualization技术具有快速虚拟化索引的功能,这就意味着AMD能够简化数据中心,实现更高的利用率。AMD的片内安全和虚拟技术代号分别称作Presidio和Pacifica,据其官员表示将出现在明年的处理器中。“每个人都预见到虚拟和安全技术能解决到数据中心的某些问题,”AMD的微处理器业务部总经理Marty Seyer说。
在安全方面,Presidio将利用到微软即将推出的中某些功能。但AMD更吸引人的一项举措是让其更“虚拟”——让芯片在一台的不同之间建起一道坚固的壁垒。另外,这样还能让Presidio阻止某些黑客攻击。这类攻击通常会强迫机器借某张CD或某个分区上的操作系统启动并使用特别工具读取机器内存中的内容。
AMD称Presidio会不断改进以包含其他保护技术,例如加固键鼠等输入设备与操作系统之间通讯通道等。由于这种保护技术需要操作系统的帮助,微软为此已经计划为添加多种类型的安全技术。AMD的官员还表示将在明年的中添加对信用平台模块(Trusted Platform Module) 1.2等Windows机器以外技术的支持。事实上,AMD正和开放信任运算机构合作开发平台上的可信赖运算标准,预计集成TPM的服务器将在2007年上市。至于用于减轻等部分工作负担的Pacifica技术,AMD称也会不断改善并最终包含输入/输出。AMD已经开始这项计划的研究工作,不过他们不愿透露相应产品何时上市。
AMD的Presidio和Pacifica技术和的虚拟技术及&LaGrande&安全技术十分相似。虽然Intel一直称到明年首季才会向系统厂商推广使用新的&resler&,但其实他们已经开始供货部分集成虚拟技术的奔腾四处理器,而安全功能也会在明年出现于中。比较值得我们关注的应该是Pacifica虚拟技术,这将可以大大提高台式处理器的运行能力。Pacifica技术最突出的地方在于对的改进方面 。
“Pacifica”通过Direct Connect Architecture(直接互连)和在和内存控制器中引入一个新模型和功能来提高CPU的。
与过去的方法来进行虚拟应用不同,这项新的技术能够减少的复杂性,提高的安全性,并通过兼容现有的虚拟系统管理软来减少花费在虚拟管理系统上的费用。例如,用户能在一部机器上轻易地创建多个独立且互相隔离的分区,从而减少了分区之间病毒传播的危险。不过,AMD在方面仍比慢了一步。AMD表示其IO虚拟化技术规范已经成型,且技术授权完全免费,并将鼓励软硬件厂商采纳该技术并集成进PC中。
目前AMD已经和、Xensource以及微软等公司结盟推广其虚拟化技术。AMD的虚拟化技术之前的开发代号为Pacifica,这种技术将在AMD今年的64位CPU核心逻辑以及两个层面得以实现。
计算机虚拟化技术英特尔虚拟化技术
在前不久的IDF春季论坛上,向人们展示了代号为“Vanderpool”的。这项技术将运用在Intel今年迟些时候推出的桌面CPU、64位ItaniumCPU以及明年推出Xeon和移动CPU上,届时Intel的CPU将拥有硬件层次的虚拟化技术。
提到虚拟化技术,大家并不陌生。这项技术在传统的和Unix系统上早已是很普及了,但因为桌面CPU大都使用的是X86架构,这决定了在其之上使用硬件级虚拟化技术的难度。Intel可谓创造先河,誓将该技术运用到桌面级产品上,用以提高CPU的和降低系统组建开销。这也在一定程度上符合Intel目前的策略,不再一味追求CPU的速度,而把焦点集中在CPU的效率上来。本文就将为读者详细介绍Vanderpool Technology技术(以下简称VT),它是什么、做些什么事、存在的问题及解决方法,还有在技术层面上它是如何运作的。
计算机虚拟化技术应用虚拟化平台
通过和信来发布系统,能够为用户带来更好的体验。不需要改变现在网络结构和修改任何应用程序,就能实现快速、灵活地部署,而且内置的安全、机制保证了企业不间断业务的进行,同时大大简化管理和维护工作量。
使用和信应用虚拟化有什么好处?
使用和信应用虚拟化能够做到:
- 软件应用的集中管理;
- 远程安全接入与应用;
- 应用加速;
- 企业应用平台从局域网向互联网迁移。
和信应用虚拟化客户端环境要求
操作系统:Windows XP、2003、、Win7 32位及64位系统
和信客户端无特殊要求,只要能顺利安装以上操作系统,均可无障碍使用和信应用虚拟化。
计算机虚拟化技术什么是虚拟化
虚拟化能使用户在一台服务器上同时运行多个操作系统,这与“多重任务处理”技术有些类似。不过“多重任务处理”技术只允许用户在同一机器设备的同一操作系统中运行多个,而虚拟化则可让用户在同一机器设备中运行多个操作系统。这样用户能更灵活高效地配用计算机,并且有助于提高安全。
想象一下,一个操作系统几乎不需花任何时间就可被启动,即使它崩溃了,你只需简单地将它剔除出去,同时立即装载一个新的。如果你正在同时运行几个操作系统,当你准备给其中一个载入新的映像时,你可马上将它关闭,并把该系统正在处理的工作分流给其他系统运行。如果你有5个RedHat的副本正在运行,而其中一个因满负荷而停止响应,没问题,你只需简单地将响应请求转交给其他4个系统处理,同时重启那个停止工作的系统就行了。
如果你已为你正在运行的操作系统存储了一份“”,那么每当有一些不愉快的事情发生时你都可重新启动它,例如被、感染病毒。从一个安全的分区载入映像并修复好它就行了。虚拟化还可让用户毫不费时地重新安装操作系统而不需像以往使用那样去安装。你可简单地就像使用普通那样去载入、卸载和存储操作系统。
同样,它也允许你在同一台机器上使用多个不同的操作系统。如果你是一名程序员,需要编写代码使它们在Windows 95/98/Me/2000/XP上都能运行,你可在你的办公桌上准备5台机器或是1台运行了5种虚拟化操作系统的电脑。同时,作为程序员的你需在每个浏览器的每个版本上校验这些代码,很明显微软不会让你在一个已拥有高版本IE的情况下去安装更低版本的IE去做这些事,但你可一个个地安装旧的操作系统或采取更好一些的解决方法——让它们同时运行。
计算机虚拟化技术现有虚拟化技术及缺陷
是不是一切都很简单和完美?然而在虚拟化世界并非一切都是尽善尽美的。最显而易见的就是那么多的副本操作系统(上面例子中的操作系统副本多吗?你可以想象一个网络公司,20个、50个都是有可能的)同时运行在一台计算机上需要占据很多的并导致更昂贵的服务器开销。数据传输在任何情况下都变得更难,因为越多东西被载入,需要的容量也就越多。
是的,真正的杀手就是。目前在计算机虚拟化方面有几项技术,但它们都伴有不同程度降低系统方面的问题。单就CPU而言,其占用率可以从10%到超过40%。
很显然,我们需要新的技术来解决这些问题。所要采用的背后的思想就是降低虚拟化时的系统开销。在我们深入了解它如何工作之前,我们有必要了解一下到底是如何实现不同的操作系统工作在同一CPU上的。
目前主要存在有3种类型的虚拟化技术:Paravirtualisation、二元码转译和模拟器。大家最为熟悉可能就是模拟器了。你可以让一个的模拟器在Windows XP的一个窗口中运行,同时还可有另一个PS模拟器。这些都可看作是虚拟化的最基本形式。模拟器需耗费巨大的CPU开销,如果你非要去模拟硬件装置的每一个Bit位,你将花费大量的时间和精力。比较好的方法是跳过其中的某些部分,我们使用的模拟器就是这样,它工作得也还过的去。
这个的另一端就是目前较流行的并被业界认可的“Paravirtualisation”(以下简称PV)技术。按字面意思理解,是编模拟的意思。它让知道它们正工作在一个虚拟化的环境中,通过修改它们以使之工作得更好。因此操作系统需针对这种方法进行修改和调整,它们必须来回于操作系统的编写人员和编写人员之间。从这个角度来看,它并非是完全的虚拟化,因为存在这种合作的关系。
PV技术在开源代码的操作系统中工作得不错,,、xBSD都是很合适的PV工作平台的候选者,你可在这些系统中任意调整所需调整的地方,使PV能工作得更好。而Windows则不行,这大概能解释最近为什么众多IT巨头吹捧开源了。
而“二元码转译”(以下简称BT)技术可说是较折衷的方法了。它所要做的取决于操作系统将要做些什么,并在不知不觉中改变它。假如操作系统试图去执行A,但该指令A会给虚拟化引擎带来某些问题,那么BT将把它转换成某些更合适的指令并伪造指令A应该返回的结果。这是一项欺骗工作,且占用大量CPU,另外用许多代码取代一条代码也不会使事情运作得快些。
当你了解这些后,你会感到头痛。纯粹致命的缺陷的确没有,但都没有一个简单的解决方案。这些虚拟化的技术仍在继续运用,只是人们都在尽量使其处在一个较低程度的缺陷范围内工作罢了。是什么造成这样的呢?
计算机虚拟化技术什么问题困扰着我们
对于X86系统架构的CPU而言,至少在32位,有太多让人头痛的条条框框,但作为一条总则,它们都包含有环转换器(Ring Transitions)和有关。从概念意义上说,环是一种划分系统特权级别的方法(因此“Ring”也称作特权环)。你可让操作系统运行在一个特权级别上而不会使之被更改。这样即使你的出了问题,它也不会导致,而操作系统能取得控制权,关闭出毛病的程序。这些环强行控制系统的不同部分。
Intel公司的系列CPU(包括8、、Pentium Pro、Pentium Ⅱ、Pentium Ⅲ以及现在的Pentium 4CPU),提供4个特权级别R0、R1、R2和R3。较大的数字表示较低的特权,我们可简单理解为运行在某一级别的程序无法改变运行在较小数字级别上的程序,但较低数字级别上的程序可干扰甚至控制运行在较高数字级别的程序。
在实际运用中,被经常用到的只有R0和R3,即最高级别和最低级别。操作系统运行在R0上,而用户程序运行在R3上。X86架构在向64位扩展时,采用的方法之一就是通过去掉中间的特权级别——R1和R2。几乎没有人注意到它们消失了,除了那些使用的特定人群。
像VMware这类软件模式的虚拟化机(Virtual Machines,以下简称VM)显然必须运行在R0级别上,但如它们要想保持完全控制权,就必须使操作系统在这个级别之外。最显而易见的解决办法是强迫运行在一个较低级别的环中,如R1。它们的部分代码原先被设定为从R0到R3,而不是R1到R3。虽然在PV环境中,你能修改操作系统从而使它工作得很好,但如果你要找到一个圆满的解决方法,就必须使操作系统工作在R1级别中。
可如此一来又出现问题了,有些只有当它们从R0级里发出或发往R0级时才会工作,如果不在正确的环中,这些指令会运作得很古怪。如果你试图这么去做,会有很不好的后果。让代码在正确的环中执行确实能防止操作系统破坏VM,同时也防止运行在上的软件破坏操作系统自身。这就是所谓的“0/1/3”模式。
还有一种模式被称为“0/3”模式。这种模式将VM放入R0级别中运行,而将操作系统和都放入R3级别中。但从本质上而言,它还是像“0/1/3”模式一样去处理其他事情。在R3级别里,有特权的操作系统能更轻松地执行用户程序,由于不存在环的阻隔,也使它运行的更快一些,但系统稳定性不佳。
另外一个方式去使用“0/3”模式,就是让CPU保有两份运行于R0级别中的事物的。一份为操作系统,另一份为运行在R3级别中的老。这样可拥有一份完整的保护集,用来把用户程序隔离到操作系统空间之外。当然,这同样需要消耗,只是以不同的方式罢了。
概括来说,在“0/1/3”模式中,系统安全性更高一些,但从R3到R1、R3到R0或R1到R0转换时性能会受到一些影响,反过来也是。在“0/3”模式中,只存在R0与R3之间的转换,所以它潜在的比一个非运行得更快一些。但如你碰到一个问题,“0/3”模式比“0/1/3”模式更容易出现蓝屏。尽管未来将广泛使用“0/3”模式,主要是因为上文我们提到向在64位扩展时已去掉了R1和R2,所以你必须被迫使用“0/3”模式。对计算机而言,这被称作是进步,同样,毁灭性的崩溃被认为是“古怪”行为。
理论上,如果你可忍受一点不稳定性,或者在“0/1/3”模式中牺牲一点速度,那么应该说的很完美的。可它们在某些方面确实还存在一些缺陷,主要存在以下4点。首先是那些检验自己所在环的指令,另外是那些处在错误的环中却没有正确保护CPU现场的指令。最后两点是截然相反的,就是那些应引发错误却没有导致错误的指令,以及那些本不该导致错误却引发许多错误的指令。所有这些都让编写VM的天才员们活得不轻松。
其中第一点是显而易见的。如果你给予操作系统R1级别的特权,当它检验自己运行所处的环时,它会返回1而不是0。如果此时运行于该系统的一段程序期望自己应该处在R0环时,那么它会因为得到的是R1而导致错误。这会导致蓝屏的出现,清除或另一些不理想的后果。二元码转译技术可捕捉到这种错误,并把返回值伪装成0,但这意味着需要几十上百条来完成这一工作,显然速度受到极大影响。
保护现场是一个潜在的更糟糕的问题,有些CPU里的东西在上下文开关程序中并不是很容易被保存的。那些隐藏的状态就是一个很好的例子。一旦它们被载入主存,其中一部分无法被保存,导致内存常驻部分和CPU中实际值间的不同而引起意外中断。当然我们可为它们设立工作区,但这样做极为复杂且需付出很高的代价使之表现得聪明一些。
那些本该引起某些问题却没有导致这些问题的指令也是摆在我们眼前的一道难题。如果你期望一条应在你后面的设计的中断陷阱中造成错误,但却没有,这一点也不会让人因为没有错误而高兴。与此相反的情况也极为常见,如果不在正确的环中向CR0和CR4写入,则会产生错误,导致系统崩溃。虽然这两种错误在你不注意时可被修正,但却造成很多损失。
整个所涉及到的就是要将操作系统放在一个它本不应该在的地方,不断地运转去尝试解决所有扑来的问题。存在许多问题,这些问题也不断的发生,所以性能损失也就没什么奇怪的了。
计算机虚拟化技术解决之道
的能解决这些困扰。VT的目的是在尽可能最小化员痛苦的同时尽可能多的增加“virtualization holes”(虚拟化孔)。这种解决方案中,VT-X针对X86而VT-i针对Itanium,分别引入了一种新的模式针对不同的CPU。这里我们主要来看看,实际上VT-i的功能与VT-X有很多相同的地方。
这种新的模式被称为VMX,并且引入了一个虚拟化机VMM运行于其中。它被设定在R0级别下,你可以认为是R-1级或者看成是在环的旁边运行。和所有的程序在VMX模式中运行,与此同时VMM运行在VMX根模式中。
任何一个运行在VMX模式下的操作系统,都拥有所有运行于非VT系统中的一般操作系统的功能和特性。它也处在R0级别中,与平常一样有权利处理每一件事情,而且并不知道有什么东西正在它的旁边运行。当情况得到授权,CPU进入VMX根模式,VMM就可以切换到其他一个运行在另一VMX实例的操作系统。这些切换被称做VM登录和VM退出。
所表现出来的不可思议的地方就在于它将从VMX模式到VMX根模式(或从VMX根模式到VMX模式)的登录和退出处理易于操作。一旦被涉及到,那它一定是独自处在自己的世界里的,你必须保存虚拟化世界的完整状态并当你返回时重新载入它。虽然在VT里还有很多事物要去处理,但它被设计为一项任务,所以客观地说它实际是一个简单而并不费力的进程。
因为每一个操作系统实例都在正确的位置运行,所以前面所提到的4个问题也就不存在了。相关联的工作区也不再需要,与此有关的没有了。这些能有效提高速度。但这些并非免费,只是付出的代价要少很多。
启动一个新的,你需为其留出一块4kB的存储区并将它传递给一个VMPTLRD。这块区域将用来存储该系统实例不被激活时的所有状态和重要Bit位。只要该操作系统实例存在,则这块区域一直有效,直到在其上运行一条VMCLEAR指令。这样就设立了一个虚拟化机实例。
如果你想要把控制权交给虚拟化机,你要么登录VMX非根模式或简单一点,运行VMX模式即可。这些提到的VM登录指令就是VMLAUNCH和VMRESUME,两者并没有太大的区别。VMRESUME指令只是简单地从刚开始已经初始化的4kB存储区里载入CPU状态,并把控制权交给主机操作系统。VMLAUNCH做的也是同样的工作,但它会启动一个虚拟化机控制构件VMCS,它包含一些设立VM的现场背后的记录,因为这需花费一些时间,所以人们尽量避免在并发登录时使用VMLAUNCH。
从这一点来看,开始了它的愉快之旅,尽可能地运转,毫无察觉是否有其他东西正在它的一旁运行。正如过去所计划的一样,它存在于自己的世界里,全速运行,或接近全速。唯一的问题是你如何打破这一切美好的景象而将它关闭到一边,以使得机器里的其他操作系统能真正运行。这就是所体现出来的复杂的一面——VMCS中一些特别的位映像。
这些位映像是一些32位的字段,每一个Bit位标志一个事件。如果某个事件被触发,则对应的Bit位被置位,CPU触发一条VM退出,并将控制权返还给运行在VMX根模式下的VMM。VMM可做任何想做的事,然后将VMRESUME指令传递给下一个操作系统,或刚离开的那个操作系统。这个被启动的操作系统同样很好地运行着,直到触发另一条VM退出指令。如此这样以每秒上千次的速度重复着。
什么能触发这些指令呢?它们可以是引脚信号、CPU、异常和这些平台事件,所有这些都会触发VM退出指令。的完美之处在于它有很强的适应性,另一个与此类似之处就是在中设置断点,你可在每个事件上都设置一个,或者一个也不设置,这都取决于你自己。
引脚信号事件要做的是当有一个或一个不可屏蔽中断发生时,则触发退出。而CPU事件,则是当你设置任意Bit位在某一字段,当相应的CPU状态接收到它时,则触发退出指令。虽然大多数指令需要去设置,但也有一些指令无条件地引发VM退出指令。这是在一个非常细小的层面上控制VM,允许每当你需要时登录和退出。
异常位映像也是一些32位的字段,每个Bit位标志每个32位指令地址的异常情况。如果Bit位被设定并有一个异常被抛出,它就会引发VM退出指令。如果Bit位是空的或没有异常,那么则继续它的快乐之旅,与平常一样。这是一种从VMX模式退出而进入VMX根模式的非常低的方法。
最后还有退出,它与异常退出十分相像,只不过它用两个32位字段来控制。这些字段内的Bit位对每一个可能出问题的页面进行映像,因此你可细心地从中挑选从哪里退出。同样,它也是基于很细小的层面,系统开销也很低。
在计算机里,VT工作在一个比传统的R0环更有特权的级别中。任何一个都可在没有改变的旧有架构下运行,并且不知道一个控制在控制它们。当遭遇到某些用户设置的触发器,控制权将被转交给运行在更高级别的VMX根模式上的VMM。因为这是一种被动触发事件,而不需被积极监视,因此降到了最低限。
使得安装和卸载那些比以往VM模式更稳定的运行环境变得简单。如果你需运行虚拟化系统,没有理由不用一个拥有Vanderpool功能的CPU去实现它,而软件虚拟化机会逐渐不被人关注。
这也许不错,但必须记得,这必须付出代价。每一次登录意味着建立4kB的,每一次退出要向这4kB存储区内写入数据。这看上去有些耗费过多,可与那些较老的方式比较,它的速度惊人地快。
计算机虚拟化技术总结
的给人们带来了惊喜,它让我们可在硬件级别上完成计算机的虚拟化工作。目前时机成熟了,Intel将首先在其桌面CPU中引入该技术,最新的Pentium 4 6系列CPU就支持VT,这让更多的用户都能涉足到新技术的应用,大大提高了用户使用CPU的效率,编写VMM不再那么困难了。
不过我们也要清醒地认识到,现有的不会马上消失,相反它们会变得更为普遍且系统开销问题也正得到改善,而大型服务器提供商们也不会在现有的技术上发生巨大的变化,毕竟目前还用得过去。加上AMD公司也发布了在其64位CPU上使用Pacifica虚拟化技术,因此VT想要取代现有的计算机虚拟化技术或得到人们的认同还需一段时间。可我们相信硬件级别的虚拟化技术毋庸置疑的是发展的方向,有着灿烂的前途。
.中国产业信息[引用日期]
.TechTarget虚拟化.[引用日期]
本词条内容贡献者为
副教授审核
重庆第二师范学院数学与信息工程系

我要回帖

更多关于 虚拟机监控程序未运行 的文章

 

随机推荐