未来云数据中心需要什么样的网络虚拟化解决方案
每次谈起虚拟化或云计算,管理员都会不约而同的抱怨:"数据中心网络赶不上云计算发展的步伐"。数据中心计算和存储能力在过去十年里取得了巨大提升,而网
络还在采用过去的架构方式,并没有跟上这种演进步伐。随着云计算和移动互联网的加速发展,企业对大幅提高数据中心能力的需求也越来越强烈。"
为什么我们需要网络虚拟化
传统的三层体系结构正在大数据和云计算的新世界之下崩溃,大二层技术逐渐流行。数据中心内的硬件设备被虚拟化后,可以进一步地逻辑池化,并且逻辑资源池可
以跨多个数据中心,在逻辑资源池上提供虚拟的数据中心给用户使用,从而将离散、分层、异构的多个数据中心联结成新的云数据中心。从这个角度来看,网络的虚
拟化变得绝对必要,以提供一种弹性和可扩展的工作负载的引擎,而不是单独管理离散的物理元件之间的连接。
从本质上讲,网络虚拟化是服务器虚拟化自然的和必要的进化。它允许整个数据中心作为一个类似于计算和存储资源一样进行管理,能够满足动态应用程序工作的负载需求。
什么样的网络虚拟化才是适合于未来的云计算数据中心?
SDN的提出,提供了另外一种方式来解决问题的可能。然而SDN只解决了其中一部分问题,并没有解决现网存在的所有问题:
问题1:功能灵活扩展: 要实现网络功能的软件定义,从设备基础架构就要灵活可编程,而功能灵活扩展需要一个开放和灵活扩展的Controller平台架构。
问题2:平滑演进:任何客户,不可能完全抛弃现有网络,去建一个新的网络。下一代网络必须能够在现网直接部署,平滑过渡,才可以生存下去。这就要求Controller必须具备开放的南北向接口,以便适应于传统的网络。
对于未来的云计算数据中心, 网络虚拟化方案需要适应计算和存储虚拟化的浪潮,快速的实现云计算业务的发放,以及能够满足动态的应用程序工作负载的需求;同时需要帮助管理员更简单的管理物理网络和虚拟网络,实现网络可视化。
开放性同样是完美网络虚拟化的一个衡量标准,只有提供丰富的南北向接口和开放的API,并能够满足业界主流云平台对接需求,才能够满足云计算业务日新月异的发展,同时开放性也意味着能够开发不同的插件以便适配现有的网络,从而实现网络的平滑演进。
VMWARE
服务器虚拟化介绍
利用虚拟化基础架构技术,可以不断整合工作负载,从而充分利用服务器并降低运营成本。该基础架构技术不但使系统管理员能够管理更多的服务器,而且在置备新的软件服务和维护现有软件服务时,具有更高的灵活性,响应也更快速。最重要的是,它实现了各种基于 x86 的环境下管理工作的标准化和简化,这包括 Microsoft Windows、Linux、及Solaris x86 等操作系统。
VMware 服务器虚拟化解决方案拓扑图
VMware虚拟架构可以让IT部门达成以下目标:
∙ 达到甚至超过每个CPU,4个负载的整合比率
∙ 更便宜的硬件和运作成本
∙ 在服务器管理方面的重大改进,包含添加,移动,变更,预制和重置
∙ 基础应用将变得更强壮和灾难抵御能力
VMware软件可帮助我方实现:
∙ 减少28%-53%的硬件成本
∙ 减少72%-79%的运作成本
∙ 减少29%-64%的综合成本
建设目标:
∙ 整合空闲服务器和存储资源,为新项目重新部署这些资源
∙ 提升运作效率
∙ 改进服务器的管理灵活性
∙ 通过零宕机维护改善服务等级
∙ 标准化环境和改进安全
∙ 灾难状态下,减少恢复时间
∙ 更少冗余的情况下,确保高可用性
∙ 更有效的适应动态商业的需求
∙ 在技术支持和培训方面降低成本
提高运营效率
部署时间从小时级到分钟级, 服务器重建和应用加载时间从 20-40 hrs到15-30 min, 每年节省10,00 人/小时(30台服务器);
以前硬件维护需要之前的数天/周的变更管理准备和1 - 3小时维护窗口,现在可以进行零宕机硬件维护和升级。
提高服务水平
帮助建立业务和IT资源之间的关系,使IT和业务优先级对应;
将所有服务器作为大的资源统一进行管理,并按需自动进行动态资源调配;
无中断的按需扩容。
旧硬件和操作系统的投资保护
不再担心旧系统的兼容性,维护和升级等一系列问题。
VMware虚拟化具有的主要功能
1、VMware VMotion
通过VMware VMotion可以实现虚拟机的动态迁移, 而服务不中断 。VMware VMotion 是一项由 VMware 独家提供的革命性技术,它可以将正在运行的虚拟机移动到另一台物理服务器上,同时使服务始终保持可用状态,并实现零停机。虽然 VMotion 需要用户手动执行,但是该产品也是 VMware DRS 等产品的基础,这些产品可在预定义的条件下自动移动虚拟机。
VMotion 是 VMware 第一款实现虚拟机分发的产品,它创造了条件,使您可以根据需要移动工作负载,以便维持服务级别和性能目标。现在可以在不安排停机时间、不中断业务运营的情况下执行硬件维护。
2、VMware Storage VMotion
Storage VMotion 对异构存储阵列执行的操作与 VMotion 对物理服务器执行的操作相同。Storage VMotion 可以将虚拟机磁盘文件从一个共享存储位置重新分配到另一个共享存储位置,并具有与 VMotion 相同的优势:零停机、连续的服务可用性和全面的事务完整性。
这些优势适用于在许多情景中管理存储容量和性能。其中包括从一个存储阵列迁移到另一个存储阵列,或将虚拟机磁盘文件移动到位于光纤通道阵列上经过性能优化的 LUN。Storage VMotion
的无中断特性意味着可以更积极地管理和平衡存储容量,以及
减少 I/O 性能问题。
3、VMware分布式资源调度(DRS)
除了 VMotion 和 VMware HA 等支持服务器超长正常工作时间和高可用性的产品之外,VMware 还开发了一些优化工具,用来维护 VMware Infrastructure 的高效率。VMware DRS 就是其中之一。VMware Infrastructure 将符合业界标准的服务器及其附带的网络和存储器聚合到一个共享的计算、网络和存储资源池。DRS 动态地分配和平衡计算容量以保证对资源的最优访问。
它主动监控容量利用率,并以智能化的方式在资源池中自动平衡虚拟机,以达到服务级别要求。DRS 根据定义的业务优先级和不断变化的容量需求在不同的虚拟机间分配可用的计算容量。当某个虚拟机的负载增大时,DRS 会自动将该虚拟机迁移到另一台可用资源较多的物理服务器,从而为它分配更多的容量。反之,当 VMware DRS 检测到资源池使用较少的服务器即可运行工作负载时,它会让它们进入待机模式,从而减少电力消耗。无论是哪种情况,它管理资源分配时都不需要让资源池中的虚拟机停机。
3、
VMware HA
共享存储访问的服务器主机的 CPU、内存和其他资源放在共享池中。VMware HA 产品将虚拟机重启自动化,所以它从位于资源池中的其他服务器主机而不是刚刚停机的主机处获取资源。由于硬件故障而失去一台 VMware ESX 主机并不会演化为一场灾难性事件,而仅仅意味着可用的资源池减少了。在群集中失去一台主机只会使资源减少,而不会失去虚拟机。VMware HA 会检测到故障主机,管理重新分配资源,并在另一台 VMware ESX 主机上重新启动故障主机的虚拟机。VMware HA 易于使用,可以为虚拟机中运行的应用程序提供经济高效的高可用性。
不需要专门的备用硬件,也不需要集成其他软件,就可以将停机时间和 IT 服务中断时间降到最低程度。VMware HA 可以实现 IT 环境的高可用性,而且避免了单一操作系统或特定于应用程序的故障切换解决方案带来的成本和复杂性。
4、VMware Converter
这是一款自动将物理机、其他格式的虚拟机和第三方映像格式转换为 VMware
虚拟
机的工具。VMware 的客户主要使用 VMware Converter 来简化物理服务器环境的虚拟化流程。
VMware虚拟化方案的应用效果
根据以上服务器的虚拟化整合方案,新的虚拟构架能为系统应用提供前所未有的资源利用率,并为所有系统运算和I/O提供资源控制。虚拟构架完美地结合FC SAN存储,实现了最大的投资回报率。通过把物理系统整合到有虚拟构架的数据中心上去,可以体现如下的价值:
● 本次虚拟化整合以后,将目前的约20台服务器减少至4台左右。最终将会大大降
低机房能耗,大大降低运营成本。
● 该方案将极大的提供服务器整合的效率,大幅度简化服务器群管理的复杂性,管理
员只通过同一个虚拟主机管理系统,就可对所有的虚拟主机进行管理,同时虚拟主机管理软件能监控服务器CPU、内存使用情况,对于有服务器不正常工作时也会自动报警。
● 改造以后可以做到应用零停机,虚拟架构中虚拟机可动态在线从一台物理服务器迁
移到另一台物理服务器上,当物理服务器底层出现故障时,所有在线的虚拟机都可以自动迁移到另一台主机,保持应用不中断。这样将可提升系统的运作效率,虚拟化平台的虚拟机都可以进行在线的热迁移,无需停止业务系统应用。如果底层硬件需要更新的时候,只需要在新的服务器上安装虚拟主机底层,然后将虚拟主机加入集群,然后使用虚拟机的VMotion热迁功能,即可完成业务系统的迁移,在此过程中业务系统将不会停止工作。
● 空闲系统资源的整合,目前的业务系统多,又必须使用单独的系统,因此就得依靠
大量的服务器,但是以Web业务为主的系统本身对硬件的要求不是很高,这样就导致服务器资源利用率不高,而在服务器虚拟化整合以后,通过虚拟化的动态资源调配功能,保证服务器利用率的最大化。
● 不再担心旧系统的兼容性,维护和升级等一系列问题。
● 企业采用服务器虚拟化的好处:
● 1 减少服务器的数量,提供一种服务器整合的方法,减少初期硬件采购成本
2 简化服务器的部署、管理和维护工作,降低管理费用
3 提高服务器资源的利用率,提高服务器计算能力
4 通过降低空间、散热以及电力消耗等途径压缩数据中心成本
5 通过动态资源配置提高IT对业务的灵活适应力
6 提高可用性,带来具有透明负载均衡、动态迁移、故障自动隔离、系统自动重构的高可靠服务器应用环境
7 支持异构操作系统的整合,支持老应用的持续运行
8 在不中断用户工作的情况下进行系统更新
9 支持快速转移和复制虚拟服务器,提供一种简单便捷的灾难恢复解决方案
VSphere 5产品介绍
VMware vSphere 5 的新增功能
VMware vSphere 是用于构建云计算基础架构的业界领先的虚拟化平台。它使用户能够自信地运行关键业务应用程序,更快地响应业务需求。
vSphere 加快了现有数据中心向云计算的转变,同时还支持兼容的公共云服务,从而形成了业界唯一的混合云模式的基础。
一 基础架构服务(计算、存储和网络)
1 计算
• vSphere ESXi 聚合 — vSphere 5 在 ESXi 虚拟化管理程序体系结构之上实现聚合。ESXi 是虚拟化管理程序的黄金级标准,它使 vSphere 用户能够利用
更精简的体系结构、更安全的占用空间和简化的修补及设置模型。
• vSphere 自动部署 — 自动部署是针对运行 ESXi 虚拟化管理程序的新 vSphere 主机的新部署和修补模型。数分钟即可部署更多 vSphere 主机,而且
更新也变得空前高效。
• 新的虚拟机格式(版本 8) — vSphere 5 中的新虚拟机格式具有若干新功能,包括支持: – Windows Aero 的 3D 图形
– USB 30 设备
• Apple 产品支持 — vSphere 5 支持将运行 OS X Server 106(Snow Leopard) 的 Apple Xserve 服务器作为客户操作系统。
2 存储
• vSphere 存储 DRS — 通过分组、放置和平衡改进管理并实现更高效的存储资源利用。 • 配置文件驱动的存储 — 根据服务级别确定要用于给定虚拟机的适当存储。这样就简化了选择正确的存储并确保提供该存储的方法。
• vSphere 文件系统 — 通过无中断地升级到该平台的最新集群文件系统版本,从而利用增强的可扩展性和性能。
• vSphere 存储 I/O 控制 — 通过扩展网络文件系统 (NFS) 数据存储区中的限制和共享来改进服务级别协议 (SLA) 的管理和执行。
• vSphere Storage API Program — 利用支持精简配置的阵列集成 API 扩展。使用新的 vSphere 存储 DRS 和配置文件驱动的存储功能时,利用新的Storage Awareness and Discovery API与阵列交互。
3 网络
• vSphere 网络 I/O 控制 — 新的每虚拟机控制允许更精确地强制执行 SLA。
• vSphere Distributed Switch — 通过 NetFlow 来提高虚拟机流量的可见性,并通过 Switched Port Analyzer (SPAN) 和链路层发现协议 (LLDP) 支持来增强
监控和故障排除。
二 应用程序服务(可用性、安全性和可扩展性)
1 可用性
• vSphere High Availability — 新的体系结构可以实现一流的保证、简化的设置和配置以及更强的可扩展性。
• vSphere vMotion — 现在支持通过较高延迟的网络链路进行虚拟机迁移。
2 安全性
• ESXi 防火墙 — 新的面向服务且无状态的防火墙引擎可以按IP 地址或子网限制对特定服务的访问。这对于需要网络访问的第三方组件特别有用。
3 可扩展性
• 更大型的虚拟机 — 虚拟机现在可以增长到任何以前版本的 4倍,甚至可以支持最大型的应用程序。虚拟机现在可以拥有多达 32 个虚拟 CPU 和
1 TB RAM。
三 管理服务
核心管理
• vSphere Web 客户端 — 在全球任何位置从任何 Web 浏览器访问 vSphere。
• VMware vCenter Server 设备 — 将 vCenter Server 作为基于Linux 的虚拟设备来运行。
关于Linux虚拟化的优势我们大家已经有所了解。目前使用最多的虚拟化操作系统还是Windows系列,但是Linux的成长速度是惊人的,大有替代Windows的趋势。关于Linux虚拟化技术大致上可以分为六个不同的方式。在本文中,我们将讨论实现Linux虚拟化的这六种方式,以及Linux下的多种虚拟化解决方案。
当我们讨论虚拟化解决方案的时候,常常都要提到具体厂商的具体产品,但是当我们提及Linux虚拟化解决方案的时候,我们更乐意讨论广泛而多样化的开源生态系统。Linux支持多种虚拟化平台,并延伸出多种技术,同样也是一个完整方案的一个元素。
虚拟化—老树开新花
虽然虚拟化现在如此的流行,但虚拟化不是一个新的技术,早在半个世纪之前IBM就已经开始部署虚拟化。最早虚拟化技术是在IBM M44计算机上进行实验,然后在IBM System/360大型机产品上开始普及。最早的真正意义上的整体应用虚拟化的硬件平台是IBM CP-40系统,在上世纪60年代末被用在商业应用上。
虚拟化包含多个层面,比如硬件虚拟化,这种虚拟化从底层的硬件平台直接支持软件环境;另外一种是操作系统虚拟化,这是Linux的一个亮点。
在硬件层之上,独立于操作系统的一层软件被称之为hypervisor,或者叫做虚拟机监视器。hypervisor创建了虚拟化平台,而操作系统实例则运行在这个平台上,这使得硬件平台可以被多个操作系统和应用所共享,从而降低硬件的成本。
运行在hypervisor上面的实体被称为虚拟机,即VM,是用来放置操作系统、应用和数据元的“容器”。虚拟机中的操作系统和应用程序的数据被存储在虚拟磁盘中,hypervisor利用虚拟磁盘来启动虚拟化平台。虚拟机被封装为一个文件,这样比分布式的文件更好管理。
本地虚拟化和主机虚拟化模型
早期的虚拟化模型被称为Type 1,或者叫本地虚拟化(native virtualization),这种模型下hypervisor直接运行在硬件之上,在hypervisor上面是虚拟机。后来出现了主机虚拟化(hosted virtualization)模式,被称为Type 2,hypervisor运行在操作系统之上,在同一平台上允许两个或更多的操作系统共存。
Linux虚拟化技术基础
了解了有关虚拟化的一些基本知识后,我们进入正题,来讨论一下Linux虚拟化的一些知识。首先是模拟(Emulation),是将一个操作系统(Host)的服务转换并显示成另一个操作系统(Guest)的过程,Host和Guest系统不一定是相同的,比如,Host系统可能是x86平台,可以提供PowerPC平台的模拟,即使是指令和架构完全不相同。
另外,hypervisor的模拟器(emulator)可以提供多个平台的模拟,比如下面的图例,在Host系统上可以仿真出PowerPC和ARM系统。模拟过程并不仅限于Type 2虚拟化模型,在虚拟化技术中都存在这个过程。
虚拟化模型中的模拟过程
Linux中最流行的两个模拟器(emulator)包括QEMU和Bochs(处理器和平台模拟器)。这种解决方案的优点是它们是非常“轻便的”,可以支持在不同的Host操作系统和平台上运行不同的Guest操作系统。而这种解决方案的缺点在于由于要模拟指令,导致效率比较低。QEMU通过动态编码转换的模拟方式,让内核和内部用户代码可以被加速。另外,QEMU是一个很好的嵌入式平台开发工具,可以为与主机相异的CPU开发和测试代码。QEMU还可以被用来其他虚拟化解决方案来进行设备模拟。
平台虚拟化
更加传统的虚拟化解决方案是平台虚拟化,或者叫做硬件虚拟化,具有两种主要的形式,完全虚拟化( full-virtualization)和半虚拟化(para-virtualization)。
完全虚拟化,虚拟化平台通过hypervisor来承载虚拟机(VM),完全虚拟化的关键在于这些虚拟机,也就是运行在这些虚拟机里面的操作系统可以在hypervisor上运行,并且不被修改,这在需要一个真正的虚拟平台时是非常理想的,但这种模式具有一个缺点。
在完全虚拟化下虚拟机VM会把虚拟平台当作物理平台,工作在虚拟平台上的Guest操作系统驱动就好像运行在真实的硬件之上。但需要考虑这意味着什么,Guest操作系统和虚拟平台之间通讯就好像和真实平台一样,在hypervisor里面存在着另外一个模拟层,模拟硬件平台并转发虚拟机对硬件的访问,就好像虚拟机直接在使用真实的硬件。这个过程需要大量的处理,会限制Guest系统的I/O性能。
解决这个问题的一个方法就是让Guest操作系统意识到自身是被虚拟化的,这种形式被称作半虚拟化(para-virtualization),如下图,在这种模式下,Guest系统包含了缩短硬件访问过程所需的驱动程序,这让把Guest系统从不必要的工作中解放出来,来进行更高级别的工作。
两种平台虚拟化方式
虽然完全虚拟化是一个理想的方案,但是通过修改Guest操作系统可以最大限度的减少处理开销,获得相当大的性能提升。
Linux包含两个重要的解决方案,可以同时实现完全虚拟化和半虚拟化。如Citrix的Xen是一个流行的解决方案,可以同时执行Type1和Type2型hypervisor,Amazon的EC2就采用Xen来进行服务器的虚拟化。
另一个重要的hypervisor是Linux Kernel Virtual Machine(KVM),同样都支持本地虚拟化和主机虚拟化模型。KVM是有特点的,它通过夹在内核模块可以对Linux内核进行小的修改,从而变成一个全特性的hypervisor。KVM通过应用virtio可以支持半虚拟化,在Guest系统中包括用于半虚拟化的标准Linux驱动。
KVM也是第一个完全集成在主线内核(mainline kernel)的hypervisor,由Rad Hat开发,在一些关键领域被采用,比如IBM对云计算的开发和测试中。
需要注意的是无论是完全虚拟化还是半虚拟化,每种解决方案都应用了硬件协助虚拟化(hardware-assisted virtualization)。目前新的AMD和英特尔CPU都集成了优化hypervisor的指令集,来增强Guest虚拟机的I/O性能。
操作系统虚拟化
操作系统虚拟化是另外一个重要的虚拟化技术,正如其名,是对操作系统本身进行虚拟化,而不是平台。在这种方式下,操作系统提供一组用户空间(User-Space)彼此隔离,而应用被限制在每个用户空间里面,就好像一个独立的主机。这种形式的虚拟化在虚拟主机环境中非常流行,让多个独立的用户可以共享一个操作系统。
操作系统虚拟化
操作系统虚拟化依赖于可以创建和隔离用户空间(或者叫做容器或者私有虚拟服务器)的Linux内核,OS虚拟化最大的好处在于几乎没有任何开销,因为用户只是简单的共享OS和主机,而不需要通过虚拟机。而缺点在于目前我们采用的OS虚拟化解决方案缺乏灵活性,不能在任意的操作系统上实施,用户共享主机和操作系统还需要注意版本。尽管有这些不足,服务器虚拟化还是应用的非常广泛。
Linux包含很多的操作系统解决方案,具有很高的可配置性。比如OpenVZ、Linux-VServer和FreeVPS是其中三个最流行的,均支持CPU、内存网络、I/O和存储配额配置,OpenVZ还支持主机之间的在线VPSes迁移。
其他Linux虚拟化技术
在上面的文章中,我们讨论了模拟、平台虚拟化和操作系统虚拟化,这三种是最常用的虚拟化技术,除此之外,还有很多其他种类的虚拟化技术可以满足我们的需求,下面我们来看看几种不同于之前谈论范畴的虚拟化技术。
CoLinux
CoLinux,或者叫做协作Linux,是一种利用协作虚拟机的虚拟化方式。在CoLinux模式下,Linux Guest系统运行在微软Windows操作系统之上,共享底层的硬件资源。CoLinux需要Guest系统(即CoLinux本身)被修改,让它认为自己运行在其他操作系统之上。CoLinux是一种半虚拟化的方式,是将Windows作为Host操作系统,并且每个Host系统上只能运行一个CoLinux实例。由于这种限制,CoLinux被定义为一种特别的虚拟化技术。
目前业内主流的虚拟化方案主要有两个阵营的,第一个是第三方软件的,例如VMWare、思捷的,另一种是操作系统厂商提供的,例如Windows、redhat Liunx的,IBM很早以前在其小型机以上的服务器上就可以实现虚拟化功能了。至于国内的,目前我了解的,国内的服务器厂商大部分都是OEM VMWare的产品,只有一款叫做维纳斯的桌面虚拟化软件。从安全性角度来讲,我建议考虑国外的虚拟化软件。同时虚拟化是一个整体解决方案,它涉及到硬件(服务器、存储、网络交换)和软件还有信息安全等方面的内容,不单单是一套软件就能完成的。在做虚拟化工程的时候,首先要分析用户的业务需求,就是为什么要部署虚拟化,部署虚拟化能帮助用户解决哪些问题,用户实际需要的是服务器虚拟化还是桌面终端虚拟化,或者仅仅是一个虚拟桌面或者无盘站,这些搞清楚了以后,还要深入了解用户想花多少钱,做多少事,没钱,什么也做不成的!这些都确定以后,可以考虑硬件支撑和信息安全支撑方面的内容了。如果在这方面知识有限,无法准确界定边界范围的时候,可以求助厂商,在国内来讲,浪潮、曙光、联想都在说自己能够承载虚拟化技术,在选择厂商的时候,一定要深入了解厂商在用户当地的技术支持人员的技术实力,很多情况下,硬件服务器厂商确实是能够实现虚拟化支撑的,但是具体到技术上,理解较深或者技术水平较高的工程师都不在本地,无论是规划还是实施、维护,对于没有工程师的地方,都是灾难性的。
通过虚拟化可以在单台物理计算机上运行多个虚拟机,且所有虚拟机可在多种环境下共享该物理计算机的资源。在同一物理计算机上,不同的虚拟机可以独立、并行运行不同的操作系统和多个应用程序。拿云宏的CNware虚拟化平台来做个例子:
1) CNware WinServer和虚拟化IT基础架构
WinServer 是云宏公司推出一套服务器虚拟化解决方案。按需分配是云计算的核心思想,WinServer是云计算的基础。
WinServer将应用程序和操作系统从底层硬件分离出来,从而简化了 IT操作。
2) CNware WCE管理层
WCE 的接口包括四大类
a) WinServer API 用来管理 WinServer服务器
b) 异构虚拟化管理客户端和第三方解决方案连接
c) 数据库接口与DB连接,用于存储信息
d) 北向接口用于对接WinCenter及第三方管理平台
3) 访问 Cnware WinServer 虚拟化架构
访问WinServer虚拟化架构,可通过如下三种方式
a) CNware Web Client
b) SDK和命令行界面
c) 直接虚拟机控制台访问
4) 虚拟化解决方案
最后,我们介绍下服务器虚拟化的三种解决方案,除了本文介绍的CNware(商用),还包括 openstack(开源)和VMware vSphere(商用)。
虚拟化技术简介
什么是虚拟化
虚拟化(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 实现的难度。
0条评论