Part 01 背景
1.1 GPU应用场景
GPU(图形处理器)最初设计用于处理计算机图形学任务,但现在其应用场景已经扩展到了许多其他领域。以下是一些GPU应用的场景:
游戏和视觉效果:GPU最初的目的是为了加速图形渲染,因此它们在游戏和视觉效果方面有很大的应用。GPU可以快速处理大量数据并生成复杂的三维图形,为玩家提供更真实的游戏体验。
机器学习和深度学习:近年来,GPU在人工智能领域的应用越来越广泛。由于深度学习模型需要大量的并行计算和浮点运算,GPU非常适合这种任务。使用GPU加速机器学习训练过程可以节省大量时间。
科学模拟和数据分析:许多科学计算任务需要处理大量数据并进行复杂数学运算。GPU可以在分子动力学、流体动力学、天文学、地球科学等领域的模拟和分析中发挥重要作用。
图像和视频处理:GPU在图像和视频处理领域也有很大的应用。例如,它们可以用于实时视频编解码、图像降噪、图像增强、图像识别等任务。
虚拟现实和增强现实:GPU在虚拟现实(VR)和增强现实(AR)领域也有很大的应用。它们可以实时渲染高质量的虚拟环境,为用户提供沉浸式体验。
可以预见,随着技术的发展,GPU的应用领域还将继续扩展。
1.2 GPU虚拟化带来的优势
GPU虚拟化是一种将物理GPU的计算和显存资源在多个虚拟环境中共享的技术,它的主要优势如下:
资源共享:GPU虚拟化允许在多个虚拟环境中共享物理GPU的计算和显存资源,提高GPU的使用效率。
弹性扩展:通过GPU虚拟化,可以根据应用程序的需求动态调整虚拟GPU的计算和显存资源,实现资源的弹性扩展。
成本效益:GPU虚拟化可以降低硬件投资和维护成本,因为它允许在多个虚拟环境中共享物理GPU,从而减少了购买和维护多个独立GPU的需要。
隔离性: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设备的工作流程如下:
应用调用GPU支持的某个API,如OpenGL或DirectX;
OpenGL或DirectX库,提交渲染负载到操作系统内核GPU驱动;
GPU驱动把它提交给GPU硬件;
GPU硬件开始工作。完成后,DMA到内存,发出中断给CPU;
CPU找到中断处理程序(GPU驱动此前向操作系统注册过的)调用它;
中断处理程序找到是哪个渲染负载被执行完毕了,最终GPU驱动唤醒相关的应用。
Part 03 GPU虚拟化技术方案
3.1 PCIe直通
PCIe直通是一种虚拟化技术,允许虚拟机(Virtual Machine,VM)直接访问物理主机上的PCIe设备,而无需通过虚拟化软件进行模拟。通过PCIe直通就可以将GPU设备直接分配给虚拟机,见下图:
图片
各大公用云厂商广泛采用直通模式,因为它的性能损耗最小,硬件驱动无需修改。直通模式没有对可支持的GPU数量做限制,也没有对GPU功能性做阉割,因此大多数功能可以在直通模式下无修改支持。
直通模式存在以下优点:
①性能损耗小;
②功能兼容性好;
③技术简单,运维成本低,对GPU厂商没有依赖。
直通模式存在以下缺点:
1.不支持热迁移;
2.只能支持1:1,不支持GPU资源分隔。
3.2 PCIe SR-IOV
PCIe SR-IOV(Single Root Input/Output Virtualization)是一种更高级的虚拟化技术,允许一个PCIe设备在多个虚拟机之间共享,同时保持较高的性能。它是通过在物理设备(Physical Functions,PF)上创建多个虚拟功能(Virtual Functions,VF)来实现的,每个虚拟功能可以被分配给一个虚拟机,让虚拟机直接访问和控制这些虚拟功能,从而实现高效的I/O虚拟化。基于PCIe SR-IOV的GPU虚拟化方案,本质是把一个物理GPU显卡设备(PF)拆分成多份虚拟(VF)的显卡设备,而且VF 依然是符合 PCIe 规范的设备。核心架构如下图:
图片
在SR-IOV方案中,可以将一个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显卡)。