嵌套虚拟化

    技术2024-06-29  70

    十年前,当首次引入“云”主题时,重点是公共基础架构中的简单服务。 但是,正如技术中的典型特征一样,这些服务随其使用模型一起发展。 同样,在商用硬件上引入虚拟化也着眼于最简单的使用模型,但是随着对潜力的更好地理解,它逐渐发展。

    随着硬件提供商看到虚拟化和云的增长,他们还发展了其产品以更有效地满足需求。 早期的x86处理器不是虚拟化的理想选择,但是处理器内部却将重点放在这些新的使用模型上,并为平台虚拟化创建了更有效的环境。

    让我们从简短介绍云体系结构及其带来的一些限制开始。

    公共云架构

    公共云或可公开获得的虚拟化基础架构专注于虚拟机管理程序为多租户使用而分配的虚拟服务器的简单分配。 系统管理程序充当多路复用器,使物理平台可在多个用户之间共享。 虚拟机管理程序有多种产品,从内核虚拟机(KVM)到Xen虚拟机管理程序等等。

    完全虚拟化与半虚拟化

    存在多种形式的管理程序,从透明的完整虚拟化管理程序到半透明的准虚拟化管理程序。 尽管关于最佳方法的争论仍在继续,但有趣的是,大多数虚拟机管理程序通过添加来宾工具来支持半虚拟化。 来宾工具安装在来宾操作系统中,以提高其I / O操作的效率。 因此,这种区分变得不那么重要了,因为大多数管理程序将提供两种类型的功能。

    虚拟化基础架构中存在的一个限制是它们对给定虚拟环境的依赖性。 例如,Amazon Elastic Compute Cloud(Amazon EC2)依靠Xen虚拟化。 Amazon EC2期望其基础架构内运行的所有guest 虚拟机都将以一种称为Amazon Machine Image (AMI)格式的特定方式打包。 AMI是Amazon EC2内部署的基本单位,可以是许多预配置的类型之一(基于操作系统和应用程序集),也可以是自定义创建的类型,需要额外的努力。

    这种虚拟机(VM)格式(由元数据和虚拟磁盘格式组成)可能成为云用户的障碍。 这种格式以及对目标系统管理程序选择的依赖阻碍了将VM从私有基础架构迁移到公共基础架构或在公共云基础架构之间迁移的能力。

    因此,对嵌套虚拟化的支持为云用户创建了新的抽象。 如果云支持在另一个虚拟机监控程序之上虚拟化虚拟机监控程序的功能,则VM格式将与云无关。 唯一的依赖关系是访客虚拟机管理程序本身的格式。 这一变化将第一代云从一种千篇一律的主张发展为高度灵活的虚拟化基础架构,为其用户提供了更大的自由度。 图1展示了虚拟机管理程序(不仅仅是VM)在虚拟平台环境中的新抽象。 请注意,在此图中,虚拟化级别的术语是:L0代表裸机虚拟机管理程序,L1代表客户虚拟机管理程序,L2代表客户虚拟机。

    图1.传统管理程序与嵌​​套管理程序的简单说明

    此更改不仅可以为新基础架构打包VM,还可以为其虚拟机管理程序打包VM集,从而简化了私有云基础架构用户将功能(静态或动态)迁移到公共云基础架构的能力。 此更改如图2所示,其中将专用虚拟机管理程序转换为嵌套云中的来宾虚拟机管理程序。

    图2.嵌套云中的访客管理程序和主机管理程序

    下一代云:引入嵌套虚拟化

    嵌套虚拟化不是一个新概念,而是已经在IBM®z /VM®虚拟机管理程序中实现了一段时间的概念。 IBM Systemz®操作系统本身就是一个虚拟机管理程序,它不仅可以虚拟化处理器和内存,还可以虚拟化存储,网络硬件协助和其他资源。 z / VM虚拟机管理程序代表了具有硬件辅助性能的实用嵌套虚拟化的第一个实现。 此外,z / VM虚拟机管理程序支持VM的任何嵌套深度(当然还有额外的开销)。 最近,基于该技术不断增长的使用模型,x86平台已朝着虚拟化辅助的方向发展。

    KVM是第一个用于实现嵌套虚拟化的商品硬件虚拟机管理程序。 KVM的这种添加是在IBM的Turtles项目下执行的,并允许多个未修改的虚拟机管理程序在KVM之上运行(它本身是虚拟机管理程序,是Linux®内核的一项调整)。 Turtles项目的部分动机是希望以IBM为IBM Systemp®和System z操作系统开创的方式使用商品硬件。 在此模型中,服务器运行嵌入式管理程序,并允许用户在其之上运行自己选择的管理程序。 该功能已引起虚拟化社区的关注,因为这些功能(对KVM的修改)现已成为主流Linux内核的一部分。

    嵌套虚拟化的架构

    嵌套虚拟化带来了一些以前从未见过的独特问题。 让我们探讨其中的一些问题,以及如何在KVM中解决它们。

    处理器虚拟化

    当前处理器体系结构中虚拟化支持的一个缺点是集中在双层虚拟化(VM堆叠在单个虚拟机管理程序上)上。 Turtles通过简单的复用过程扩展了这种支持。 回顾图1 ,存在三个级别(L0作为主机管理程序,L1作为来宾管理程序,L2作为来宾VM)。 在当今的处理器中,L0和L1得到了有效处理,但是L2却失去了效率。 Turtles在L1处复用实体,而不是维持严格的堆叠,并且实质上允许主机管理程序在L1处复用来宾管理程序和来宾VM。 因此,不是虚拟化虚拟化指令,而是有效地使用处理器中可用的硬件辅助来支持三层(请参见图3 )。

    图3.在主机(L0)管理程序上多路复用来宾

    但是,利用处理器的虚拟化资产并不是唯一的障碍。 让我们探讨一下KVM中的其他一些问题及其解决方案。

    嵌套虚拟化在该领域引入了一些有趣的问题。 请注意,传统的虚拟化部分解决了指令集,直接在处理器上执行某些指令,并通过陷阱模拟其他指令。 在嵌套虚拟化中,引入了另一个级别,在该级别上,某些指令继续直接在硬件上执行,而其他指令则被捕获但在一个或多个层中进行管理(具有在各层之间转换的开销)。

    Turtles项目发现,这种设置暴露了虚拟化处理器实现中的优缺点。 这样的领域之一是VM控制结构(VMCS)的管理。 在Intel的实现中,读写这些结构涉及特权指令,这些指令要求在嵌套堆栈的各个层上有多个出口和入口。 这些过渡会引入开销,表示为性能损失。 AMD的实现通过常规的内存读写来管理VMCS,这意味着,当访客虚拟机管理程序(L1)修改访客虚拟机的VMCS(L2)时,不需要主机虚拟机管理程序(L0)进行干预。

    在没有处理器支持嵌套的情况下,Turtles的多路复用方法还可以最大程度地减少层之间的转换。 虚拟化的过渡通过进入或退出VM( VMexit和VMentry )的特殊指令来进行,而且成本很高。 某些退出要求使用L1虚拟机管理程序,但其他条件(例如外部中断)仅由L0处理。 最小化从L2到L0到L1的某些过渡可以改善性能。

    MMU和内存虚拟化

    在现代处理器中使用页表辅助之前,系统管理程序会模拟内存管理单元(MMU)的行为。 访客虚拟机创建了访客页面表,以支持将访客虚拟地址转换为访客物理地址。 系统管理程序维护了影子页表,以将来宾物理地址转换为主机物理地址。 所有这些都需要捕获对页表的更改,以便管理程序可以管理CPU中的物理表。

    英特尔和AMD通过添加二维页表 (Intel称为扩展页表 (EPT)和AMD的嵌套页表 (NPT))解决了此问题。 这些辅助功能允许辅助页表将来宾物理地址转换为主机物理地址(而传统页表继续支持来宾从虚拟机到客户的物理转换)。

    Turtles项目引入了三种模型来处理嵌套。 最有效的方法是在影子页表的顶部使用影子页表。 仅当访客和主机管理程序都维护影子表的地方没有硬件协助时,才使用此选项。 第二种方法在L0管理的二维页表上使用影子表。 尽管效率更高,但来宾VM中的页面错误会导致多个L1出口和开销。 最终方法虚拟化了L1虚拟机管理程序的二维页表。 通过模拟L1中的辅助页表(L0使用物理EPT / NPT),L1出口更少,开销也更少。 Turtles项目的这项创新被称为多维分页。

    I / O设备虚拟化

    虚拟化I / O设备可能是虚拟化最昂贵的方面之一。 仿真(由QEMU提供)是最昂贵的,其中半虚拟化(使来宾意识并与虚拟机管理程序协调I / O)之类的方法可以提高整体性能。 最有效的方案使用诸如AMD I / O MMU(IOMMU)之类的硬件辅助工具,将来宾物理地址透明转换为主机物理地址(用于直接内存访问[DMA]之类的操作)。

    Turtles项目通过使L2来宾直接访问L0可用的物理设备来提高性能。 L0主机管理程序模拟L1来宾管理程序的IOMMU。 这种方法最大程度地减少了访客退出,从而减少了开销并提高了性能。

    嵌套的性能

    根据使用模型,在KVM中进行嵌套发现的开销可以忽略不计。 导致VM退出的工作负载(例如外部中断处理)通常是最严重的违规行为,但是KVM内的优化导致6%到14%的开销。 考虑到嵌套虚拟化提供的新功能,这种开销当然是合理的。 处理器体系结构的进步可能会进一步改善这一点。

    在哪里可以找到嵌套虚拟化?

    如今,许多管理程序都支持嵌套虚拟化,尽管效率不尽如人意。 Linux KVM支持在最近启用虚拟化的处理器上嵌套。 Xen虚拟机管理程序也已进行了修改,以支持嵌套虚拟化,因此开放源代码社区已Swift采取行动,以采用此功能及其潜在的使用模型。

    从生产的角度来看,可以肯定地说此功能处于开发的早期阶段。 此外,通过嵌套扩展虚拟化意味着要在物理主机上增加负载,因此应使用处理器能力更高的服务器。

    还要注意,可以在其他上下文中执行嵌套虚拟化。 在最近的OpenStack文章中,使用VirtualBox作为主机管理程序并使用QEMU(提供仿真)作为来宾演示了嵌套。 尽管不是最有效的配置,但本文演示了在较适度的硬件上的基本功能。 请参阅相关主题的更多细节。

    其他应用

    虚拟机管理程序作为台式机或服务器上固件的标准部分,将来可能会很普遍。 此使用模型暗示嵌入式管理程序可以支持操作系统(作为VM)或用户选择的另一个管理程序。

    虚拟机管理程序的用户以这种方式还支持新的安全模型(因为虚拟机管理程序位于用户和黑客的代码下面)。 此概念最初用于邪恶目的。 “ Blue Pill” rootkit是Joanna Rutkowska的一项利用,它在操作系统的运行实例下插入了一个瘦管理程序。 Rutkowska还开发了一种称为“ 红色药丸”的技术,该技术可用于检测何时在运行的操作系统下插入“蓝色药丸”。

    更进一步

    Turtles项目证明,使用KVM虚拟机管理程序作为测试平台,虚拟机管理程序的嵌套虚拟化不仅可能而且在许多条件下都是有效的。 KVM的工作仍在继续,现在它已成为在管理程序中实现嵌套的模型,支持同时执行多个来宾管理程序。 随着处理器体系结构满足这些新要求,嵌套虚拟化可能会成为将来的通用使用模型,不仅在下一代云产品的企业服务器中,而且在商用服务器和台式机中也是如此。


    翻译自: https://www.ibm.com/developerworks/cloud/library/cl-nestedvirtualization/index.html

    Processed: 0.015, SQL: 9