引言
目前,新型硬件设备如远程直接数据存取(RDMA)网络、现场可编程门阵列(FPGA)加速器、高带宽内存(HBM)、增强/虚拟现实(AR/VR)传感设备不断涌现,能够大幅度提升应用处理性能和用户体验,已在非云系统中发挥着重要作用。作为云计算的使能技术,虚拟化技术已被越来越多地应用于从数据中心到智能终端等不同硬件尺度的场景中,成为当前支撑云计算、大数据和移动互联网等新型计算和应用模型的核心技术。但由于针对新型硬件的虚拟化方法和技术的缺失,导致云计算系统无法充分利用这类资源。例如,以深度学习为代表的人工智能类应用(如图像分类、语音识别等)急需利用新型硬件实现TB级数据的内存进行计算。本文从云计算系统角度出发,介绍新型硬件的虚拟化背景与需求,分析现有虚拟化技术针对新型硬件的研究现状,总结我们目前在该领域的一些工作,并对将来的研究方向和趋势提出看法。
问题背景
虚拟化技术通过对物理硬件在数量、功能和效果上进行逻辑化虚拟,具有能够提供高层次硬件抽象、按需调配资源、系统的高移动性、强化安全隔离等优点,因此虚拟机也成为当前各类硬件平台上的主要载体。自从2009年起,全球新增的虚拟机数目已超过新增的物理机数目。得益于虚拟化技术的深入研究,云计算平台的使用场景和应用深度将得到极大的扩展,使得网络化高频交易(如12306铁道部火车票网上订票系统)、虚拟现实(如AR/VR游戏)、深度学习、高性能计算等直接部署于物理平台上的大量应用,有机会方便、高效地部署在以虚拟化技术为支撑的云平台上,大幅提升物理资源的利用率,极大地降低系统整体能耗。
由此可见,解决云计算面临的新问题的关键之一在于提升虚拟化能力。事实上,新一代虚拟化技术被《“十三五”国家科技创新规划》定位为云计算的核心技术,并要求加强虚拟化条件下服务技术研发与集成应用。
近年来,大量新型硬件得到迅速普及,如拥有数千个核的GPU处理器、具有RDMA功能的高速网络,支持硬件加速的FPGA器件等。以计算能力为例,CPU/GPU/FPGA不断延续摩尔定律(见图1,关于摩尔定律的发展介绍可参考《中国计算机学会通讯》(CCCF)2016年第2期译文),但现有虚拟化技术主要针对通用的硬件平台(如x86和x86-64)和系统软件栈(如Linux和Windows),强调对于物理硬件的整合和系统软件栈的兼容,目前还不能高效地承载新型硬件能力供给,而且多样化的硬件异构互联与硬件资源高效利用之间存在矛盾,也不能满足领域应用提出的可扩展的性能/功能需求。
图1 新型硬件的晶体管数目变化趋势
为了直接应对高通量低延迟等需求,硬件还呈现出不断发展的新颖性。如RDMA网络、非易失性内存(NVM)、FPGA/GPU加速硬件、AR/VR传感设备等,这些硬件在非虚拟化环境中已能够很好地满足现有应用需求。但由于此类硬件的虚拟化方法还不完善和成熟,尚不能在云环境中有效使用,以满足高效能低延迟等应用需求。为此,工业界和学术界还在寻求新型硬件的虚拟化解决方案。例如,人们已经提出了GPU、RDMA等硬件资源的直通独占式虚拟化方案。对比CPU、I/O等传统硬件的虚拟化发展历程,RDMA/FPGA等新型硬件的虚拟化尚处于早期阶段。
现状总结
目前,设备虚拟化方法主要有软件模拟、直通独占和直通共享三种方法(见图2)。基于软件模拟的全虚拟化方法能够支持多个设备共享,并不需要修改客户操作系统,但上下文切换开销大,性能低;基于直通独占的方式能够使得虚拟机直通访问物理设备,减少了虚拟机监控器(Virtual Machine Monitor, VMM)的切换开销,性能高,但共享困难;基于硬件辅助虚拟化的全虚拟化方法(以SR-IOV[1]技术为代表)解决了直通和共享矛盾,是虚拟化技术走向成熟的标志。自2005年英特尔(Intel)首次提供了针对CPU的硬件辅助虚拟化技术VT-x后,该方法已经成为了主流的x86平台虚拟化方法。目前,基于硬件辅助的虚拟化方法在CPU、内存、网络等传统的硬件资源上获得了成功,CPU和内存虚拟化资源已经接近物理性能。
图2 设备虚拟化的三种主要方法
下面将以GPU、FPGA、RDMA、NVM为典型代表,介绍新型硬件虚拟化的研究现状。
GPU虚拟化
GPU是计算机的一个重要组成部分,但GPU这类重要资源虚拟化的性能、扩展性和可用性相对于CPU等处于滞后的阶段。例如,英特尔的GPU虚拟化解决方案gVirt[2]中,单个物理GPU仅支持7个虚拟GPU(VGPU),而Xen支持512个虚拟CPU。2013年,亚马逊首次推出了商业化的GPU实例。2017年2月,来自于英特尔第一个GPU全虚拟化方案KVMGT才正式加入Linux内核4.10。
传统GPU虚拟化通过API转发的方式,将GPU操作由虚拟机发送到虚拟机监控器代理执行,该方法被大量主流虚拟化产品采用并支持图形处理,但并非真正意义上的完整硬件虚拟化技术,其性能和可扩展性均无法满足通用GPU(GPGPU)计算等应用(如机器学习和高性能计算)的需要。
GPU虚拟化的软件模拟方法直接将设备分配给指定的虚拟机,采用类似于CPU虚拟化中的二进制转换方法进行模拟。但相对于CPU,GPU的特性复杂,不同的设备提供商之间的GPU规格区别很大,GPU的资源很难被拆分,模拟的效率低。因此,典型的QEMU软件仅模拟了视频图形阵列(VGA)设备的基本功能,它通过一个半虚拟化的图像缓冲区来加速特定的2D图像访问,不符合高效、共享的虚拟化要求。
GPU虚拟化的设备直通方法将物理GPU指定给虚拟机独占访问。与API转发提供了良好的GPU共享能力相比,设备直通方法通过独占使用,提供了优异的性能。例如,基于英特尔的VT-d/GVT-d技术,通过翻译DMA访问的内存地址的方法,让GPU分配给一个虚拟机使用,能够达到与原生物理GPU相近的性能,但牺牲了共享特性。英伟达(NVIDIA)的Tesla GPU也提供了类似的虚拟化方案Grid,虚拟机可以通过直通的方式直接访问物理GPU。
GPU虚拟化的直通共享方法允许虚拟机直接访问对性能敏感的资源(如GPU访问显存),可基本解决直通和共享的矛盾,采用类似于SR-IOV[1]的硬件辅助虚拟化技术,通过影子页表隔离每个虚拟GPU的访问空间,使得大多数的命令执行不受虚拟机监控器的干预,因此虚拟GPU就可以获得接近非虚拟化的性能。由于GPU结构复杂,技术限制多,直到2014年才提出了两种针对主流GPU平台的硬件辅助的全虚拟化方案,即基于英伟达GPU的GPUvm[3]和基于英特尔GPU的gVirt。GPUvm支持全虚拟化,也支持半虚拟化。在全虚拟化模式下运行开销比较高。在优化过的半虚拟化模式下,性能比原生系统要慢2~3倍。gVirt是第一个针对英特尔平台的GPU全虚拟化开源方案,为每个虚拟机都提供了一个虚拟的GPU,并且不需要更改虚拟机的原生驱动。
FPGA虚拟化
FPGA作为一种可重新配置的计算资源,与现有的虚拟化框架并不兼容。与GPU和CPU不同,FPGA的使用情景趋向于独占。一方面,不同租户可能使用不同的访问接口,难以使用统一的指令集;另一方面,即使使用统一的接口规范,在租户切换时都需要进行耗时的重新烧写和复杂的状态保存,导致了系统大量的时间和空间开销。目前FPGA器件与各自的开发生态(工具链、库等)具有紧密的耦合关系,特定器件型号的FPGA需要特定的软件支持才能生成可供烧写的二进制文件,还没有统一的二进制接口规范。
为了将FPGA集成到云平台中,从2014年起,陆续展开了FPGA虚拟化的研究。多伦多大学的斯图尔特·拜玛(Stuart Byma)等[4]通过OpenStack在多个FPGA之间提供了部分可重构区域作为云计算资源,允许用户像启动虚拟机一样启动用户设计的或者预先定义的通过网络连接的硬件加速器。IBM中国研究院的陈非(Fei Chen,音译)等提出了将FPGA集成到数据中心的一般性框架[5],并基于OpenStack、LinuxKVM、XilinxFPGA完成了原型系统,实现了多虚拟机(VM)中多进程的隔离、精确量化的加速器资源分配和基于优先级的任务调度。微软提出了一种新的云架构,FPGA不仅与CPU通过PCIe连接,也通过数据中心以太网相连,这样不仅可以完成对网络功能的加速,也能用于其他普通应用。安卡·伊奥达科(Anca Iordache)等提出了FPGA group,即一块或者多块有相同电路配置的FPGA集合,可被多个希望使用相同电路的用户共享[6]。
2017年,多伦多大学的奈夫·泰拉夫达(Naif Tarafdar)等对FPGA进行了类似于GPU的抽象[7],将FPGA当作OpenCL设备来进行开发,每块FPGA中被分出若干应用部署区域,这些区域间利用网络连接,通过指定模块间的拓扑关系,一个应用设计能被部署在多块物理FPGA上。
RDMA虚拟化
近年来,人们正在探索RDMA硬件虚拟化技术在高性能计算等领域的应用,基于SR-IOV的RDMA在部分场景已能够媲美原生系统的高吞吐量与低延时指标。
佐治亚理工大学和威睿(VMware)的研究人员最早利用传统半虚拟化策略支持RDMA的虚拟化[8],但该方法无法避免在数据传输过程中虚拟机监控器的参与,因此其延迟和吞吐量相比非虚拟化时都有数倍的性能损失。Mellanox利用SR-IOV和VMDirect Path I/O等技术,能够在一定程度上提升RDMA虚拟化的性能,但费米国家实验室和俄亥俄州立大学的研究人员都通过测试发现仍然有30%以上的性能损失,且限制了针对RDMA的各类优化的使用[9]。苏黎世理工大学和IBM的研究人员提出了一种针对RDMA设备的混合虚拟化方案[10],结合硬件SR-IOV和软件半虚拟化技术提升RDMA虚拟化的灵活性,从而支持虚拟机动态迁移和镜像等功能。微软Azure云计算平台已尝试性地推出带有RDMA网络支持的虚拟机租赁的云服务平台,然而上述虚拟机仅支持通过修改的MPI库接口使用RDMA硬件,且提供的性能相比现有硬件的原生性能仍然有数倍差距,大量基于RDMA优化的系统无法部署在该虚拟化环境中。卡内基梅隆大学和英特尔的研究人员最近总结了构建高性能RDMA系统的设计指南[11],其中提出的针对RDMA硬件中地址翻译缓存分配、通信接口和模式的选择以及基于Doorbell的批处理优化等原则和技术,能数十倍地提升系统性能。但遗憾的是,这些方法均无法在现有虚拟化环境中使用。
NVM虚拟化
NVM是一种新的存储技术,它同时拥有内存字节寻址的高性能以及数据存储持久化的特性,因此备受关注。但NVM存在价格高、容量小、使用方式多变等问题,如何进行虚拟化支持进而投入到云环境中使用,仍处在研究的起步阶段。佛罗里达大学的研究人员在虚拟机监控器中实现了相变内存(Phase-Change Memory, PCM)和硬盘的协同管理,并通过基于Ballooning的页面动态转换提升了关键虚拟机的执行性能[12]。日本产业技术综合研究所(AIST)的研究人员在NVM和DRAM的平行混合内存环境下,针对NVM介质的写寿命和写延迟问题设计了对虚拟机透明的页面迁移和调度策略,并通过对不同介质内存的读/写统计完成功耗建模分析[13]。英特尔和美国镁光(Micron)于2017年发布了基于堆叠技术的高速非易失性存储Optane,提供了产品级高速存储。韩国科学技术院的研究人员尝试在虚拟机操作系统中加入对NVM存储的扩展支持,利用混合存储架构减少虚拟机的内存能耗。佐治亚理工学院的研究人员同样尝试了在Xen虚拟化环境中扩展操作系统,实现内存页在通用内存和最新3D堆叠内存之间的动态迁移加速系统性能。虽然上述研究并非是对存储设备的虚拟化实现,且通过扩展内核来利用混合内存架构改进系统能耗和灵活性,但其对于操作系统中内存管理模块的改进方法仍值得借鉴。如何在虚拟化环境中保持不同类型存储硬件的特性(非易失)和接近非虚拟化使用时的高性能,以及利用混合存储支持当前以内存计算为代表的存储密集型应用等,将是新型存储硬件虚拟化研究的重点。
我们的工作
我们的虚拟化研究主要集中在两方面:一是把物理资源抽象成虚拟资源,并进行优化,使得性能尽可能接近物理资源;二是高效管理和利用虚拟资源,构成软件定义的虚拟资源池。我们在硬件辅助虚拟化、GPU虚拟化、NVM虚拟化等方面展开了一些研究,列举如下。
1. I/O设备共有三个关键的技术指标:吞吐量、延迟和CPU占用。SR-IOV是目前针对前两个指标最优的技术,但CPU占用依然很高(主要原因是没有优化高频次中断引起的系统负载),如图3所示,占用高达5个CPU。通过SR-IOV技术对虚拟环境中网卡进行数据通路与控制面分离,从而显著减少虚拟机监控器的干预,提高了网络吞吐量。在单个网卡扩展到60个虚拟机时,不牺牲网络带宽,通过多网卡可运行数百个虚拟机,而且每增加一个虚拟机,CPU的额外开销只增加1.76%,并将CPU占用率降低了61%(HPCA 2010,IEEE JSAC 2013)。半虚拟化下I/O虚拟化通常采用前后端模型(如Xen采用此模型),我们提出了自适应的网络中断汇集参数配置方法,实现了虚拟中断汇聚技术,提出了虚拟接收端扩展模型vRSS,实现了后端驱动程序并行化。虚拟中断汇集方法把虚拟CPU占用率降低了71%,结合vRSS模型,能将吞吐量提高2.61倍(IEEE TPDS 2013)。
图3 基于SR-IOV的高性能网络虚拟化性能提升
2. 通过对现有GPU全虚拟化方案gVirt的分析发现,扩展性主要受限于静态划分的虚拟内存机制,支持的虚拟GPU数量有限,GPU硬件的计算能力没有全部发挥。我们提出了混合影子页表技术优化gVirt的内存页表机制,显著提升了在虚拟机中的内存敏感应用性能(USENIX ATC 2015),并提出了基于私有影子页表、阶梯映射、显存动态共享等技术的gScale系统(见图4),将能够支持的虚拟GPU数量提升到15个。
图4 GPU全虚拟化方案gVirt的扩展性改进
3. 在虚拟机监控器层完成了第一个NVM虚拟化实现方案,同时支持全虚拟化和半虚拟化两种模式,并在保留持久性存储特点的情况下,通过使用DRAM和NVM构建混合存储,以降低对硬件NVM的使用量(SoCC 2016,见图5)。
图5 基于DRAM和NVM的混合存储虚拟化架构
此外,针对新型硬件特性进行深入研究,提出了基于事务处理内存和RDMA融合的高性能事务处理系统(SOSP 2015、EuroSys 2016、USENIX ATC 2017)以及高性能图结构数据查询系统(OSDI 2016)。将英特尔受限事务内存 (Restricted Transactional Memory, RTM)特性应用到Xen虚拟化环境中,加速了虚拟机的并发自省功能(HPCA 2014)。
未来方向
高效、安全、稳定的虚拟化资源供给是云计算平台的核心要素。除了可用性、扩展性和安全等方面,新型硬件虚拟化的未来研究方向可简述如下。
极端虚拟化
随着云计算系统应用范围不断扩大,虚拟机目前朝极大和极小两个方向演化。由于新型硬件设备的加入,单机的处理能力不断增强。如单台物理主机已能够拥有超过百个CPU核、数千个GPU核、TB级内存以及超过100Gbps的网络带宽的硬件环境,由此产生了在单机上构建巨规模/巨型虚拟机的迫切需求。同时,针对部署在智能移动终端上面向极端受限的特征化硬件环境的微型虚拟机,需要能够便捷共享集约化硬件资源,高效抽象具有多样性的硬件设备,按需移动和重构组件化的虚拟机,以及提供面向交互式和移动性的个性化系统软件栈。
异构硬件的融合和归一化
当前硬件平台趋向于异构化,单台服务器可能同时配置CPU与GPU/FPGA处理器,具有RDMA特性的InfiniBand网卡和以太网卡,普通内存和NVM以及固态硬盘(SSD)等外存。因此,根据“软件定义”基础设施的指导原则,利用虚拟化融合和归一化异构硬件。首先,异构硬件的融合将本着“优势互补”的原则,向应用提供优势资源满足极端化需求,如GPU的高并发和高带宽、CPU的大容量缓存、DRAM的低延迟和NVM的持久性等。其次,不同的硬件需要采用不同的虚拟化方法和提供各异的接口以获得最佳的性能,但仍然需要考虑使用的灵活性。因此,通过虚拟化实现异构硬件归一化管理,向应用提供统一的编程接口。利用来自应用的需求信息动态判断实际的后台执行硬件,实现应用需求指导的动态硬件选择技术。
多硬件和特性的聚合和抽象
目前,虚拟化侧重于“一虚多”技术,即将单个物理资源通过虚拟化技术提供多个虚拟资源。同时,可利用新型硬件来实现对多硬件或多特性的虚拟化聚合和抽象,提升硬件性能,甚至突破单一硬件的物理极限(“多虚一”)。例如,围绕RDMA技术实现虚拟化硬件聚合和抽象。首先,针对CPU和GPU设备在内存级使用输入/输出内存管理单元(IOMMU)实现两者的互通,扩展GPU的内存瓶颈,也能避免处理器间数据传递的内存复制开销。并利用RDMA进一步打通节点间的内存界限,避免跨节点传输过程中数据在内核/应用层、CPU/GPU/FPGA内存间的冗余复制开销。其次,利用数据原子性、一致性和隔离性(ACI)配合NVM(映射到CPU内存空间)提供的数据持久性(D),能够向应用提供硬件支持的完整ACID事务抽象,也能够有效地避免对锁的使用和降低硬件状态持久化的维护开销。 ■
参考文献
[1] Dong Y, Yang X, Li X, et al. High performance network virtualization with SR-IOV[C]//Proceedings of the High-Performance Computer Architecture (HPCA). 2010:1-10.
[2] Tian K, Dong Y, Cowperthwaite D. A full GPU virtualization solution with mediated pass-through[C]//Proceedings of the Usenix Technical Conference.2014: 121-132.
[3] Suzuki Y, Kato S, Yamada H, et al. GPUvm: GPU Virtualization at the Hypervisor[J]. IEEE Transactions on Computers, 2016, 65(9): 2752-2766.
[4] Byma S, Steffan J G, Bannazadeh H, et al. FPGAs in the Cloud: Booting Virtualized Hardware Accelerators with OpenStack[C]//Proceedings of the Field Programmable Custom Computing Machines(FCCM), 2014: 109-116.
[5] Chen F, Shan Y, Zhang Y, et al. Enabling FPGAs in the cloud[C]//Proceedings of the 11th ACM Conference on Computing Frontiers. New York: ACM Press, 2014:3:1-3:10.
[6] Iordache A, Pierre G, Sanders P, et al. High Performance in the Cloud with FPGA Groups[C]//Proceedings of the 9th International Conference on Utility and Cloud Computing(UCC 2016). New York: ACM Press, 2016:1-10.
[7] Tarafdar N, Lin T, Fukuda E, et al. Enabling Flexible Network FPGA Clusters in a Heterogeneous Cloud Data Center[C]//Proceedings of the 2017 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays (FPGA). New York: ACM Press, 2017:237-246.
[8] Younge A J, Walters J P, Crago S P, et al. Supporting High Performance Molecular Dynamics in Virtualized Clusters using IOMMU, SR-IOV, and GPUDirect[C]// Proceedings of the 11th ACM SIGPLAN/SIGOPS International Conference on Virtual Execution Environments(VEE 2015). New York: ACM Press, 2015:31-38.
[9] Ruivo T P P D L, Altayo G B, Garzoglio G, et al. Exploring Infiniband Hardware Virtualization in OpenNebula towards Efficient High-Performance Computing[C]//Proceedings of IEEE/ACM International Symposium on Cluster, Cloud and Grid Computing(CCGRID). IEEE, 2014:943-948.
[10] Pfefferle J, Stuedi P, Trivedi A, et al. A Hybrid I/O Virtualization Framework for RDMA-capable Network Interfaces[C]// Proceedings of the 11th ACM SIGPLAN/SIGOPS International Conference on Virtual Execution Environments (VEE 2015). New York: ACM Press, 2015:17-30.
[11] Kalia A, Kaminsky M, Andersen D G. Design Guidelines for High Performance RDMA Systems[C]//Proceedings of USENIX ATC.2016:437-450.
[12] Zhou R, Li T. Leveraging phase change memory to achieve efficient virtual machine execution[J]. ACM Sigplan Notices, 2013, 48(7):179.
[13] Hirofuchi T, Takano R. RAMinate:Hypervisor-based Virtualization for Hybrid Main Memory Systems[C]// Proceedings of the Seventh ACM Symposium on Cloud Computing (SoCC). New York: ACM Press, 2016:112-125.
其他作者:管海兵
所有评论仅代表网友意见