作者:
IT168
评测中心 Lucifer 2007-08-25
【IT168
评测中心】当前非常热门的Virtualization
虚拟化技术的出现和应用其实已经有数十年的历史了,在早期,这个技术主要应用在服务器以及大型主机上面,现在,随着PC
性能的不断增长,Virtualization
也开始逐渐在x86
架构上流行起来。
虚拟化技术将各种资源虚拟出多台主机,以提高这些资源的共享率和利用率
虚拟化可以将IT
环境改造成为更加强大、更具弹性、更富有活力的架构。通过把多个操作系统整合到一台高性能服务器上,最大化利用硬件平台的所有资源,用更少的投入实现更多的应用,还可以简化IT
架构,降低管理资源的难度,避免IT
架构的非必要扩张。客户虚拟机的真正硬件无关性还可以实现虚拟机的运行时迁移,可以实现真正的不间断运行,从而最大化保持业务的持续性,而不用为购买超高可用性平台而付出高昂的代价。
和Sun
上的虚拟化技术(CPU
分区)比起来,x86
上的虚拟化要落后不少的,然而确实在不断进步着,在数年前,x86
上还没有什么硬件支持,甚至连指令集都不是为虚拟化而设计,这时主要靠完全的
软件
来实现虚拟化,当时的代表是VMware
的产品,以及尚未被Microsoft
收购Connectix
开发的Virtual PC
,在服务器市场上应用的主要是VMware
的产品,包括GSX Server
和稍后的ESX Server
,这些软件虚拟化产品在关键指令上都采用了二进制模拟/
翻译的方法,开销显得比较大,后期出现了Para-Virtualization
部分虚拟化技术,避免了一些二进制转换,性能得到了提升,不过仍然具有隔离性的问题。
今天,虚拟化技术的各方面都有了进步,虚拟化也从纯软件逐深入到处理器级虚拟化,再到平台级虚拟化乃至输入/
输出级虚拟化,代表性技术就是
Intel Virtualization Technology for Directed I/O
,简写为Intel VT-d
,在介绍这个Intel VT-d
之前,我们先来看看x86
硬件虚拟化的第一步:处理器辅助虚拟化技术,也就是Intel Virtualization Technology
,分为对应Itanium
平台的VT-i
和对应x86
平台的VT-x
两个版本。AMD
公司也有对应的技术AMD-V
,用于x86
平台。我们介绍的是x86
平台上的VT-x
技术,VT-i
技术原理上略为相近。
纯软件虚拟化主要的问题是性能和隔离性。Full Virtuali
z
ation
完全虚拟化技术可以提供较好的客户操作系统独立性,不过其性能不高,在不同的应用下,可以消耗掉主机10%~30%
的资源。而OS Virtualization
可以提供良好的性能,然而各个客户操作系统之间的独立性并不强。无论是何种软件方法,隔离性都是由Hypervisor
软件提供的,过多的隔离必然会导致性能的下降。
这些问题主要跟x86
设计时就没有考虑虚拟化有关。我们先来看看x86
处理器的Privilege
特权等级设计。
x86
架构为了保护指令的运行,提供了指令的4
个不同
Privilege
特权级别
,术语称为Ring
,从Ring 0
~Ring 3
。Ring 0
的优先级最高,Ring 3
最低。各个级别对可以运行的指令有所限制,例如,
GDT
,IDT
,LDT
,TSS
等这些指令就只能运行于Privilege 0
,也就是Ring 0
。
要注意Ring/Privilege
级别和我们通常认知的进程在操作系统中的优先级并不同。
操作系统必须要运行一些Privilege 0
的特权指令,因此Ring 0
是被用于运行操作系统内核,Ring 1
和Ring 2
是用于操作系统服务,Ring 3
则是用于应用程序。然而实际上并没有必要用完4
个不同的等级,一般的操作系统实现都仅仅使用了两个等级,即Ring 0
和Ring 3
,如图所示:
也就是说,在一个常规的x86
操作系统中,系统内核必须运行于Ring 0
,而VMM
软件以及其管理下的Guest OS
却不能运行于Ring 0
――因为那样就无法对所有虚拟机进行有效的管理,就像以往的协同式多任务操作系统(如,Windows 3.1
)无法保证系统的稳健运行一样。在没有处理器辅助的虚拟化情况下,挑战就是采用Ring 0
之外的等级来运行VMM (Virtual Machine Monitor
,虚拟机监视器)
或Hypervisor
,以及Guest OS
。
现在流行的解决方法是
Ring Deprivileging
(暂时译为特权等级下降)
,并具有两种选择:客户OS
运行于Privilege 1
(0/1/3
模型),或者Privilege 3
(0/3/3
模型)。
无论是哪一种模型,客户OS
都无法运行于Privilege 0
,这样,如GDT
,IDT
,LDT
,TSS
这些特权指令就必须通过模拟的方式来运行,这会带来很明显的性能问题。特别是在负荷沉重、这些指令被大量执行的时候。
同时,这些特权指令是真正的“特权”,隔离不当可以严重威胁到其他客户OS
,甚至主机OS
。Ring Deprivileging
技术使用IA32
架构的Segment Limit
(限制分段)和Paging
(分页)来隔离VMM
和Guest OS
,不幸的是
EM64T
的64bit
模式并不支持Segment Limit
模式
,要想运行64bit
操作系统,就必须使用Paging
模式。
对于虚拟化而言,使用Paging
模式的一个致命之处是它不区分Privileg 0/1/2
模式,因此客户机运行于Privileg 3
就成为了必然(0/3/3
模型),这样Paging
模式才可以将主机OS
和客户OS
隔离开来,然而在同一个Privileg
模式下的不同应用程序(如,不同的虚拟机)是无法受到Privileg
机构保护的,这就是目前IA32
带来的隔离性问题,这个问题被称为
Ring Compression
。
IA32
不支持VT
,就无法虚拟64-bit
客户操作系统
这个问题的实际表现是:VMware
在不支持
Intel VT
的IA32
架构CPU
上无法虚拟64-bit
客户操作系统,因为无法在客户OS
之间安全地隔离。
作为一个芯片辅助(Chip-Assisted
)的虚拟化技术,VT
可以同时提升虚拟化效率和虚拟机的
安全
性,下面我们就来看看Intel VT
带来了什么架构上的变迁。我们谈论的主要是IA32
上的VT
技术,一般称之为VT-x
,而在Itanium
平台上的VT
技术,被称之为VT-i
。
VT-x
将IA32
的CU
操作扩展为两个forms
(窗体):
VMX root operation
(根虚拟化操作)和VMX non-root operation
(非根虚拟化操作),VMX root operation
设计来供给VMM/Hypervisor
使用,其行为跟传统的IA32
并无特别不同,而VMX non-root operation
则是另一个处在VMM
控制之下的IA32
环境。所有的
forms
都能支持所有的四个
Privileges levels
,这样在
VMX non-root operation
环境下运行的虚拟机就能完全地利用
Privilege 0
等级。
两个世界:VMX non-root
和VMX root
和一些文章认为的很不相同,
VT
同时为
VMM
和
Guest OS
提供了所有的
Privilege
运行等级,而不是只让它们分别占据一个等级:因为
VMM
和
Guest OS
运行于不同的两个
forms
。
由此,
GDT
、
IDT
、
LDT
、
TSS
等这些指令就能正常地运行于虚拟机内部了,而在以往,这些特权指令需要模拟运行。而
VMM
也能从模拟运行特权指令当中解放出来,这样既能解决
Ring Aliasing
问题(软件运行的实际
Ring
与设计运行的
Ring
不相同带来的问题),又能解决
Ring Compression
问题,从而大大地提升运行效率。
Ring Compression
问题的解决,也就解决了
64bit
客户操作系统的运行问题。
为了建立这种两个虚拟化窗体的架构,VT-x
设计了一个Virtual-Machine Control Structure
(VMCS
,虚拟机控制结构)的数据结构,包括了Guest-State Area
(客户状态区)和H
ost-State Area
(主机状态区),用来保存虚拟机以及主机的各种状态参数,并提供了VM entry
和VM exit
两种操作在虚拟机与VMM
之间切换,用户可以通过在VMCS
的
VM-execution control fields
里面指定在执行何种指令/
发生何种事件的时候,VMX non-root operation
环境下的虚拟机就执行VM exit
,从而让VMM
获得控制权,因此VT-x
解决了虚拟机的隔离问题,又解决了性能问题。
作为一个芯片辅助(Chip-Assisted
)的虚拟化技术,VT
可以同时提升虚拟化效率和虚拟机的安全性,下面我们就来看看Intel VT
带来了什么架构上的变迁。我们谈论的主要是IA32
上的VT
技术,一般称之为VT-x
,而在Itanium
平台上的VT
技术,被称之为VT-i
。
VT-x
将IA32
的CU
操作扩展为两个forms
(窗体):
VMX root operation
(根虚拟化操作)和VMX non-root operation
(非根虚拟化操作),VMX root operation
设计来供给VMM/Hypervisor
使用,其行为跟传统的IA32
并无特别不同,而VMX non-root operation
则是另一个处在VMM
控制之下的IA32
环境。所有的
forms
都能支持所有的四个
Privileges levels
,这样在
VMX non-root operation
环境下运行的虚拟机就能完全地利用
Privilege 0
等级。
两个世界:VMX non-root
和VMX root
和一些文章认为的很不相同,
VT
同时为
VMM
和
Guest OS
提供了所有的
Privilege
运行等级,而不是只让它们分别占据一个等级:因为
VMM
和
Guest OS
运行于不同的两个
forms
。
由此,
GDT
、
IDT
、
LDT
、
TSS
等这些指令就能正常地运行于虚拟机内部了,而在以往,这些特权指令需要模拟运行。而
VMM
也能从模拟运行特权指令当中解放出来,这样既能解决
Ring Aliasing
问题(软件运行的实际
Ring
与设计运行的
Ring
不相同带来的问题),又能解决
Ring Compression
问题,从而大大地提升运行效率。
Ring Compression
问题的解决,也就解决了
64bit
客户操作系统的运行问题。
为了建立这种两个虚拟化窗体的架构,VT-x
设计了一个Virtual-Machine Control Structure
(VMCS
,虚拟机控制结构)的数据结构,包括了Guest-State Area
(客户状态区)和H
ost -State Area
(主机状态区),用来保存虚拟机以及主机的各种状态参数,并提供了VM entry
和VM exit
两种操作在虚拟机与VMM
之间切换,用户可以通过在VMCS
的
VM-execution control fields
里面指定在执行何种指令/
发生何种事件的时候,VMX non-root operation
环境下的虚拟机就执行VM exit
,从而让VMM
获得控制权,因此VT-x
解决了虚拟机的隔离问题,又解决了性能问题。
I/O
虚拟化的关键在于解决I/O
设备与虚拟机数据交换的问题,而这部分主要相关的是DMA
直接
内存
存取,以及IRQ
中断请求,只要解决好这两个方面的隔离、保护以及性能问题,就是成功的I/O
虚拟化。
和处理器上的Intel VT-i
和VT-x
一样,Intel VT-d
技术是一种基于North Bridge
北桥芯片(或者按照较新的说法:MCH
)的硬件辅助虚拟化技术,通过在北桥中内置提供DMA
虚拟化和IRQ
虚拟化硬件,实现了新型的I/O
虚拟化方式,Intel VT-d
能够在虚拟环境中大大地提升 I/O
的可靠性、灵活性与性能。
传统的IOMMUs
(I/O memory management units
,I/O
内存管理单元)提供了一种集中的方式管理所有的DMA
――除了传统的内部DMA
,还包括如AGP GART
、TPT
、RDMA over TCP/IP
等这些特别的DMA
,它通过在内存地址范围来区别设备,因此容易实现,却不容易实现DMA
隔离,因此VT-d
通过更新设计的IOMMU
架构,实现了多个DMA
保护区域的存在,最终实现了DMA
虚拟化。这个技术也叫做DMA Remapping
。
I/O
设备会产生非常多的中断请求,I/O
虚拟化必须正确地分离这些请求,并路由到不同的虚拟机上。传统设备的中断请求可以具有两种方式:一种将通过I/O
中断控制器路由,一种是通过DMA
写请求直接发送出去的MSI
(message signaled interrupts
,消息中断),由于需要在DMA
请求内嵌入目标内存地址,因此这个架构须要完全访问所有的内存地址,并不能实现中断隔离。
VT-d
实现的中断重映射(interrupt-remapping
)架构通过重新定义MSI
的格式来解决这个问题,新的MSI
仍然是一个DMA
写请求的形式,不过并不嵌入目标内存地址,取而代之的是一个消息ID
,通过维护一个表结构,硬件可以通过不同的消息ID
辨认不同的虚拟机区域。VT-d
实现的中断重映射可以支持所有的I/O
源,包括IOAPICs
,以及所有的中断类型,如通常的MSI
以及扩展的MSI-X
。
VT-d
进行的改动还有很多,如硬件缓冲、地址翻译等,通过这些种种措施,VT-d
实现了北桥芯片级别的I/O
设备虚拟化。VT-d
最终体现到虚拟化模型上的就是新增加了两种设备虚拟化方式:
左边是传统的I/O
模拟虚拟化,右边是直接I/O
设备分配
直接I/O
设备分配
:虚拟机直接分配物理I/O
设备给虚拟机,这个模型下,虚拟机内部的
驱动
程序直接和硬件设备直接
通信
,只需要经过少量,或者不经过VMM
的管理。为了系统的健壮性,需要硬件的虚拟化支持,以隔离和保护硬件资源只给指定的虚拟机使用,硬件同时还需要具备多个I/O
容器分区来同时为多个虚拟机服务,这个模型几乎完全消除了在VMM
中运行驱动程序的需求。例如CPU
,虽然CPU
不算是通常意义的I/O
设备――不过它确实就是通过这种方式分配给虚拟机,当然CPU
的资源还处在VMM
的管理之下。
I/O
设备共享
:这个模型是I/O
分配模型的一个扩展,对硬件具有很高的要求,需要设备支持多个功能接口,每个接口可以单独分配给一个虚拟机,这个模型无疑可以提供非常高的虚拟化性能表现。
运用VT-d
技术,虚拟机得以使用直接I/O
设备分配方式或者I/O
设备共享方式来代替传统的设备模拟/
额外设备接口方式,从而大大提升了虚拟化的I/O
性能。
主流双路Xeon Stoakley
平台将支持Intel VT-d
技术
高端四路Caneland
平台也会支持VT-d
功能
根据资料表明,不日发布的Stoakley
平台和Caneland
平台上将包含VT-d
功能,Stoakley
平台是现在的Bensley
的下一代产品,用于双路Xeon
处理器,而Caneland
则是Truland
的继任者,用于四路Xeon
处理器,这些芯片组都能支持最新的45nm Penryn
处理器。
从Intel
虚拟化技术发展路线图来看,虚拟化无疑是从处理器逐渐扩展到其他设备的,从VT-i/VT-x
到VT-d
就非常体现了这个过程,对于关注I/O
性能的企业级应用而言,完成了处理器的虚拟化和I/O
的虚拟化,整个平台的虚拟化就接近完成了,因此在未来,Intel
将会持续地开发VT-d
技术,将各种I/O
设备中加入虚拟化特性,从而提供一个强大的虚拟化基础架构。
原文地址: [url]http://publish.it168.com/2007/0824/20070824033101.shtml[/url]