虚拟化技术的分类
服务器虚拟化技术 1.服务器虚拟化 服务器虚拟化是最常见的虚拟化系统。每个虚拟服务器都可以运行自己的操作系统和应用程序。
该技术显着提高资源利用率、降低能耗、简化管理和维护。
例如VMware ESXi、微软Hyper-V、KVM等都是业界知名的服务器虚拟化平台。
2.网络虚拟化网络虚拟化是将物理网络资源(如交换机、路由器等)转换为逻辑网络资源,以实现灵活的网络管理、扩展和配置。
网络虚拟化技术包括VLAN、VPN和软件定义网络(SDN)。
3、存储虚拟化存储虚拟化将物理存储资源(如硬盘、闪存等)抽象出来,转化为逻辑存储资源,从而提高存储效率、数据保护和恢复资源,并提供更灵活的文件管理。
例如,存储区域网络(SAN)和网络附加存储(NAS)经常使用存储虚拟化技术。
4、应用程序虚拟化 应用程序虚拟化技术将应用程序与操作系统分离,允许应用程序运行在不同的操作系统或设备上,而无需在每个设备上单独安装。
这提高了应用程序的便利性和可移植性,同时降低了部署和管理成本。
例如,CitrixXenApp 和 MicrosoftApp-V 是应用程序虚拟化的常用工具。
5、桌面虚拟化桌面虚拟化技术在数据中心集中运行用户的桌面环境(包括操作系统、应用程序和用户数据),然后通过网络远程将桌面环境提供给用户的设备。
该技术提供了更灵活的办公环境、更好的数据安全性以及更低的桌面管理成本。
例如,VMware Horizon 和 Citrix Virtual Desktops 是桌面虚拟化的常见解决方案。
虚拟化有哪些关键技术
常见的虚拟化技术包括: 1、CPU虚拟化:这是一种硬件解决方案。支持虚拟化技术的CPU有专门优化的指令集来控制虚拟进程。
这些指令集使得虚拟机监视器(VMM)能够更轻松地提高性能,并且比虚拟软件实现更大程度地提高性能。
2.网络虚拟化:网络虚拟化是对网络进行虚拟化,以支持在同一物理网络上运行多个虚拟网络。
提高网络资源利用率,使网络配置和管理更加灵活。
3、服务器虚拟化:服务器虚拟化是将一台物理服务器虚拟成多台逻辑服务器。
每个逻辑服务器可以运行不同的操作系统和应用程序。
这样可以提高服务器资源利用率,降低硬件成本。
4.存储虚拟化:存储虚拟化将物理存储资源抽象出来,供虚拟机使用。
它可以提高存储资源的利用率,简化存储管理,提高数据访问速度。
5、高性能应用虚拟化:高性能应用虚拟化是针对特定应用的虚拟化,以提高应用的性能和可扩展性。
确保更高效地利用资源,支持灵活的应用部署和管理。
虚拟化技术都包含什么?
虚拟化技术简介 什么是虚拟化? 虚拟化技术最早出现在20世纪60年代的IBM大型机上,并在1970年代随着System370系列逐渐流行起来。这些机器经过虚拟机监控程序(VirtualMachineMonitor,VMM),它生成许多虚拟机。
可以在物理硬件上运行独立操作系统软件的实例(虚拟机)。
近年来,随着多核系统、集群、网络甚至云计算的广泛采用,虚拟化技术在商业应用中的好处越来越明显。
不仅降低了IT成本,还提高了系统的安全性和可靠性。
虚拟化的概念也逐渐渗透到人们的日常工作和生活中。
虚拟化是一个广泛的术语,对于不同的人来说可能意味着不同的事情,具体取决于他们的环境。
在计算机科学领域,虚拟化是计算资源的抽象,并不局限于虚拟机的概念。
例如,物理内存的抽象导致了虚拟内存技术,该技术欺骗应用程序认为它具有永久可用的地址空间。
事实上,应用程序代码和数据可能被分成几个碎片页或段。
),甚至移动到磁盘、闪存等外部存储中,这样即使物理内存不足,应用程序也能顺利运行。
虚拟化技术的分类 虚拟化技术主要分为以下几类[1]: 平台虚拟化,旨在虚拟化计算机和操作系统。
资源虚拟化,即内存、存储、网络资源等特定系统资源的虚拟化。
应用程序虚拟化,包括建模、仿真、解释技术等。
我们通常所说的虚拟化,主要是指平台虚拟化技术,即平台虚拟化技术。
通过使用控制程序(ControlProgram,也称为VirtualMachineMonitor或Hypervisor)隐藏特定计算平台的实际物理特征,为用户提供一个抽象的、统一的、模拟的计算环境(称为虚拟机)。
运行在虚拟机上的操作系统称为来宾操作系统(GuestOS),运行虚拟机监视器的操作系统称为主机操作系统(HostOS)。
当然,有些虚拟机监视器无需操作系统即可直接工作。
硬件之上的系统(例如,VMWARE ESX 产品)。
虚拟机运行的实际系统称为主机系统。
平台虚拟化技术可以分为以下几个子类: 全虚拟化(Full virtualization)。
全虚拟化是指虚拟机模拟所有底层硬件,包括处理器、物理内存、时钟、外设等,使其成为原生的。
操作系统。
或者硬件开发的其他系统软件无需任何修改就可以在虚拟机上运行。
操作系统和实际硬件之间的交互可以被认为是通过预定义的硬件接口进行的。
完全虚拟化的VMM会暴露所有接口,同时完全模拟硬件(还应该模拟执行特权指令的过程)。
例如,在x86架构上,操作系统切换进程页表,实际硬件通过提供CR3特权寄存器来实现该接口,操作系统只需要执行“movpgtable,%%cr3”汇编指令即可。
全虚拟化的VMM必须完全模拟整个接口执行过程。
如果硬件没有提供对虚拟化的特殊支持,那么建模过程将会非常复杂:一般来说,VMM应该与最高的操作系统一起工作。
优先权完全控制主机系统,并且客户操作系统必须运行在降级版本上,以便其无法执行特权操作。
当GuestOS执行先前的特权汇编指令时,主机系统会抛出异常(GeneralProtectionException),并且执行控制再次从GuestOS转移到VMM。
VMM为GuestOS预先分配该变量作为CR3影子寄存器,将pgtable表示的guest物理地址(GuestPhysicalAddress)填充到CR3影子寄存器中,然后VMM还需要将pgtable转换为主机物理地址(HostPhysicalAddress)并填充CR3 物理寄存器。
最后,返回GuestOS。
然后,VMM 将处理复杂的 GuestOS 页面错误异常 (PageFault)。
最著名的完全虚拟化 VMM 包括 MicrosoftVirtualPC、VMwareWorkstation、SunVirtualBox、ParallelsDesktopforMac 和 QEM.U。
半虚拟化是一种修改部分 GuestOS 代码以访问特权状态以直接与 VMM 交互的技术。
在半虚拟化虚拟机中,一些硬件接口以软件的形式暴露给客户操作系统,可以通过Hypercall(VMM向客户操作系统提供的直接调用,类似于系统调用)来暴露。
例如,GuestOS将页表切换代码更改为调用Hypercall来直接更改CR3影子寄存器和地址转换。
由于不需要抛出额外的异常并模拟部分硬件执行过程,因此半虚拟化可以显着提高性能。
最著名的 VMM 包括 Denali 和 Xen。
硬件辅助虚拟化 硬件辅助虚拟化是指在硬件(主要是主机处理器)的支持下实现高效的全虚拟化。
例如,通过支持 Intel-VT 技术,GuestOS 和 VMM 运行时自动完全隔离。
GuestOS有自己的“完整寄存器集”,可以直接在最高层进行操作。
因此,在上面的示例中,GuestOS 可以执行以下构建指令:更改页表。
Intel-VT和AMD-V是目前x86架构上可用的两种硬件虚拟化技术。
部分虚拟化VMM仅模拟部分底层硬件,因此来宾操作系统无法原样运行在虚拟机上,其他程序可能需要修改。
从历史上看,部分虚拟化一直是全虚拟化道路上的一个重要里程碑。
它首先出现在第一代CTSS分时系统和实验性的IBMM44/44X寻呼系统中。
操作系统级虚拟化(OS-level virtualization) 在传统操作系统中,所有用户进程本质上都运行在同一个操作系统实例上,因此内核或应用程序的缺陷可能会影响其他进程。
操作系统虚拟化是一种应用于服务器操作系统的轻量级虚拟化技术。
内核通过创建虚拟操作系统(内核和库)的多个实例来隔离不同的进程。
不同实例中的进程完全不知道另一个人的存在。
最著名的有SolarisContainer[2]、FreeBSDJail和OpenVZ等。
这种分类并不是绝对的。
好的虚拟化软件通常结合了多种技术。
例如,VMware Workstation是众所周知的全虚拟化VMM系统,但它使用一种称为动态二进制翻译的技术将特权状态访问转换为影子状态操作,从而避免了类似于半虚拟化的低效Trap-And-Emulate处理方式。
只不过半虚拟化静态地改变了程序代码。
通过半虚拟化,如果可以利用硬件功能,那么管理虚拟机将大大简化,同时保持高性能。
本文讨论的虚拟化技术仅适用于 x86 平台(包括 AMD64),并假设 guest OS运行在虚拟机上,也是为 x86 平台设计的。
-------------------------------------------------- ----------------------------------回到开头 纯软件虚拟技术原理及问题 虚拟机监控必须1974年,Popek和Goldberg在《第三代虚拟化架构的形式要求》一文中提出了一组充分条件,称为虚拟化标准。
满足这些条件的控制程序就可以称为虚拟机监视器(Virtual Machine Monitor,简称VMM):资源管理。
控制程序必须能够管理所有系统资源。
等价。
在数据程序控制下运行的程序(包括操作系统)的行为,除了时间和资源可用性外,应该与没有守护程序时完全相同,并且可以自由执行预先编写的特权指令。
效率。
绝大多数客户端指令必须由主机硬件直接执行,无需控制程序的参与。
尽管上述条件基于简化的假设,但它们仍然为评估计算机体系结构是否能够有效支持虚拟化提供了有用的方法,并且还为可虚拟化计算机体系结构的设计提供了指导。
原理介绍我们知道,传统的x86架构缺乏必要的硬件支持,任何虚拟机监视器都无法直接满足上述条件,因此它不是可虚拟化的架构,但是我们可以使用软件实现创建虚拟机监视器。
虚拟机是对真实计算环境的抽象和模拟。
VMM需要为每个虚拟机分配一组数据结构来管理其状态,包括全套虚拟处理器寄存器、物理内存使用情况和虚拟设备状态。
等等。
VMM在调度虚拟机时,会将其部分状态恢复为主机系统。
并非所有条件都需要恢复。
例如,主机CR3寄存器存储的是VMM设置的物理页表地址,而不是GuestOS设置的值。
主机处理器直接执行GuestOS机器指令。
由于GuestOS以低权限运行,当访问主机系统的特权状态(例如写入GDT寄存器)时,权限不足会导致主机处理器自动抛出异常。
返回运行VMM 的权限。
另外,外部中断的发生也会导致VMM启动。
VMM可能需要首先将虚拟机的当前状态写回状态数据结构,分析虚拟机被挂起的原因,然后代表GuestOS执行适当的特权操作。
最简单的情况下,如果GuestOS修改CR3寄存器,只需要更新虚拟机的状态数据结构即可。
一般来说,在大多数情况下,VMM需要经过复杂的流程才能执行最初简单的操作。
最后,VMM将执行权返回给Guest OS,Guest OS从上次中断的地方继续执行,或者处理VMM抛出的虚拟中断和异常。
这种运行虚拟机的经典方法称为 Trap-And-Emulate。
虚拟机对GuestOS完全透明,不需要任何更改。
然而,VMM设计将更加复杂,并且系统整体性能将显着降低。
。
面临的挑战在开发纯软件VMM时,需要解决以下挑战[4]:确保VMM控制所有系统资源。
x86处理器有4个特权级别:Ring0~Ring3。
只有运行在Ring0~Ring2时,处理器才能访问特权资源或执行特权指令。
当运行在 Ring0 中时,处理器可以访问所有特权状态。
x86 操作系统通常仅使用两层:Ring0 和 Ring3。
操作系统运行在Ring0级别,用户进程— 在 Ring3 级别。
为了满足上述第一个充分条件 - 资源控制,VMM 本身必须运行在 Ring0 级别。
同时,为了防止Guest OS控制系统资源,GuestOS必须降低自身的运行级别,运行在Ring1或级别。
级别 Ring3(Ring2 未使用)。
特权级压缩(Ring Compre ssion)。
VMM 使用交换或段限制来保护对物理内存的访问,但段限制在 64 位模式下不起作用,并且交换不区分 Ring0、1 和 2。
为了统一和简化 VMM 的设计,GuestOS 只能作为来宾进程在 Ring3 级别运行。
VMM 必须监视特权资源(例如 GDT 和 IDT)的 GuestOS 设置,以防止 GuestOS 在 Ring0 上运行。
同时,它必须保护早期版本的GuestOS免受来宾进程的主动攻击或无意损坏。
权限级别名称 (RingAlias)。
权限级别名称指的是 GuestOS 在虚拟机上运行的级别,而不是您所期望的级别。
VMM 必须确保来宾操作系统无法知道它正在虚拟机上运行,否则可能会违反等效条件。
例如,x86处理器的特权级别存储在CS代码段寄存器中。
GuestOS可以使用非特权push指令将CS寄存器压入堆栈,然后将其弹出以测试值。
又如:GuestOS 在低权限级别无异常地读取 GDT、LDT、IDT、TR 权限寄存器,可能会发现这些值与预期不同。
为了解决这个问题,VMM可以采用动态二进制翻译技术,比如预先替换“push%%cs”指令并将CS影子寄存器值存入堆栈,比如GDT寄存器的读操作; 替换为“sgdtdest”。
更改为“movlfake_gdt,dest”。
地址空间压缩(Address Space Compre ssion)。
地址空间压缩意味着VMM必须保留部分GuestOS地址空间供其使用。
例如中断描述表寄存器(IDTRegister)存放的是表的线性地址中断描述。
如果GuestOS运行时发生外部中断或触发处理器异常,必须确保执行权立即转移到Guest OS。
因此,VMM需要交给GuestOS。
线性地址空间部分将主机的物理地址映射到其自己的中断描述表。
VMM可以完全运行在GuestOS地址空间中,也可以在后一种情况下,VMM只占用很小的GuestOS地址空间,用于存储中断描述表和全局描述符表(GDT)等重要的特权状态。
无论如何,VMM必须阻止GuestOS直接读取和修改这部分地址空间。
处理来宾操作系统页面错误异常。
内存是VMM必须充分管理的非常重要的系统资源。
GuestOS理解的物理地址只是来宾物理地址(GuestPhysicalAddress),而不是最终的主机物理地址(HostPhysicalAddress)。
当GuestOS中发生页面错误时,VMM必须知道页面错误的原因,是否有Guest进程试图访问未经许可的地址,或者Guest LinearAddress尚未转换为GuestPhysicalAddress,或者Guest物理地址尚未转换已转换为主机物理地址。
一种可能的解决方案是,VMM 为 GuestOS 中每个进程的页表创建一个影子页表,维护 GuestLinearAddress 到 HostPhysicalAddress 的映射,主机 CR3 寄存器存储该影子页表的物理内存地址。
VMM 还维护一个将全局来宾 GuestPhysicalAddress 映射到 HostPhysicalAddress 的表。
引发页错误异常的地址始终是GuestLinearAddress。
VMM首先检查GuestOS中的页表以确定原因。
如果设置了页表项,那么就有对应的GuestPhysicalAddress,说明存在映射。
HostPhysicalAddress 尚未设置,则 VMM 分配物理内存页。
更新影子页表和映射表。
否则,VMM返回GuestOS,GuestOS自己处理异常。
处理系统在 GuestOS 中调用。
系统调用是操作系统向用户提供的服务过程,使用非常频繁。
较新的操作系统通常使用 SYSENTER/SYSEXIT 指令对来实现快速系统调用。
SYSENTER指令通过三个MSR(ModelSpecificRegister)寄存器IA32_SYSENTER_CS、IA32_SYSENTER_EIP和IA32_SYSENTER_ESP直接跳转到Ring0级别,如果不在Ring0级别执行SYSEXIT指令,则会抛出异常。
因此,如果VMM只能以Trap-And-Emulate模式处理这两条指令,那么整体性能将会明显下降。
转发虚拟中断和异常。
主机处理器的所有外部中断和异常都被VMM直接拦截。
VMM 创建必要的虚拟中断和异常,然后将它们转发给 GuestOS。
VMM 需要对硬件和操作系统的中断和异常处理的完整流程进行建模。
例如,VMM首先要向当前的GuestOS内核堆栈传递一些信息,然后找到对应的GuestOS处理例程的地址并跳转到那里。
。
VMM必须清楚地了解不同客户操作系统的内部工作流程,这增加了VMM实现的复杂性。
同时,GuestOS往往可以屏蔽中断并允许中断。
这两个操作访问EFLAGS特权寄存器,必须由VMM模拟,因此性能会受到影响。
当GuestOS重新启用中断时,VMM需要及时意识到这种情况并重定向累积的虚拟中断。
GuestOS 频繁访问特权资源。
GuestOS每次访问特权资源都会引发处理器异常,然后由VMM模拟并执行。
如果访问过于频繁,系统整体性能将会显着降低。
例如,要屏蔽和启用中断,cli(ClearInterrupts)指令需要 Pentium4 处理器的 60 个时钟周期。
又如:处理器的本地高级可编程中断处理程序(LocalAPIC)具有操作系统可修改的任务优先级寄存器(Task-PriorityRegister)重定向具有最低 TPR 值(预期处理器执行)的处理器的外部中断。
低优先级线程),从而优化中断处理。
TPR是一个特权寄存器,经常被一些操作系统设置(Linux内核在初始化时将每个处理器的TPR设置为相同的值)。
软件VMM面临的上述问题本质上是由于GuestOS无法以预期的最高权限运行。
传统的Trap-And-Emulate处理方法虽然主要以透明的方式解决了上述问题,但却导致了严重的后果和性能的提升。
降解。
当前更先进的虚拟化软件结合了二进制翻译和半虚拟化技术。
主要思想是动态或静态地改变GuestOS在访问特权状态时的行为,最大限度地减少不必要的硬件异常并简化虚拟机设计M。
------------------ ---- ---------------------------------------- ------------------ ---- ------------返回顶部 Intel-VT 硬件虚拟化技术详解。
2005年冬季,英特尔针对桌面计算机及相关处理器产品推出了业界首个基于硬件的虚拟化技术Intel-VT,开创了IA架构虚拟化技术应用的新时代。
支持虚拟化技术的处理器具有专门优化的指令集,可以自动管理虚拟化过程,大大简化VMM开发并显着提高VMM性能。
IA-32处理器虚拟化技术称为VT-x,Itanium处理器虚拟化技术称为VT-i。
AMD还发布了自己的虚拟化解决方案AMD-V。
Intel-VT和AMD-V虽然不完全相同,但基本思想和数据结构是相似的。
本文仅讨论 Intel-VT-x 技术。
两种新的操作模式 VT-x 为 IA32 处理器添加了两种操作模式:VMXroot 模式和 VMXnon-root 模式。
VMM本身运行在VMXroot操作模式下,而GuestOS则使用VMXnon-root操作模式。
两种操作模式支持四个权限级别Ring0~Ring3,因此VMM和GuestOS都可以自由选择所需的操作级别。
这两种工作模式可以相互转换。
通过显式调用 VMLAUNCH 或 VMRESUME 语句,将在 VMX 根模式下运行的 VMM 切换到非根模式。
硬件自动加载 GuestOS 上下文,以便来宾操作系统启动。
当GuestOS运行时检测到需要VMM处理的事件,如外部中断或缺页异常,或者主动调用VMCALL语句调用VMM服务时(类似系统调用),硬件会自动挂起GuestOS,切换到VMXroot操作模式,然后恢复。
当 VMM 运行时,此转换称为 VMexit。
VMX 根模式下的软件行为与非 VT-x 处理器上的行为基本相同,但在 VMX 非根模式下则有很大不同。
主要区别在于执行某些指令或发生某些事件。
这个时候VMexit就发生了。
VMM和GuestOS共享底层处理器资源,因此硬件需要一块物理内存区域来自动保存或恢复彼此的执行上下文。
该区域称为虚拟机控制单元(VMCS),包括GuestStateArea、HostStateArea和Execution Control Area。
在VMentry期间,硬件自动从客户状态区域加载GuestOS上下文。
无需保存 VMM 上下文。
原因与中断处理程序类似,因为如果VMM开始工作,那么Guest OS就不会干扰它。
只有当VMM完全处理完该工作后才可以切换到该工作。
GuestOS 本身。
下一次VMM启动必须处理新的事件,因此每次VMMentry时,VMM从VMexit时的通用事件处理函数开始执行,硬件自动将GuestOS上下文存储在guest状态区域中,从主机状态开始。
地址; VMM 通用事件处理功能被加载到该区域并且VMM开始执行。
执行控制区存储可以控制VMentry和输出的标志位,例如标记哪些事件可以触发VMexit、什么类型的中断准备好在VMentry期间自动“插入”GuestOS等。
主机状态区应包含一些物理寄存器的信息,例如控制寄存器 CR0、CR3、CR4 和 EIP(如果处理器支持 64 位扩展,则为 RSP、RIP) CS、SS、DS); 、ES、FS、GS等段寄存器及其描述元素; 寄存器 TR、GDTR、IDTR; MSR 寄存器,如 IA32_SYSENTER_CS、IA32_SYSENTER_ESP、IA32_SYSENTER_EIP 和 IA32_PERF_GLOBAL_CTRL。
访客状态区不包括通用寄存器的。
VMM在VMexit期间决定是否保存它们,从而提高系统性能。
来宾状态区域还包括非物理寄存器的。
例如,32位ActiveState值表示GuestOS运行时处理器的活动状态。
如果指令正常执行,则处于激活状态。
三重故障(TripleFault)或其他严重错误处于Shutdown状态等。
前面提到,执行控制区用于存放可以控制VMentry和VMexit的标志位,包括: 外部中断:用于设置外部中断是否触发VMexit ,而不是 GuestOS 是否屏蔽中断。
Interrupt-windowexiting:如果设置,VMexit 将在 GuestOS 取消屏蔽中断时运行。
UseTPRshadow:通过 CR8 访问 TaskPriorityRegister (TPR) 时,在 VMCS 中使用影子 TPR 以避免运行 VMexit。
同时,执行控制区域还具有TPR阈值设置。
只有当GuestOS设置的TR值小于阈值时才会触发VMexit。
CRmasksandshadows:每个控制寄存器的每个位都有一个相应的掩码,它决定了Guest OS是否可以直接写入相应的位或运行VMexit。
同时,VMCS 使能影子控制寄存器。
当GuestOS读取控制寄存器时,硬件将影子控制寄存器的值返回给GuestOS。
VMCS 还包括一组位图以提供更好的适应性: Exceptionbitmap:选择 VMexit 可以触发哪些异常,I/Obitmap:访问 VMexit 触发哪些 16 位 I/O 端口。
MSR 位图:与控制寄存器掩码类似,每个 MSR 寄存器都有一组“读”位图掩码和“写”位图掩码。
每次发生 VM 退出时,硬件都会自动在 VMCS 中存储大量信息,以帮助 VMM 确定事件的类型和原因。
在VMentry期间,VMM可以轻松地将事件(中断和异常)注入GuestOS,因为GuestOS中断描述表(IDT)的地址存储在VMCS中,因此硬件可以自动调用GuestOS处理程序。
欲了解更多信息,请参阅英特尔设计指南[5]。
解决纯软件虚拟化技术面临的挑战。
首先,随着新操作模式的引入,VMM和GuestOS的执行在硬件中自动隔离。
任何关键事件都可以自动将系统的控制权转移给VMM,因此VMM可以完全控制一切。
系统资源。
其次,GuestOS可以运行在最高的预期权限级别,因此解决了权限级别压缩和权限级别名称的问题,并且GuestOS中的系统调用不会触发VMexit。
硬件使用物理地址来访问虚拟机控制单元(VMCS),VMCS维护了VMM和GuestOS对应的IDTR和CR3寄存器,因此VMM可以拥有独立的地址空间,GuestOS可以完全控制其自己的地址空间。
空间压缩问题不再存在。
虚拟化中断和异常的问题也得到了很好的解决。
VMM只需要设置需要重定向的虚拟中断或异常即可。
在VMentry期间,硬件自动调用GuestOS中断和异常处理程序,大大简化了VMM开发。
同时,GuestOS可以在不调用VMexit的情况下屏蔽和取消中断,从而提高性能。
此外,VMM还可以配置为在GuestOS取消屏蔽中断时运行VMexit,以便它能够及时转发累积的虚拟中断和异常。
-------------------------------------------------- ----------------------------------返回顶部 在虚拟化技术未来的发展中,我们将会看到硬件虚拟化技术的支持必然成为未来的方向。
Intel-VT仍处于处理器级虚拟化技术发展的早期阶段,需要在以下几个方面进行发展: 提高运行模式之间的转换速度。
两种操作模式之间的转换非常频繁,如果不能有效降低转换率,即使充分利用硬件特性,虚拟机的整体性能也会显着降低。
早期支持硬件虚拟化技术的Pentium4处理器需要2409个时钟周期来处理VMentry,需要508个时钟周期来处理页面错误异常引起的VMexit,这是相当昂贵的。
得益于英特尔技术的不断改进,新酷睿架构上的响应时间已分别降低至937和446个时钟周期。
未来,OEM厂商需要进一步提高模式转换的速度,并提供更多的硬件功能来减少不必要的转换次数。
优化翻译备份缓冲区 (TLB) 的性能。
每次VMentry和VMexit发生时,TLB(TranslationLookasideBuffer)都会被完全清除,因为CR3寄存器需要重新加载。
虚拟化系统中的模式转换非常频繁,因此系统整体性能显着下降。
一种可能的解决方案是为VMM和每个VM分配一个全局唯一的ID,并将ID信息附加到每个TLB条目以索引线性地址转换。
为内存管理单元 (MMU) 虚拟化提供硬件支持。
即使采用 Intel-VT 技术,VMM 仍然必须使用旧方法来处理 GuestOS 中发生的页面错误,通常除了将 guest OS 的物理地址转换为物理地址之外。
主机地址,主要原因是VMM完全控制主机的物理内存,因此GuestOS中的线性地址转换包括VMM和GuestOS两者的地址空间。
,且设备只能看到其中之一。
Intel和AMD提出了自己的解决方案,分别称为EPT(ExtendedPageTable)和NestedPaging。
这两种技术的基本思想是,每当遇到Guest的物理地址时,硬件会自动查找VMM提供的关于Guest OS的页表,将其转换为主机的物理地址,或者生成页错误异常运行。
虚拟机输出。
支持高效的I/O虚拟化。
虚拟化 I/O 时,需要考虑性能、可用性、可扩展性、可靠性和成本等各种因素。
最简单的方法是将 VMM 建模为虚拟机的共享 I/O 设备。
设备功能由VMM通过软件或复用主机I/O设备来实现。
例如,VirtualPC 虚拟机配备了较旧的 S3Trio64 显卡。
这种方法提高了兼容性,可以充分利用GuestOS自带的设备驱动程序,但虚拟I/O设备功能有限,性能较差。
为了提高性能,VMM 可以直接将主机 I/O 设备分配给虚拟机,这会产生两个主要问题: 1. 如果多个虚拟机可以重用同一设备,VMM 必须确保它们访问该设备的一致性。
会互相干扰。
2、如果GuestOS使用DMA访问I/O设备,由于GuestOS指定的地址不是主机的物理地址,VMM必须确保在开始DMA操作之前地址被正确转换。
Intel和AMD提出了自己的解决方案,分别称为DirectI/O(VT-d)和IOMMU,希望用硬件来解决这些问题,降低VMM实现的复杂度。