请输入您要查询的百科知识:

 

词条 虚拟化技术
释义

§ 概述

虚拟化技术

虚拟化技术与多任务以及超线程技术是完全不同的。多任务是指在一个操作系统中多个程序同时并行运行,而在虚拟化技术中,则可以同时运行多个操作系统,而且每一个操作系统中都有多个程序运行,每一个操作系统都运行在一个虚拟的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已经发布了具有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下一代主流处理器,包括Merom核心移动处理器,Conroe核心桌面处理器,Woodcrest核心服务器处理器,以及基于Montecito核心的Itanium 2高端服务器处理器都将支持Intel VT虚拟化技术。

而AMD方面也已经发布了支持AMD Virtualization Technology(AMD VT)虚拟化技术的一系列处理器产品,包括Socket S1接口的Turion 64 X2系列以及Socket AM2接口的Athlon 64 X2系列和Athlon 64 FX系列等等,并且绝大多数的AMD下一代主流处理器,包括即将发布的Socket F接口的Opteron都将支持AMD VT虚拟化技术。

§ 历史

虚拟化技术

虚拟化(Virtualization)技术最早出现在 20 世纪 60 年代的 IBM 大型机系统,在70年代的 System 370 系列中逐渐流行起来,这些机器通过一种叫虚拟机监控器(Virtual Machine Monitor,VMM)的程序在物理硬件之上生成许多可以运行独立操作系统软件的虚拟机(Virtual Machine)实例。随着近年多核系统、集群、网格甚至云计算的广泛部署,虚拟化技术在商业应用上的优势日益体现,不仅降低了 IT 成本,而且还增强了系统安全性和可靠性,虚拟化的概念也逐渐深入到人们日常的工作与生活中。

虚拟化是一个广义的术语,对于不同的人来说可能意味着不同的东西,这要取决他们所处的环境。在计算机科学领域中,虚拟化代表着对计算资源的抽象,而不仅仅局限于虚拟机的概念。例如对物理内存的抽象,产生了虚拟内存技术,使得应用程序认为其自身拥有连续可用的地址空间(Address Space),而实际上,应用程序的代码和数据可能是被分隔成多个碎片页或段),甚至被交换到磁盘、闪存等外部存储器上,即使物理内存不足,应用程序也能顺利执行。[1]

§ 分类

虚拟化技术主要分为以下几个大类 :

虚拟化技术

1.平台虚拟化(Platform Virtualization),针对计算机和操作系统的虚拟化。

2.资源虚拟化(Resource Virtualization),针对特定的系统资源的虚拟化,比如内存、存储、网络资源等。

3.应用程序虚拟化(Application Virtualization),包括仿真、模拟、解释技术等。

我们通常所说的虚拟化主要是指平台虚拟化技术,通过使用控制程序(Control Program,也被称为 Virtual Machine Monitor 或 Hypervisor),隐藏特定计算平台的实际物理特性,为用户提供抽象的、统一的、模拟的计算环境(称为虚拟机)。虚拟机中运行的操作系统被称为客户机操作系统(Guest OS),运行虚拟机监控器的操作系统被称为主机操作系统(Host OS),当然某些虚拟机监控器可以脱离操作系统直接运行在硬件之上(如 VMWARE 的 ESX 产品)。运行虚拟机的真实系统我们称之为主机系统。

平台虚拟化技术又可以细分为如下几个子类:

1.全虚拟化(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。

2.超虚拟化(Paravirtualization)

这是一种修改 Guest OS 部分访问特权状态的代码以便直接与 VMM 交互的技术。在超虚拟化虚拟机中,部分硬件接口以软件的形式提供给客户机操作系统,这可以通过 Hypercall(VMM 提供给 Guest OS 的直接调用,与系统调用类似)的方式来提供。例如,Guest OS 把切换页表的代码修改为调用 Hypercall 来直接完成修改影子 CR3 寄存器和翻译地址的工作。由于不需要产生额外的异常和模拟部分硬件执行流程,超虚拟化可以大幅度提高性能,比较著名的 VMM 有 Denali、Xen。

3.硬件辅助虚拟化(Hardware-Assisted Virtualization)

硬件辅助虚拟化是指借助硬件(主要是主机处理器)的支持来实现高效的全虚拟化。例如有了 Intel-VT 技术的支持,Guest OS 和 VMM 的执行环境自动地完全隔离开来,Guest OS 有自己的“全套寄存器”,可以直接运行在最高级别。因此在上面的例子中,Guest OS 能够执行修改页表的汇编指令。Intel-VT 和 AMD-V 是目前 x86 体系结构上可用的两种硬件辅助虚拟化技术。

4.部分虚拟化(Partial Virtualization)

VMM 只模拟部分底层硬件,因此客户机操作系统不做修改是无法在虚拟机中运行的,其它程序可能也需要进行修改。在历史上,部分虚拟化是通往全虚拟化道路上的重要里程碑,最早出现在第一代的分时系统 CTSS 和 IBM M44/44X 实验性的分页系统中。

5.操作系统级虚拟化(Operating System Level Virtualization)

在传统操作系统中,所有用户的进程本质上是在同一个操作系统的实例中运行,因此内核或应用程序的缺陷可能影响到其它进程。操作系统级虚拟化是一种在服务器操作系统中使用的轻量级的虚拟化技术,内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程,不同实例中的进程完全不了解对方的存在。比较著名的有 Solaris Container [2],FreeBSD Jail 和 OpenVZ 等。

这种分类并不是绝对的,一个优秀的虚拟化软件往往融合了多项技术。例如 VMware Workstation 是一个著名的全虚拟化的 VMM,但是它使用了一种被称为动态二进制翻译的技术把对特权状态的访问转换成对影子状态的操作,从而避免了低效的 Trap-And-Emulate 的处理方式,这与超虚拟化相似,只不过超虚拟化是静态地修改程序代码。对于超虚拟化而言,如果能利用硬件特性,那么虚拟机的管理将会大大简化,同时还能保持较高的性能。[2]

§ 原理及挑战

纯软件虚拟化技术的原理及面临的挑战,虚拟机监控器应当具备的条件

1974 年,Popek 和 Goldberg 在《Formal Requirements for Virtualizable Third Generation Architectures》 论文中提出了一组称为虚拟化准则的充分条件,满足这些条件的控制程序可以被称为虚拟机监控器(Virtual Machine Monitor,简称 VMM):

1.资源控制。控制程序必须能够管理所有的系统资源。

2.等价性。在控制程序管理下运行的程序(包括操作系统),除时序和资源可用性之外的行为应该与没有控制程序时的完全一致,且预先编写的特权指令可以自由地执行。

3.效率性。绝大多数的客户机指令应该由主机硬件直接执行而无需控制程序的参与。

尽管基于简化的假设,但上述条件仍为评判一个计算机体系结构是否能够有效支持虚拟化提供了一个便利方法,也为设计可虚拟化计算机架构给出了指导原则。

原理简介

我们知道,传统的 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 的时候,需要解决如下挑战 :

1.确保 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 不使用)。

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 进程的主动攻击或无意破坏。

3.特权级别名(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”。

4.地址空间压缩(Address Space Compression)。

地址空间压缩是指 VMM 必须在Guest OS 的地址空间中保留一部分供其使用。例如,中断描述表寄存器(IDT Register)中存放的是中断描述表的线性地址,如果 Guest OS 运行过程中来了外部中断或触发处理器异常,必须保证运行权马上转移到 VMM 中,因此 VMM 需要将 Guest OS 的一部分线性地址空间映射成自己的中断描述表的主机物理地址。VMM 可以完全运行在 Guest OS 的地址空间中,也可以拥有独立的地址空间,后者的话,VMM 只占用 Guest OS 很少的地址空间,用于存放中断描述表和全局描述符表(GDT)等重要的特权状态。无论如何哪种情况,VMM 应该防止 Guest OS 直接读取和修改这部分地址空间。

5.处理 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 自己处理该异常。

6.处理 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 条指令的话,整体性能将会受到极大损害。

7.转发虚拟的中断和异常。

所有的外部中断和主机处理器的异常直接由VMM 接管,VMM 构造必需的虚拟中断和异常,然后转发给 Guest OS。VMM 需要模拟硬件和操作系统对中断和异常的完整处理流程,例如 VMM 先要在 Guest OS 当前的内核栈上压入一些信息,然后找到 Guest OS 相应处理例程的地址,并跳转过去。VMM 必须对不同的 Guest OS 的内部工作流程比较清楚,这增加了 VMM 的实现难度。同时,Guest OS 可能频繁地屏蔽中断和启用中断,这两个操作访问特权寄存器 EFLAGS,必须由 VMM 模拟完成,性能因此会受到损害。 Guest OS 重新启用中断时,VMM 需要及时地获知这一情况,并将积累的虚拟中断转发。

8.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虚拟化技术

虚拟化技术

当前非常热门的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 Virtualization完全虚拟化技术可以提供较好的客户操作系统独立性,不过其性能不高,在不同的应用下,可以消耗掉主机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(客户状态区)和Host-State Area(主机状态区),用来保存虚拟机以及主机的各种状态参数,并提供了VM entry和VM exit两种操作在虚拟机与VMM之间切换,用户可以通过在VMCS的VM-execution control fields里面指定在执行何种指令/发生何种事件的时候,VMX non-root operation环境下的虚拟机就执行VM exit,从而让VMM获得控制权,因此VT-x解决了虚拟机的隔离问题,又解决了性能问题。

可以看到,Inter VT的出现,可以解决了重要的虚拟处理器架构问题,让纯软件虚拟化解决方案的性能问题得以大大缓解。然而要做的事情还有很多。

对于服务器而言,很重要的一个组成部分就I/O,CPU的计算能力提升虽然可以更快地处理数据,但是前提是数据能够顺畅的到达CPU,因此,无论是存储,还是网络,以及图形卡、内存等,I/O能力都是企业级架构的一个重要部分。为此,人们不但在传输带宽上投资(比如从百兆以太网到千兆以太网再到万兆以太网),还在各种系统和架构上进行了大量的投入(比如吞吐量更高的RAID系列、多层数据中心)。

在虚拟化技术中,随着整体处理器资源的利用效率的提升,对数据I/O也提出了更高的要求。

VMM虚拟机管理器必须提供I/O虚拟化来支持处理来自多个客户机的I/O请求,当前的虚拟化技术采用下列的方式来处理I/O虚拟化。

模拟I/O设备:VMM对客户机摸拟一个I/O设备,通过完全模拟设备的功能,客户机可以使用对应真实的驱动程序,这个方式可以提供完美的兼容性(而不管这个设备事实上存不存在),但是显然这种模拟会影响到性能。作为例子,各种虚拟机在使用软盘映像提供虚拟软驱的时候,就运行在这样的方式,以及Virtual PC的模拟的真实的S3 Virge 3D显卡,VMware系列模拟的Sound Blaster 16声卡,都属于这种方式。

虚拟化技术

额外软件界面:这个模型比较像I/O模拟模型,VMM软件将提供一系列直通的设备接口给虚拟机,从而提升了虚拟化效率,这有点像Windows操作系统的DirectX技术,从而提供比I/O模拟模型更好的性能,当然兼容性有所降低,例如VMware模拟的VMware显卡就能提供不错的显示速度,不过不能完全支持DirectDraw技术,Direct3D技术就更不用想了。相似的还有VMware模拟的千兆网卡,等等,这些品牌完全虚拟的设备(例如,VMware牌显卡,VMware牌网卡)需要使用特制的驱动程序部分直接地和主机、硬件通信,比起以前完全模拟的通过虚拟机内的驱动程序访问虚拟机的十兆百兆网卡,可以提供更高的吞吐量。

现在的I/O设备虚拟化主要是采用模拟方式或者软件接口方式,因此性能上很容易成为瓶颈——毕竟传统的机器上,I/O设备都很容易成为瓶颈,因此Intel就适时提出了Intel Virtualization Technology for Directed I/O,简称为Intel VT-d。

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性能。

根据资料表明,不日发布的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设备中加入虚拟化特性,从而提供一个强大的虚拟化基础架构。

§ AMD虚拟化技术

虚拟化技术简言之,AMD Virtualization技术是一项基于硬件的技术,该技术支持虚拟软件在一台基于AMD皓龙处理器的物理服务器上运行多个操作系统和应用,有助于服务器实现更高的效率和利用率。你无需再采用“一个操作系统、一个应用和一台服务器”这种运行模式。AMD的Virtualization技术使你能更好地利用自己的资源,你的服务器和工作站将变得更加高效,数据中心的运转也更加有效。

例如,当今的服务器在以不足15%的容量运行时,其能耗和散热仍保持在24×7的水平。AMD Virtualization技术具有快速虚拟化索引的功能,这就意味着AMD四核皓龙处理器能够简化数据中心,实现更高的利用率。

AMD的片内安全和虚拟技术代号分别称作Presidio和Pacifica,据其官员表示将出现在明年的Opteron处理器中。“每个人都预见到虚拟和安全技术能解决到数据中心的某些问题,”AMD的微处理器业务部总经理Marty Seyer说。

在安全方面,Presidio将利用到微软即将推出的Windows Vista中某些功能。但AMD更吸引人的一项举措是让其内存控制器更“虚拟智能化”——让芯片在一台虚拟机的不同虚拟地址之间建起一道坚固的壁垒。另外,这样还能让Presidio阻止某些黑客攻击。这类攻击通常会强迫机器借某张CD或某个分区上的操作系统启动并使用特别工具读取机器内存中的内容。

AMD称Presidio会不断改进以包含其他保护技术,例如加固键鼠等输入设备与操作系统之间通讯通道等。由于这种保护技术需要操作系统的帮助,微软为此已经计划为Vista添加多种类型的安全技术。

AMD的官员还表示将在明年的处理器中添加对信用平台模块(Trusted Platform Module) 1.2等Windows机器以外技术的支持。事实上,AMD正和开放信任运算机构合作开发Linux平台上的可信赖运算标准,预计集成TPM的服务器将在2007年上市。

至于用于减轻VMware等虚拟软件部分工作负担的Pacifica技术,AMD称也会不断改善并最终包含输入/输出虚拟技术。AMD已经开始这项Xen计划的研究工作,不过他们不愿透露相应产品何时上市。

AMD的Presidio和Pacifica技术和Intel的虚拟技术及"LaGrande"安全技术十分相似。虽然Intel一直称到明年首季才会向系统厂商推广使用新的双核奔腾D处理器"resler",但其实他们已经开始供货部分集成虚拟技术的奔腾四处理器,而LaGrande安全功能也会在明年出现于Intel处理器中。

比较值得我们关注的应该是Pacifica虚拟技术,这将可以大大提高台式处理器的运行能力。Pacifica技术最突出的地方在于对内存控制器的改进方面。“Pacifica”通过Direct Connect Architecture(直接互连架构)和在处理器和内存控制器中引入一个新模型和功能来提高CPU的虚拟应用。

与过去的方法来进行虚拟应用不同,这项新的技术能够减少程序的复杂性,提高虚拟系统的安全性,并通过兼容现有的虚拟系统管理软件来减少花费在虚拟管理系统上的费用。例如,用户能在一部机器上轻易地创建多个独立且互相隔离的分区,从而减少了分区之间病毒传播的危险。不过,AMD在虚拟化技术方面仍比Intel慢了一步。

AMD表示其IO虚拟化技术规范已经成型,且技术授权完全免费,并将鼓励软硬件厂商采纳该技术并集成进PC中。AMD AM2处理器

目前AMD已经和VMware、Xensource以及微软等公司结盟推广其虚拟化技术。AMD的虚拟化技术之前的开发代号为Pacifica,这种技术将在AMD今年的64位CPU核心逻辑以及芯片组两个层面得以实现。

项目 数据

中央处理器(CPU)

CPU 类型 DualCore AMD Athlon 64 X2 Black Edition, 2600 MHz (13 x 200) 5000+

CPU 别名 Brisbane

CPU 步进 BH-G2

指令集 x86, x86-64, MMX, 3DNow!, SSE, SSE2, SSE3

原始时钟频率 2600 MHz

CPU 最低/最高倍频 4x / 25x

Engineering Sample 否

L1 代码缓存 64 KB per core (Parity)

L1 数据缓存 64 KB per core (ECC)

L2 缓存 512 KB per core (On-Die, ECC, Full-Speed)

Multi CPU

主板 ID OEM00000 PROD00000000

CPU #1 AMD Athlon(tm) 64 X2 Dual Core Processor 5000+, 2812 MHz

CPU #2 AMD Athlon(tm) 64 X2 Dual Core Processor 5000+, 2812 MHz

CPU 物理信息

封装类型 940 Pin uOPGA

封装大小 4.00 cm x 4.00 cm

晶体管数量 154 百万

工艺技术 10Mi, 65 nm, CMOS, Cu, DSL SOI

核心芯片大小 126 mm2

核心工作电压 1.100 - 1.375 V

输入/输出接口电压 1.2 V + 2.5 V

最大功耗 65 - 76 W (取决于时钟频率)

CPU 制造商

公司名称 Advanced Micro Devices, Inc.

CPU 使用率

CPU 1/核心 1 1 %

CPU 1/核心 2 0 %

倍频在CPU-Z里和优化大师里测出都为13,我在BIOS里设置的是14怎么不对啊

我的电脑右击属性里主频显示的也是2.81G

还有就是外频和倍频设多少合适

主板名称 Biostar TF570 SLI A2+

电脑的超频就是通过人为的方式将CPU、显卡等硬件的工作频率提高,让它们在高于其额定的频率状态下稳定工作。以Intel P4C 2.4GHz的CPU为例,它的额定工作频率是2.4GHz,如果将工作频率提高到2.6GHz,系统仍然可以稳定运行,那这次超频就成功了。

CPU超频的主要目的是为了提高CPU的工作频率,也就是CPU的主频。而CPU的主频又是外频和倍频的乘积。例如一块CPU的外频为100MHz,倍频为8.5,可以计算得到它的主频=外频×倍频=100MHz×8.5 = 850MHz。

提升CPU的主频可以通过改变CPU的倍频或者外频来实现。但如果使用的是Intel CPU,你尽可以忽略倍频,因为IntelCPU使用了特殊的制造工艺来阻止修改倍频。AMD的CPU可以修改倍频,但修改倍频对CPU性能的提升不如外频好。

而外频的速度通常与前端总线、内存的速度紧密关联。因此当你提升了CPU外频之后,CPU、系统和内存的性能也同时提升了。

CPU超频主要有两种方式:

一个是硬件设置,一个是软件设置。其中硬件设置比较常用,它又分为跳线设置和BIOS设置两种。

1.跳线设置超频

早期的主板多数采用了跳线或DIP开关设定的方式来进行超频。在这些跳线和DIP开关的附近,主板上往往印有一些表格,记载的就是跳线和DIP开关组合定义的功能。在关机状态下,你就可以按照表格中的频率进行设定。重新开机后,如果电脑正常启动并可稳定运行就说明我们的超频成功了。

比如一款配合赛扬1.7GHz使用的Intel 845D芯片组主板,它就采用了跳线超频的方式。在电感线圈的下面,我们可以看到跳线的说明表格,当跳线设定为1-2的方式时外频为100MHz,而改成2-3的方式时,外频就提升到了133MHz。而赛扬1.7GHz的默认外频就是100MHz,我们只要将外频提升为133MHz,原有的赛扬1.7GHz就会超频到2.2GHz上工作,是不是很简单呢:)。

另一块配合AMD CPU使用的VIA KT266芯片组主板,采用了DIP开关设定的方式来设定CPU的倍频。多数AMD的倍频都没有锁定,所以可以通过修改倍频来进行超频。这是一个五组的DIP开关,通过各序号开关的不同通断状态可以组合形成十几种模式。在DIP开关的右上方印有说明表,说明了DIP开关在不同的组合方式下所带来不同频率的改变。

例如我们对一块AMD 1800+进行超频,首先要知道,Athlon XP 1800+的主频等于133MHz外频×11.5倍频。我们只要将倍频提高到12.5,CPU主频就成为133MHz×12.5≈1.6GHz,相当于Athlon XP 2000+了。如果我们将倍频提高到13.5时,CPU主频成为1.8GHz,也就将Athlon XP 1800+超频成为了Athlon XP2200+,简单的操作换来了性能很大的提升,很有趣吧。

2.BIOS设置超频

现在主流主板基本上都放弃了跳线设定和DIP开关的设定方式更改CPU倍频或外频,而是使用更方便的BIOS设置。

例如升技(Abit)的SoftMenu III和磐正(EPOX)的PowerBIOS等都属于BIOS超频的方式,在CPU参数设定中就可以进行CPU的倍频、外频的设定。如果遇到超频后电脑无法正常启动的状况,只要关机并按住INS或HOME键,重新开机,电脑会自动恢复为CPU默认的工作状态,所以还是在BIOS中超频比较好。

这里就以升技NF7主板和Athlon XP 1800+ CPU的组合方案来实现这次超频实战。目前市场上BIOS的品牌主要有两种,一种是PHOENIX-Award BIOS,另一种是AMI BIOS,这里以Award BIOS为例。

首先启动电脑,按DEL键进入主板的BIOS设定界面。从BIOS中选择Soft Menu III Setup,这便是升技主板的SoftMenu超频功能。

进入该功能后,我们可以看到系统自动识别CPU为1800+。我们要在此处回车,将默认识别的型号改为User Define(手动设定)模式。设定为手动模式之后,原有灰色不可选的CPU外频和倍频现在就变成了可选的状态。

如果你需要使用提升外频来超频的话,就在External Clock:133MHz这里回车。这里有很多外频可供调节,你可以把它调到150MHz或更高的频率选项上。由于升高外频会使系统总线频率提高,影响其它设备工作的稳定性,因此一定要采用锁定PCI频率的办法。

Multiplier Factor一项便是调节CPU倍频的地方,回车后进入选项区,可以根据CPU的实际情况来选择倍频,例如12.5、13.5或更高的倍频。

菜鸟:如果CPU超频后系统无法正常启动或工作不稳定,我听说可以通过提高CPU的核心电压来解决,有这个道理吗?

阿萌:对啊。因为CPU超频后,功耗也就随之提高。如果供应电流还保持不变,有些CPU就会因功耗不足而导致无法正常稳定的工作。而提升了电压之后,CPU就获得了更多的动力,使超频变得更容易成功和稳定。

在BIOS中可以设置和调节CPU的核心电压(如图7)。正常的情况下可以选择Default(默认)状态。如果CPU超频后系统不稳定,就可以给CPU核心加电压。但是加电压的副作用很大,首先CPU发热量会增大,其次电压加得过高很容易烧毁CPU,所以加电压时一定要慎重,一般以0.025V、0.05V或者0.1V步进向上加就可以了。

3.用软件实现超频

顾名思义,就是通过软件来超频。这种超频更简单,它的特点是设定的频率在关机或重新启动电脑后会复原,菜鸟如果不敢一次实现硬件设置超频,可以先用软件超频试验一下超频效果。最常见的超频软件包括SoftFSB和各主板厂商自己开发的软件。它们原理都大同小异,都是通过控制时钟发生器的频率来达到超频的目的。

SoftFSB是一款比较通用的软件,它可以支持几十种时钟发生器。只要按主板上采用的时钟发生器型号进行选择后,点击GET FSB获得时钟发生器的控制权,之后就可以通过频率拉杆来进行超频的设定了,选定之后按下保存就可以让CPU按新设定的频率开始工作了。不过软件超频的缺点就是当你设定的频率让CPU无法承受的时候,在你点击保存的那一刹那导致死机或系统崩溃。

§ CPU超频秘技

1.CPU超频和CPU本身的“体质”有关

很多朋友们说他们的CPU加压超频以后还是不稳定,这就是“体质”问题。对于同一个型号的CPU在不同周期生产的可超性不同,这些可以从处理器编号上体现出来。

2.倍频低的CPU好超

大家知道提高CPU外频比提高CPU倍频性能提升快,如果是不锁倍频的CPU,高手们会采用提高外频降低倍频的方法来达到更好的效果,由此得出低倍频的CPU具备先天的优势。比如超频健将AMD Athlon XP1700+/1800+以及Intel Celeron 2.0GHz等。

3.制作工艺越先进越好超

制作工艺越先进的CPU,在超频时越能达到更高的频率。比如Intel新推出就赢得广泛关注的Intel Celeron D处理器,采用90纳米的制造工艺,Prescott核心。已经有网友将一快2.53GHz的Celeron D超到了4.4GHz。

4.温度对超频有决定性影响

大家知道超频以后CPU的温度会大幅度的提高,配备一个好的散热系统是必须的。这里不光指CPU风扇,还有机箱风扇等。另外,在CPU核心上涂抹薄薄一层硅脂也很重要,可以帮助CPU良好散热。

5.主板是超频的利器

一块可以良好支持超频的主板一般具有以下优点:(1)支持高外频。(2)拥有良好供电系统。如采用三相供电的主板或有CPU单路单项供电的主板。(3)有特殊保护的主板。如在CPU风扇停转时可以立即切断电源,部分主板把它称为“烧不死技术”。(4)BIOS中带有特殊超频设置的主板。(5) 做工优良,最好有6层PCB板。

§ 未来虚拟化技术的发展

我们可以看到,硬件辅助虚拟化技术必然是未来的方向。Intel-VT目前还处在处理器级虚拟化技术的初级阶段,尚需在如下方面进行发展:

1.提高操作模式间的转换速度。

两种操作模式间的转换发生之如此频繁,如果不能有效减少其转换速度,即使充分利用硬件特性,虚拟机的整体性能也会大打折扣。早期的支持硬件辅助虚拟化技术的 Pentium 4 处理器需要花费 2409 个时钟周期处理 VM entry,花费 508 个时钟周期处理由缺页异常触发的 VM exit,代价相当高。随着 Intel 技术的不断完善,在新的 Core 架构上,相应时间已经减少到 937 和 446 个时钟周期。未来硬件厂商还需要进一步提高模式的转换速度,并提供更多的硬件特性来减少不必要的转换。

2.优化翻译后援缓冲器(TLB)的性能。

每次 VM entry 和 VM exit 发生时,由于需要重新加载CR3 寄存器,因此 TLB(Translation Lookaside Buffer)被完全清空。虚拟化系统中操作模式的转换发生频率相当高,因此系统的整体性能受到明显损害。一种可行的方案是为 VMM 和每个虚拟机分配一个全局唯一 ID,TLB 的每一项附加该 ID 信息来索引线性地址的翻译。

3.提供内存管理单元(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。

4.支持高效的 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 实现的难度。

随便看

 

百科全书收录594082条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/1/31 21:07:43