从VT-x到VT-d Intel虚拟化技术发展蓝图

作者: 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]

你可能感兴趣的:(vmware,虚拟机,虚拟化,Intel,VT-X)