白皮书(2010)

虚拟化平台就在你身边

ARM® 架构虚拟化扩展,以及 SMMU 对虚拟化等解决方案的重要性

Roberto Mijat

软件解决方案架构师

Andy Nightingale

产品经理 – ARM 处理器部门

摘要

PC 和服务器市场中的虚拟化已在过去几十年中提供了可衡量的收益,高级虚拟化服务器系统现已达到 60% 或以上的设备利用率,对应的 ROI 达到 769%[1]

移动和嵌入式领域中的虚拟化可以类似地让硬件能够以更小的内存[2]和更少的芯片运行,降低 BOM[3]成本,进一步提高能效[4]。虚拟化也有助于解决安全和防护难题,减少数年软件开发和移植成本。

ARM 的许多领先硅晶片合作伙伴和 OEM 厂商的硬件与软件设计团队已计划在其 2011 年设计开端中引入虚拟化支持 - 你呢?

经济实惠地实现高效的虚拟化系统需要硬件支持。特别对内存管理而言,将会面对巨大挑战并对系统可靠性和性能造成严重影响。为了解决这一问题,ARM 推出了 ARM v7 架构虚拟化扩展,以及系统内存管理单元 (SMMU) 架构。本白皮书阐述其背后的原理,探讨 SMMU如何能在秉持 ARM 低功耗、高性能设计特质的同时大幅降低软件成本和复杂性。

简介

每一代新型消费者设备必须满足最终用户的诸多期望,包括更高的能源使用效能、更丰富的应用程序和多媒体、更快速的性能,以及整体的安全用户体验。想象这样的一个世界:2013 年嵌入式和移动平台没有准备好硬件虚拟化:

新闻标题:“汽车制造商计划在全球召回 370 万辆汽车:发言人表示,‘最近的汽车引擎管理故障原因归结为出厂原装娱乐系统中存在软件错误,此类错误已被确定为能够造成故障,进而影响关键的控制系统。’”

新闻标题:“消费者对互联网电视怨声载道:黑客利用集成式 Web 浏览软件中的安全漏洞进行攻击,导致数千人丧失对其数字电视的控制。”

博客网站帖文:“公司刚刚更换了我的移动电话,大部分我最爱的应用程序它都不支持。他们还告诉我,我不能在公司设备上混用我的个人通讯录、日历和电子邮件,因为存在安全隐患…”

系统复杂性提升的另一负面影响体现在软件成本和开销不断攀升,目前已占新型 32nm 和
28nm 设计成本的 50%[5]。虚拟化技术正被用于解决这一问题,以及上述其它问题案例。虚拟化也能够促进更加高效地利用硬件,通过整合新型和旧式设计降低软件移植开销,还能实现 IP 隔离,提高安全性和可靠性。这些优点形成了一种隐性担保,即虚拟化将发挥重要的作用,消费型产品的许多 OEM 和半导体供应商将基于未来 SoC 设计选择虚拟化作为底层技术。

嵌入式虚拟化的崛起

虚拟化已被证明为一种实现计算资源抽象化(或虚拟化)的可靠技术。一个相对较小的控制程序被放在操作系统和硬件之间,称为Virtual Machine Monitor (VMM)或虚拟机监控程序。通常,VMM 以特权模式执行,将一或多个操作系统 – 客户机操作系统 – 托管在一个称为虚拟机的沙盒[6]中:底层硬件的受控结构。每个客户机操作系统在运行时都假想其正在独占访问处理器、外设、内存和 I/O。VMM按照与传统操作系统并发执行用户进程的相似方式,仲裁对所有共享资源的访问。

服务器市场中的虚拟化

数十年来,虚拟化在企业和家庭娱乐领域中对改善效率和降低成本发挥了重要作用。在原本利用不足的硬件资源上同时运行多个操作系统,实现了服务器的整合(提高对一台计算机的利用效率)和聚合(提高对多台计算机的利用效率)。IBM 于二十世纪六十年代率先开始提高昂贵的大型机工作站的利用效率,将它们从逻辑上划分为不同虚拟机,以使多应用程序的多任务处理成为可能。IT 部门在二十世纪八九十年代遭遇了相似的窘境,虚拟化最终应用到 x86 架构上,以便解决诸如维护和管理开销巨大、基础结构成本高昂,以及故障和灾难保护不足等问题。服务器虚拟化技术的重要特性(例如能够在出现错误或故障时实时迁移整个执行环境)造就了更加稳健而可靠的系统解决方案。安全沙盒化不信任的软件让系统工程师能够高效应对最苛刻的安全或法务设计顾虑。大量旧式软件固有的移植性相关成本得到了大幅削减。不存在的硬件可以被模拟。虚拟化促进了新硬件的快速迁移,让开发人员专注于差异化特性和功能的开发上。IDC预测,到
2011 年虚拟化技将统领 117 亿美元的庞大市场,这也就不足为奇了[7]。

对上述应用和优点的诉求促使各大技术提供商将虚拟化技术运用到移动和嵌入式设备[8]。摩托罗拉、英特尔和德州仪器最近联合思科系统公司,成为 VirtualLogix 的资助商。移动软件管理解决方案市场领导者 Red Bend Software看到这一全新市场中的巨大商机,于 2010年收购了 VirtualLogix。2008 年末 VMware 收购了 TRANGO Virtual Processors,后者随后宣布推出其移动虚拟化平台 (MVP)[9]。2009 年,第一款全面虚拟化的手机 Motorola Evoke™ QA4[10]

面市, 2010年 Motorola ATRIX™ 4G[11] 双核超级手机问世。Open Kernel Labs 的技术目前已装备到10 亿多台设备中[12]。Wind River Systems 和 Green Hills Software 等著名嵌入式操作系统提供商也加大了在嵌入式虚拟机监控程序产品中的投入。这一确凿的证据表明嵌入式虚拟化即将获得群聚效应。

 

移动领域中令人兴奋的新机遇

 

虚拟化技术对各式各样的移动应用都有很高价值

 

在移动设备上,可以整合基带处理器和应用处理器,以便减少 BOM 并缩短设计与集成周期。可惜的是,高级操作系统不能很好地应付基带处理器上常见的传统通信软件堆栈的实时必要性。基于该原因,最好要保留实时执行环境。可将其托管在虚拟机上,移植开销很小甚至为零,而且能够在应用处理器上透明而并发地执行。


arm pve 开启虚拟化 arm 虚拟化平台_解决方案

图 1 – 使用 Open Kernel Labs 的 OKL4 Microvisor 解决方案的示例

 

VMM 可以配置为确保满足实时要求
 

许多移动用户拥有一部个人手机和一部工作用手机。这可能是出于喜好或便捷,但更常见的是由于公司 IT 部门的限制。借助移动虚拟化,可以在同一部手机上托管两个(或多个)操作系统,同时解决安全限制和保障公司网络完整性的限制,还能将开源操作系统的IP(例如 Google Android)和专利产品(如 Windows Mobile)隔离开来。

用户通常受移动网络运营商 (MNO) 最小合约义务到期和新机型上市的驱动,每隔 18 个月更换一次手机。事实上,有时候升级手机是使用最新消费技术的唯一途径:例如,可能需要更为强大的图形加速器才能玩最新的 3D 游戏,或者需要更新的调制解调器、多媒体处理器和更大的屏幕才能很好地实现联网高清视频体验。由于从一家私有应用程序商店服务商购买了许多应用程序,许多人希望将它们迁移到新设备上,但目前不可能。并且一些应用程序可能不在另一手机/运营商产品服务中提供。使用移动虚拟化时,可以在选用的手机上支持所有需要的非本机运行环境,并在任何操作系统上运行非本机应用程序。此外,网络运营商、手机 OEM 厂商和半导体供应商可以跨越多个硬件平台部署一个软件堆栈,软件程序员也不必为每个操作系统或平台移植应用程序。


arm pve 开启虚拟化 arm 虚拟化平台_物理内存_02

图 2 – 使用 VMWare MVP 的移动虚拟化应用程序的示例

虚拟化的硬件支持

现代计算机架构提供多个运行模式,各自在系统的硬件资源、可配置性和特殊指令执行方面具有不同的授权(或权限)级别。ARM 架构通常区分用户模式和超级管理员模式[13]。x86 架构提供四种所谓的 Ring:Ring-0,到较高权限模式,再到权限最低的 Ring-3。

操作系统通常设计为在本机硬件上运行。操作系统希望在权限最高的模式(超级管理员模式,或 Ring-0)中执行,并且完全掌控整个系统。在虚拟化环境中,VMM 在特权模式中运行,而操作系统则在较低权限级别(如用户模式或 Ring-3)上执行。

在引导时,典型的操作系统将尝试配置处理器、内存、I/O 设备和外设。在执行时,它将期望独占访问此类设备,包括动态更改外设的配置、直接管理中断控制器,更换 MMU 页表条目 (PTE),以及发起 DMA 传输等。有一个关键问题与之相关:在虚拟机中以无特权模式运行时,客户机操作系统将无法执行必要的特权指令来直接配置和驱动硬件[14]。VMM 必须处理这一任务。此外,VMM 可能会托管多个客户机操作系统,因此直接修改共享设备和内存需要谨慎的仲裁方案。

全虚拟化和半虚拟化

为解决这一问题,系统所需要的抽象化程度,以及固有的软件复杂性和性能开销会根据架构、硬件和客户机操作系统而有不同。主要方式可以宽泛地分为两类:全虚拟化和半虚拟化[15]。

全虚拟化时,客户机操作系统不知道正在被虚拟化,它也不需要任何修改。VMM 捕获并处理所有特权和敏感指令序列,而用户级别的指令则不经修改直接以本机速度执行(假设 ISA 兼容性 - 否则需要通过二进制转译来模拟)。全虚拟化为虚拟机提供最佳的隔离和安全性,而且简化了迁移和移植,因为同一客户机操作系统实例能以虚拟化方式或在本机硬件上运行。取舍在于 VMM 的性能和复杂性。全虚拟化的案例包括 Green Hills Software 的 INTEGRITY® OS Secure Virtualization (ISV) 解决方案。


arm pve 开启虚拟化 arm 虚拟化平台_物理内存_03

  图 3 -Green Hills Software INTEGRITY Secure Virtualization (ISV) 解决方案

解决此类开销的变通方法为半虚拟化。客户机操作系统经过修改,以通过所谓的超级调用或虚拟机监控程序调用直接访问 VMM。VMM将开放一个特殊的 API,以允许客户机操作系统执行特权和敏感指令序列。这一方式受到了 Xen、WindRiver Hypervisor、VMware 和 Open Kernel Labs 等解决方案的推崇。Open Kernel Labs 提供了一款虚拟机监控程序 (OKL4 Microvisor,以及 Linux、Android™ OS[16]、Symbian OS™[17] 和Windows Mobile™ OS[18] 等热门操作系统的半虚拟化端口。

ARM虚拟化扩展

在理想环境中,二进制转译和半虚拟化都不需要,全虚拟化就能使客户机操作系统接近于本机速度运行。为此,需要硬件的协助,还可能需要对 ISA 的扩展。硬件虚拟化扩展简化了现有的纯软件解决方案,减少并且在一定程度上消除了捕获和模拟客户机操作系统中执行指令的负担。VMM 随后就能通过在硬件而非软件中使用典型的捕获与模拟模型处理敏感指令,高效地虚拟化整个指令集。Intel®和AMD 开发了硬件辅助 x86 虚拟化的独特实现:分别为 Intel® VT[19] 和 AMD-V™[20]。ARM®正在通过 ARM v7 虚拟化扩展为其架构引入虚拟化支持。

ARM 虚拟化扩展增强了 ARM v7-A 架构,使其支持虚拟化系统的开发。这些扩展的基本元素有:

Ÿ     推出全新的虚拟机监控程序执行模式,优先级比超级管理员模式更高[21]。这将使得 VMM 能够以比客户机操作系统更高的特权运行,而客户机操作系统则以传统的操作系统特权运行,免去了采用半虚拟化技术的必要。

Ÿ     提供协助中断处理的机制,通过本机独特中断来保护监控器、虚拟机、当前活动的客户机操作系统或当前不活动的客户机操作系统的安全。这将大幅降低使用软件模拟技术和 VMM 中影子结构处理中断的复杂性。

Ÿ     提供系统VMM 协助内存管理,支持:多个VMM 兼容主控器的多个转译上下文、两级地址转译,以及硬件加速和抽象化。

        调试功能旨在实现对单个客户机操作系统的调试器访问。

虚拟化系统中的内存管理挑战

在虚拟化系统中,内存管理的课题非常重要,会实质上引发复杂性问题。

大多数操作系统的一大功能是通过支持某种虚拟内存管理阶段,在多个进程之间分配由操作系统控制的物理内存。在各个客户机操作系统在虚拟机中运行的系统中,由客户机操作系统分配的内存不是真正的系统物理内存,而是中间物理内存。VMM 直接控制实际物理内存的分配,由此履行其作为共享物理资源仲裁者的角色。


arm pve 开启虚拟化 arm 虚拟化平台_解决方案_04

     图 4 - 传统和虚拟化系统中的地址转译阶段

有两种方式用于处理地址转译的两个阶段(VA 至 IPA,以及 IPA 至 PA)。在硬件中仅支持一个内存地址空间转译阶段的当前系统中,例如在 CPU 中使用 MMU,虚拟机监控程序必须直接管理 VA、IPA 和 PA 之间的关系。这通常通过虚拟机监控程序维护其自己的转译表(称为影子转译表)来实现,它们是通过解译各个客户机操作系统转译表而派生的。虚拟机监控程序必须确保对客户机操作系统转译表的所有更改都反映到影子结构中,还要实施保护并将访问错误重定向到适当的阶段。需要的机制可能很复杂,而且会增加性能开销。另一种方式是对转译的两个阶段使用硬件辅助,这也是 ARM SMMU 所实现的。

内存分段化

根据 VMM 的实施方式和客户机操作系统的修改程度,中间物理地址 (IPA) 和物理地址 (PA) 内存空间之间存在多种看似合理的关系。借助VMM 管理内存保护,IPA和 PA 可以是平面映射的(免去了转译的必要)或通过常量偏移。这允许各个操作系统拥有一部分连续的物理内  存。在现实中,内存是昂贵的;因此,更为常见的是允许将任何物理内存块(通常为页)独立映射到各个客户机操作系统。这被称为分段化关系。ARM 虚拟化扩展允许 IPA 和 PA 空间之间存在分段化关系。

随着客户机操作系统数量的增加,客户机操作系统 IPA 内存和 PA 内存之间的关系变得复杂。一些系统可能会设想客户机操作系统的运行时创建和销毁,或者物理内存区域可能在多个客户机操作系统之间共享。当使用大块连续物理内存非常重要时,物理内存分段化可能会成为系统中的真正问题。

多个 DMA 兼容主控器

引入新一级地址转译对系统中可能共享同一物理内存介质的其他数据处理器和外设有着重要意义。

通常,外设由操作系统所有并在 PA 空间中编程。同时,具备直接内存访问 (DMA) 功能的所有设备在 PA 空间中生成地址。在虚拟化环境中,这些物理地址实际上是 IPA,因此需要进一步转译。目前,这由 VMM 进行处理,或通过软件模拟,亦或借助直接设备分配技术实现(通过由 VMM 仲裁的客户机操作系统本机访问设备)。各个解决方案都需要设备驱动程序移植,适用于每种客户机操作系统,而且会给 VMM 增加一定的复杂性,造成大量性能开销[22]。

一个重要问题:消费型电子平台是复杂的异构系统,其中共存着各式各样直接访问内存系统的处理器。例如,NVIDIA® 的 Tegra 2™[23]、Texas Instruments®的 OMAP4™ 平台[24]或 ST-Ericsson® 的 U8500™ 平台[25]等典型的移动计算平台中包含多核心 ARM 应用处理器(每个核心集成了 MMU)、OpenGL ES 2® [26] 兼容图形处理单元 (GPU)(集成了自己的 MMU)、数字信号处理 (DSP) 单元、图像信号处理器 (ISP)、电源管理器 (PM) 微控制器,以及直接内存访问控制器 (DMAC)。可以设想,在不远的将来 OpenCL 驱动通用 GPU (GPGPU) 等异构分布式计算模型将变得普遍。除了上文提到的与地址转译过程相关的复杂性和性能开销外,没有一种防故障机制能够阻止 DMA 兼容设备或处理器错误地破坏被另一客户机操作系统利用的物理内存。 


 

保障系统完整性

 

如果系统中存在一台虚拟机专门用于安全或安保关键用途,在为其硬件整合考虑虚拟化时可能会面对另一主要问题:例如,在汽车子系统中,虚拟化要能够实现驾驶相关应用(后视摄像头、自动停车系统)及驾驶员鉴定与较不重要的信息娱乐和舒适系统相关应用(汽车音响主机、前部电子模块和后座娱乐单元等)之间的严格隔离。非关键运行时环境中的故障、错误或攻击不得影响该系统其他部分的安全。

 


arm pve 开启虚拟化 arm 虚拟化平台_物理内存_05

     图 5 – VirtualLogix(现为 RedBend)VLX 虚拟机监控程序用于隔离关键任务

系统 MMU (SMMU)

 

 

为了克服上述所有问题及局限性,ARM架构虚拟化扩展为 ARM 架构推出了系统内存管理单元 (SMMU) 概念。

 

SMMU 是一种硬件设备,旨在为系统中除主 CPU 之外的任何 DMA 兼容代理提供地址转译服务和保护功能。这包括 GPU 和视频引擎等(VE) 硬件加速器、简单 DMA 控制器,以及完整的子系统。SMMU 可以作为独立设备实现,或者和现有的 DMA 兼容处理单元集成。下图提供了 SMMU 在系统中所处位置的一些示例。

 

SMMU设计为在虚拟化系统中使用,其中多个客户机操作系统受 VMM 管理。出于这一目的,支持两个独立的地址转译阶段。第一阶段或阶段 1 实施虚拟地址 (VA) 到中间物理地址 (IPA) 的转译,其设计为供客户机操作系统使用。第二阶段或阶段 2 将中间物理地址 (IPA) 转译为物理地址 (PA),为 VMM 带来一系列好处。SMMU的属性和优点也可扩展到非虚拟化系统。

 

系统设计师可以选择为各个 SMMU 实施第一或第二阶段地址转译。例如,SMMU 可以放置在尚未配备 MMU 的 DMA 兼容设备的前方,配置为提供阶段 1 转译,以便使此设备能够将片段物理内存视为连续。SMMU 也可以配置为仅提供阶段 2 转译,例如,使已配有 MMU的设备能够受系统虚拟机管理程序管理。


arm pve 开启虚拟化 arm 虚拟化平台_解决方案_06

     图 6 - 系统中系统内存管理单元 (SMMU) 所处位置的示例。连贯性互联可确保主控器之间的缓存连贯性

 

阶段 1 SMMU 转译

 

阶段 1 转译意在为操作系统提供协助,无论是本机运行还是在 VM 中运行。SMMU提供了多种益处并解决了与实施昂贵的软件替代方法相关的多个问题 - 如本白皮书前文中所述。

 

阶段 1 转译的工作原理与传统的 CPU MMU 相似。下图总结了阶段 1 地址转译的应用和功能。


arm pve 开启虚拟化 arm 虚拟化平台_虚拟化_07

      图 7 - 阶段 1 地址转译的应用和功能

 

操作系统一如既往地为内核和应用程序不断地在堆上分配和释放空间,从而造成许多物理内存分段。在 IPA 和 PA 空间之间实施分段化模型的系统中,如果多个客户机操作系统共享同一物理介质,它会因此而遭遇更多问题。典型的消费型设备中托管着本质上需要大量连续内存才能高效运作的应用程序。例如,数码相机需要大空间来快速转储刚刚拍摄的照片;智能手机设备可能需要播放一些视频内容,因此需要一个大型工作缓冲区供视频解码器使用。由于物理内存分段化,常常会存在没有大块连续物理内存用于动态分配的情况。典型的解决方案是预分配此类缓冲区。这非常低效,因为缓冲区仅在运行时才需要,为此目的预留额外的物理内存(而且不供普通操作系统活动使用)会直接造成物料清单 (BOM) 的增加。此外,在虚拟化的配置中,这种解决方案需要直接修改 VMM。

 


arm pve 开启虚拟化 arm 虚拟化平台_arm pve 开启虚拟化_08

      图 8 – 使用 SMMU 消除回弹缓冲区

 

当 DMA 兼容设备需要在分段化物理内存上运行时,典型的解决方案是采用 DMA 分散与收集等软件技术。这存在复杂性和性能开销。使用 SMMU 时,这种开销可以通过实现更高级别的地址转译加以避免,即物理地址空间中的小块内存(最小为 4kb 粒度)可以虚拟地聚集起来,在虚拟地址空间中显现连续的内存块(如果用于非虚拟化模型),或者从中间物理地址空间聚集到虚拟地址空间(如果用于虚拟化模型)[27]。

 

此外还出现了另一大问题,即系统中的一些设备无法访问可由 CPU 使用的完整范围的内存,例如 32 位架构中的 16 或 24 位设备,或 64位架构中的 32 位设备。传统的解决方案是在低位地址上提供中间内存区域,充当桥接器。这称为回弹缓冲区。操作系统在对设备可见的地址空间中分配页面,再将它们用作与之往来的 DMA 缓冲区页面。在 I/O 完成时,这些页面的内容就被内核复制到其在 I/O 设备可寻址范围之外的目的地。这一操作存在大量开销,因为它至少涉及复制完整的页面。使用 SMMU 可以彻底避免回弹缓冲区。阶段 1 转译可以让任何 DMA 代理访问系统中的任何地址,而且没有与总线宽度相关的限制[28]。

 

阶段 2 SMMU 转译

 

阶段2 转译旨在让虚拟机监控器受益。下图总结了阶段 2 地址转译的应用和功能。


arm pve 开启虚拟化 arm 虚拟化平台_解决方案_09

     图 9 - 阶段 2 地址转译的应用和功能

为阶段2 转译添加 SMMU 设备可以免去虚拟机管理程序完全在软件中管理影子转译表的必要。硬件辅助的地址空间转译具有明显的性能优势。

 

使用阶段2 地址转译时,SMMU可以使任何客户机操作系统直接配置系统中的所有 DMA 兼容设备,同时在 IPA 层面上与它们共享相同的地址空间。

 

SMMU 也可配置为确保防止代表一个客户机操作系统运行的设备损坏另一客户机操作系统的内存。

 

阶段2 地址转译系统基于具有 64 位描述符的转译方案,因而能够处理大于 4GB 的物理内存。

 

在两个地址转译阶段之间提供硬件区隔能够在客户机操作系统(阶段 1)和 VMM(阶段 2)之间清晰地定义不同阶段的所有权。转译错误因而能由硬件路由到适当级别的软件,让管理功能(TLB 管理、MMU使能、寄存器配置)能够在转译过程的适当阶段予以处理。这可以大幅减少进入 VMM 的项目数,进而提高性能。

 

 

结论

本白皮书仅仅以虚拟化目前在服务器市场取得的成功为基础,阐述了虚拟化在移动和嵌入式计算空间中扮演的一些重要角色。使用ARM架构进行硬件和软件开发的众多市场领导者目前正在虚拟化技术上持续投入,为 ARM 生态系统开创了许多激动人心的机会。

通过为其架构,尤其是系统管理单元架构引入虚拟化扩展,ARM 提供的极具凝聚力的解决方案具有下列优点,并可带来软件成本和复杂性的大幅降低:

 

  • 通过整合新旧设计,减少软件移植开销
  • 硬件辅助设备保护,增强安全性
  • 提升安全要求苛刻系统的系统稳健性和可靠性
  • 减少成本,提高硬件和内存资源的使用效率

ARM架构是低功耗和高能效的代名词。虚拟化扩展也不例外,并且进一步帮助 ARM 进入了那些对虚拟化优点理解充分的市场,如服务器市场。ARM 的许多领先硅晶片合作伙伴和 OEM 厂商的硬件与软件设计团队已计划在其 2011 年设计开端中引入虚拟化支持 - 你呢?