单位:中国移动智慧家庭运营中心成都业务支持中心
Part 01
●背景●
1.1 GPU应用场景
GPU(图形处理器)最初设计用于处理计算机图形学任务,但现在其应用场景已经扩展到了许多其他领域。以下是一些GPU应用的场景:
可以预见,随着技术的发展,GPU的应用领域还将继续扩展。
1.2 GPU虚拟化带来的优势
GPU虚拟化是一种将物理GPU的计算和显存资源在多个虚拟环境中共享的技术,它的主要优势如下:
Part 02
●相关基础概念●
为方便大家理解GPU虚拟化,先介绍相关的基础概念,包括I/O总线、GPU API、GPU工作流程。
2.1 I/O总线
根据接口协议的性能,现代计算机对I/O总线进行了分层。
见上图,一些外围相对较慢的I/O设备则通过外围I/O总线连接到系统,比如使用SCSI(Small Computer System Interface)、SATA(Serial AT Attachment)或者USB(Universal Serial Bus)等协议的I/O设备。而显卡、网卡等高性能的I/O设备通过通用I/O总线连接到系统,在许多现代系统中会是PCIe(Peripheral Component Interconnect Express)或它的衍生形式。
2.2 GPU API
为了支持各种功能,GPU提供了不同类型的API,让开发者能够在应用程序中使用GPU的强大功能。这些API可分为三类:图形渲染、通用计算和音视频编解码。
图形渲染API被用于处理图形渲染任务,例如实时3D图形和动画。这些API提供了一组函数和接口,允许开发者在程序中创建和操纵3D对象、纹理和着色器。这些API经常被用于游戏和3D建模软件。主要的渲染API有:OpenGL(开放图形库):跨平台的图形编程接口,提供2D和3D图形渲染功能;Vulkan:与OpenGL类似,是一个跨平台的3D图形和计算API,但提供了更低级的硬件控制和更高的性能;DirectX:由微软开发的一系列API,包括Direct3D,用于处理Windows平台上的3D图形渲染;Metal:由苹果开发的图形和计算API,专为iOS和macOS平台设计。
通用计算API允许开发者将GPU用于通用计算任务,而不仅仅是图形渲染。这些任务可能包括物理模拟、机器学习、图像处理等。通用计算API提供了编程模型和优化工具,以便在GPU上实现高性能并行计算。主要的通用计算API有:CUDA(Compute Unified Device Architecture):由NVIDIA开发的并行计算平台和编程模型,专为NVIDIA GPU设计;OpenCL(开放计算语言):跨平台的并行计算API,可以在不同类型的处理器(如GPU、CPU和其他加速器)上运行。
音视频编解码API用于处理音频和视频数据的编码和解码。它们利用GPU的并行处理能力来加速音视频数据的压缩和解压缩。主要的音视频编解码API有:NVENC/NVDEC:NVIDIA GPU上的硬件加速视频编码和解码API,支持常见的视频编码标准,如H.264、HEVC和VP9;AMD VCE/UVD:AMD GPU上的硬件加速视频编码和解码API,支持常见的视频编码标准;Intel Quick Sync Video:Intel处理器集成GPU上的硬件加速视频编解码API;VideoToolbox:苹果平台上的硬件加速视频编解码框架,支持iOS和macOS设备。
2.3 GPU工作流程
在没有虚拟化的情况下,渲染涉及到的关键组件见下图。
一个典型的GPU设备的工作流程如下:
Part 03
●GPU虚拟化技术方案●
3.1PCIe直通
PCIe直通是一种虚拟化技术,允许虚拟机(Virtual Machine,VM)直接访问物理主机上的PCIe设备,而无需通过虚拟化软件进行模拟。通过PCIe直通就可以将GPU设备直接分配给虚拟机,见下图:
各大公用云厂商广泛采用直通模式,因为它的性能损耗最小directx 11 3d游戏开发编程基础,硬件驱动无需修改。直通模式没有对可支持的GPU数量做限制,也没有对GPU功能性做阉割,因此大多数功能可以在直通模式下无修改支持。
➪ 直通模式存在以下优点:
①性能损耗小;
②功能兼容性好;
③技术简单,运维成本低,对GPU厂商没有依赖。
➪ 直通模式存在以下缺点:
1.不支持热迁移;
2.只能支持1:1,不支持GPU资源分隔。
3.2 PCIe SR-IOV
PCIe SR-IOV(Single Root Input/Output Virtualization)是一种更高级的虚拟化技术,允许一个PCIe设备在多个虚拟机之间共享3D素材,同时保持较高的性能。它是通过在物理设备(Physical Functions,PF)上创建多个虚拟功能(Virtual Functions,VF)来实现的3D交通工具,每个虚拟功能可以被分配给一个虚拟机,让虚拟机直接访问和控制这些虚拟功能,从而实现高效的I/O虚拟化。基于PCIe SR-IOV的GPU虚拟化方案,本质是把一个物理GPU显卡设备(PF)拆分成多份虚拟(VF)的显卡设备,而且VF 依然是符合 PCIe 规范的设备。核心架构如下图:
在SR-IOV方案中directx 11 3d游戏开发编程基础,可以将一个PF虚拟化分割为多个VF。
基于此,SR-IOV有三种应用场景:
(1)用户基于HostOS通过PF驱动直接使用PF;
(2)用户基于HostOS通过VF驱动直接使用VF;
(3)用户在VM中通过VF驱动使用VF;
➪ SR-IOV方案的优点:
①每个VF都有独立的配置空间、MMIO、地址空间,因此数据更加安全;
②真正实现了1:N,一个PCIe设备提供给多个VM使用;
➪ SR-IOV方案的缺点:
1.灵活性较差,无法进行更细粒度的分割与调度;
2.不支持热迁移。
业界支持SR-IOV的显卡:
1、AMD Radeon PRO V620:一块显卡PV支持分割12个VF。
2、摩尔线程MTT S3000:一块显卡PV支持分隔32个VF。
3.3 API转发
在苦等PCIe SR-IOV期间,业界出现了基于API转发的GPU虚拟化方案。API转发分为被调方和调用方,两方对外提供同样的接口(API),被调方API实现是真实的渲染、计算处理逻辑,而调用方API实现仅仅是转发,转发给被调方。其核心架构示意如下图:
在GPU API层的转发,业界有针对OpenGL的AWS Elastic GPU,OrionX,有针对CUDA的腾讯vCUDA,瓦伦西亚理工大学rCUDA;在GPU驱动层的转发,有针对CUDA的阿里云cGPU和腾讯云pGPU。
➪ API转发方案的优点:
①灵活性最高。通过API转发的方式解耦应用与GPU设备之后,可以通过软件任意配置1块GPU设备服务N个VM。也能做到灵活的GPU资源扩缩容、迁移等等;
②不依赖GPU硬件厂商。
③不限虚拟化环境。
➪ API转发方案的缺点:
1.复杂度极高。同一功能有多套 API(渲染的 DirectX 和 OpenGL),同一套 API 还有不同版本(如 DirectX 9 和 DirectX 11),兼容性非常复杂。
2.功能不完整。如不支持媒体编解码。
3.4 受控直通
受控直通方案是由Nvidia提出,并联合Intel一起将相关的mdev提交到了Linux内核4.0中。受控直通把会影响性能的访问直接透传给GPU(如显存),把性能无关功能部分(如CSR和部分MMIO寄存器)做拦截,并在mdev模块中做模拟,使得系统层面能看到多个“看似”完整的多个GPU PCIe设备,即vGPU,它也可以支持原生GPU驱动。
➪ 该方案的优点:
①具备1:N的灵活性;
②高性能;
③功能完备,3D渲染、通用计算、媒体编解码都支持。
➪ 该方案的缺点:宿主机的GPU驱动相当于在模拟GPU,而GPU的硬件不开源,导致只有GPU厂商才能提供这一部分。
业界的受控直通实现,有Nvidia的vGPU、Intel的GVT-g、摩尔线程的MT Mesh 2.0(MTT S3000显卡)。
●
●
●