年份:2019
作者:Anshuj Garg
会议:ESCI
出版商:IEEE
摘要
本篇文章对vGPU虚拟化的性能开销、调度算法的影响、同构与异构工作负载的干扰效应,以及PCI直通与vGPU的性能差异进行了研究。结果表明,vGPU虚拟化会导致可用内存减少高达7%,执行时间增加约20%;与同构任务相比,异构任务的共同放置可以显著提高GPU资源复用效率。
同构工作负载:相似的计算特性和资源需求,对统一资源进行竞争,异构则相反
介绍
由于PCI直通限制了硬件资源的复用和超额分配能力,文章提出并研究了用于虚拟化和管理GPU的硬件辅助特性。重点关注了vGPU配置文件和调度算法的作用,详细描述了硬件辅助GPU虚拟化的工作原理、配置参数以及由此产生的虚拟化开销。通过与专用GPU和PCI直通方式的性能对比,文章还分析了vGPU的性能偏差。最后,讨论了托管平台可能的扩展方向,旨在提供对云服务提供商有价值的输入,帮助他们构建高效的GPU资源管理平台。
背景和动机
A.硬件辅助化虚拟GPU
硬件辅助GPU技术通过将单个物理GPU划分为多个虚拟GPU(vGPU)来实现多路复用,NVIDIA通过相应的软件驱动程序实现vGPU的多路复用。这个过程涉及两个主要配置项:vGPU配置文件和调度算法。
-
vGPU配置文件决定了可分配的vGPU数量以及每个vGPU的内存容量。例如,配置文件会指定每个vGPU分配多少内存,以及物理GPU支持多少个vGPU。
-
调度算法决定了如何在多个vGPU之间进行GPU资源的分配。NVIDIA的vGPU驱动程序支持三种调度算法:
-
固定共享(Fixed Share):将物理GPU划分为与vGPU总数相等的时间槽,并为每个vGPU分配一个槽。如果某个vGPU未被使用,则该时间槽无法被其他vGPU利用,导致GPU资源浪费。
-
等额共享(Equal Share):根据已经分配给虚拟机的vGPU数量来分配时间槽。即使某些虚拟机不活动,空闲的时间槽仍然会导致部分GPU资源未被充分利用。
-
尽力而为(Best Effort):时间槽分配给执行GPU任务的活跃vGPU虚拟机。如果某个虚拟机没有任务执行,其空闲的时间槽可以被其他活跃虚拟机使用,从而最大化GPU的利用率。
-
总结:默认值 on active 的区别
-
虚拟化环境中vGPU的硬件-软件堆栈
B.实证分析的必要性
尽管硬件辅助的vGPU技术相比传统的PCI直通方法具有显著的优势,但也会引入较大的开销,因为工作负载的特性与不同任务之间的调度所产生的干扰密切相关。因此,优化调度算法和配置以最小化干扰显得尤为重要。文章的目标是完成四个任务:
-
硬件辅助vGPU的虚拟化开销分析;
-
不同vGPU配置模式与不同类型工作负载的特性分析,目的是找到合适的配置关系;
-
不同类型工作负载对vGPU造成的干扰分析;
-
调度算法与vGPU多路复用的比较。
评估工作负载
本文提出了一些用于评估硬件辅助vGPU平台的工作负载,这些工作负载覆盖了不同类型的GPU应用。具体包括:
-
内存基准测试:用于测试CPU与GPU之间内存传输的时间。该基准测试分配一定量的GPU内存,进行数据的传输和回传,主要评估内存分配和数据传输的性能。
-
TensorFlow基准测试:用于训练Resnet50模型的深度学习基准测试,使用Imagenet数据集,主要用于评估GPU在深度学习训练任务中的性能。
-
PTB基准测试:用于训练递归神经网络(RNN)模型,使用Penn Tree Bank (PTB)数据集,评估GPU在处理语言模型时的表现。
-
Phoronix测试套件:该套件用于评估系统组件的性能,其中我们选择了Blender基准测试,用于模拟Blender 3D建模软件,评估GPU渲染高级场景时的压力。
-
MUMmerGPU基准测试:用于序列比对问题的GPU基准测试,它通过GPU加速进行大规模序列比对,测试GPU在数据对比中的性能。
-
Myocyte基准测试:用于模拟和评估心肌细胞(心脏肌肉细胞)的行为,测试GPU在生物计算模拟中的表现。
-
组合基准测试:这是一个综合性的基准测试,结合了多个短时基准测试(运行时间小于60秒),主要测试GPU在短时计算密集型任务中的表现。
所有测试均在以下硬件和软件环境中进行:
-
硬件:使用NVIDIA Tesla P100 GPU,采用PCI直通模式。
-
操作系统和虚拟化:使用Ubuntu操作系统和VMware ESXi 6.5.0超管虚拟化环境,每个虚拟机分配了8个CPU核心、64GB内存、100GB物理存储。
-
监控工具:使用nvidia-smi工具来测量GPU的利用率和GPU内存使用情况。
测试结果总结:
-
Blender和TensorFlow基准测试:这两个工作负载在执行过程中导致了高GPU利用率和高内存利用率,表明它们对GPU资源的需求较大。
-
Myocyte和PTB基准测试:这两个工作负载表现出中等GPU利用率(约70%-76%)和中等到低的内存利用率,说明它们对GPU的需求较为适中。
-
MUMmerGPU和组合基准测试:这两个基准测试显示了突发的GPU利用率,GPU利用率波动较大,特别是在MUMmerGPU中,由于其异构计算模型,GPU利用率和内存需求呈现明显的波动。
实验评估
A.虚拟化开销基准
在虚拟化开销测试中,我们对PCI直通GPU和16q vGPU进行了对比。测试结果显示,在内存可用性方面,使用PCI直通GPU时,约99.34%的总GPU内存对虚拟机可用,而使用vGPU时,仅有约93%的内存可用,这一差异表明vGPU驱动程序需要占用一定的GPU内存资源。在数据传输延迟方面,实验通过分配指定数量的GPU内存并测量CPU与GPU之间的数据传输时间,发现两者的延迟相似。尽管如此,由于vGPU的虚拟化开销,vGPU配置在某些情况下的延迟略高。
B.工作负载性能
在单个GPU的情况下,对比了PCI直通GPU和16Q vGPU配置文件的虚拟机运行不同工作负载的运行时,结果表明两者的工作负载性能非常接近,但vGPU模式仍存在一些虚拟化开销。
在多个虚拟机中运行相同的工作负载实例(4个工作负载分别分配给四个vGPU虚拟机)与在单个PCI直通GPU的虚拟机中运行相同的工作负载实例(等效为四个进程)进行对比。结果发现,在TensorFlow和Combined工作负载下,PCI直通模式性能更优,可能由于该模式下进程上下文切换开销较低,更适合计算密集型任务。而在MUMmerGPU工作负载下,vGPU模式表现更好,这可能是因为该负载具有突发性特征,并且涉及频繁的数据传输,但其计算密集度较低,因而vGPU模式的较少上下文切换和较小的数据传输开销更为适配。
C.不同 vGPU 配置文件下调度模式的影响
比较了三种vGPU调度算法(Fixed Share、Equal Share、Best Effort)对不同工作负载的性能影响。调度算法的选择和vGPU配置文件显著影响了各个基准测试的运行时。
-
Memory Benchmark:在Memory基准测试中,不同的调度算法对性能影响较小。然而,随着活跃虚拟机数量增加,共享PCIe总线带来的数据传输争用导致性能下降。尤其在“1打开1激活”和“2打开2激活”配置下,Fixed Share由于预先分配了时间片,在1打开1激活时略显劣势。
-
Blender Benchmark:Blender基准测试表现出对调度算法和虚拟机数量的敏感性。在Best Effort算法下,当活跃虚拟机数量增加时,性能下降尤为显著,因为Best Effort尝试最大化利用GPU资源,不进行严格的时间片划分。而在Equal Share算法下,当打开的虚拟机数量增加时,性能下降最明显,因为它会在所有打开的虚拟机之间均分时间片,导致非活跃虚拟机也占用资源。
-
MUMmerGPU Benchmark:MUMmerGPU基准测试不受调度算法和配置文件变化的显著影响。这是因为MUMmerGPU工作负载特性决定了其GPU访问频率较低,且间隔时间较长,从而降低了与其他任务的资源竞争。
-
其他配置文件:在4个4GB和8个2GB vGPU配置文件下,PTB和Combined工作负载表现出了类似的趋势。在GPU利用率波动较大的情况下,Best Effort调度可以通过利用空闲时间片提高整体性能,而Equal Share和Fixed Share由于划分固定时间片,未能充分利用空闲资源。
D.vGPU算法调度的结果
三种vGPU调度算法在不同类型的工作负载下表现不同。在处理计算密集型任务时,三种算法对GPU的平均利用率相差无几。然而,在处理GPU利用率变化较大的工作负载(如MUMmerGPU和组合工作负载)时,最佳努力(Best Effort)调度算法能够显著提高GPU利用率,因为它会在找到空闲的GPU时间片时调度其他虚拟机的任务,从而实现工作节省。尽管如此,最佳努力调度算法仍存在一定的缺陷,即未能充分利用空闲的GPU时间片,尤其是当虚拟机配置的vGPU数量和实际工作负载不匹配时,这可能导致性能下降。(默认与on的问题解决不了,只能解决active和on的问题)
E.应用共置的影响
(1)8q 配置
实验使用了四种不同特性的工作负载(TF、B为计算密集型且GPU利用率固定;C、M为计算非密集型且GPU利用率变化)。通过组合这些工作负载,形成了十二种不同的异质组合。大多数组合相较于同质设置的运行时间有所减少,尽管在某些特定组合(如C和TF,C和B)中,Combined工作负载的运行时间有所增加,但反过来,TensorFlow和Blender的运行时间分别减少了40%和50%。
即前面的工作负载会先占用资源,导致后面的得不到响应,前面的工作负载密集比较好,因为后面不需要太多时间,相反则不好
(2)4q 配置
运行了三种不同计算密集度的工作负载:TensorFlow (TF)、Combined (C) 和 MUMmerGPU (M),并观察它们在异质环境中的表现。结果显示,当计算密集型的TensorFlow与较低密集度的Combined和MUMmerGPU组合时,TensorFlow的运行时间显著减少了约0.5倍,表明其在异质环境下得到了资源优先分配,性能提升明显。然而,中低密集度的Combined和MUMmerGPU受到资源竞争影响,运行时间增加,性能下降最高可达1.3倍。这表明在4q配置的异质环境中,资源分配倾向于优先满足高强度工作负载,从而影响了低强度任务的稳定性。
(3)2q 配置
在2q配置下,实验选择了内存需求较小的PTB和Combined基准,暴露了八个每个2GB内存的vGPU。实验结果表明,随着虚拟机数量增加并进行工作负载组合,整体执行时间得到了改善。尤其是组合工作负载(4P, 4C)表现出最优的性能提升,明显优于单一工作负载配置(8P, 0C)和(0P, 8C)。这种改进与之前的实验原理一致,即通过增加异质性和优化工作负载组合,可以提升资源利用率和整体执行效率。
F.结果总结
1.PCI直通在GPU内存和运行时间上通常优于vGPU。
2.多路复用vGPU时,高计算密集型工作负载的性能下降更为显著,所有类型的工作负载随着虚拟机数量的增加都会出现性能下降。
3.异构设置(将不同GPU利用特性的工作负载共同放置)有助于提高多路复用效率,减少性能下降,特别是对于GPU密集型与突发型工作负载的组合。
4.调度算法对计算密集型工作负载尤为重要,best effort调度机制能在这些工作负载上带来显著的性能提升。
G.硬件辅助vGPU的局限性
更改vGPU调度算法或配置需要重启物理机器或虚拟机,操作不便;仅支持同质vGPU配置,导致内存资源过度分配,无法灵活适应不同工作负载的需求;一些GPU高级功能(如统一内存、ECC、GPUDirect等)在vGPU中不可用;不支持GPU内存过度订阅,限制了多路复用的能力,影响资源利用效率。
总结
1.只知道有虚拟化开销,但并未进一步去测试虚拟化开销的具体原因
2.上下文切换开销的测量需要对NVIDIA驱动程序和VMware ESXi超管程序进行插装,但不开源,无法测量上下文切换开销
3.测验了异质共置工作负载,但实际上硬件辅助vGPU并不支持
4.共有三种调度算法,虽然best effort比较好用,但在一些情况下,改进并不明显
5.异质共置那一块,并未说明顺序的重要性,不利于读者理解,此外包括M和C在前排时,效率反而降低并未做出详细解释