GPU虚拟化

GPU虚拟化,第1张

上一篇文章,讲解了计算虚拟化之CPU虚拟化和内存虚拟化。而GPU从某种意义上来讲,其作用也是用于计算,只不过同CPU应用用于通用计算相比,GPU则主要用于对图形和图像要求较高的场景,比如高清视频编解码、3D游戏、物理仿真等。本篇带领大家了解一下GPU虚拟化技术

GPU技术在芯片行业中也如同CPU技术一样快速发展,而且越来越多的用户开始部署虚拟桌面方案。因此将GPU技术与虚拟化技术融合,是近年来虚拟化行业中比较热门的技术课题,通过此种方式,将大大降低图形图像用户的使用成本以及提高数据的处理效率和数据安全性。所谓GPU虚拟化,就是将一块GPU卡的计算能力进行切片,分成多个逻辑上虚拟的GPU,即vGPU,以vGPU为单位分配GPU的计算能力。以vGPU为单位可以将单块GPU卡分配给多台虚拟机使用,使得虚拟机能够运行3D软件、播放高清视频等,极大地提升了用户体验。

目前GPU虚拟化主要有如下几种技术:

Device Simulation

API Forwarding

GPU Pass-Through

Full GPU Visualization

设备模拟直接将设备分配给指定的虚拟机。采用类似于CPU虚拟化中二进制转换方法进行模拟。但相对于CPU,GPU的特性复杂,不同的设备提供商之间的GPU规格区别很大,GPU的资源很难被拆分,模拟的效率低。因此,典型的QEMU软件仅模拟了VGA设备的基本功能,它通过一个半虚拟化的图像缓冲区来加速特定的2D图像访问,不符合高效、共享的虚拟化要求。由于设备模拟没有一个确定的机制能使虚拟机进行访问图形硬件的能力,因此这些虚拟的显示设备都是通过使用CPU以及内存的方式对图形数据进行相应处理。

API转发将图形指令如OpenGL从客户虚拟机转发到虚拟机监视器VMM中,实现虚拟化环境下GPU的共享。该方法目前被广泛应用在VMWare和VirutalBox等软件中。基于Chromium的VMGL和Oracle的VirtualBox,采用定制过的OpenGL库来替换原有的OpenGL库,将虚拟机中的OpenGL指令转发到虚拟机监视器中去执行。针对GPU运用于通用计算,rCUDA、vCUDA和gVirtuS、都采用转发CUDA和OpenGL的指令来解决虚拟化环境下运行GPU通用计算程序的问题。然而API转发受限于平台,例如Windows采用的接口是DirectX,不兼容于OpenGL或CUDA。因此,一个Linux主机就不能执行Windows客户机转发过来的DirectX命令。同时由于API转发引起大量的上下文切换,性能损失较大。

显卡穿透(pass-through)也叫显卡直通,是指绕过虚拟机管理系统,将GPU单独分配给某一虚拟机,只有该虚拟机拥有使用GPU的权限,这种独占设备的方法分配方式保存了GPU的完整性和独立性,在性能方面与非虚拟化条件下接近,且可以用来进行通用计算。但是显卡直通需要利用显卡的一些特殊细节,同时兼容性差,仅在部分GPU中设备可以使用。同时GPU透传只能将GPU分配给一台虚拟机使用,无法在多台虚拟机间共享,其他虚拟机无法使用到GPU提供的计算能力。由于显卡直通实际上是由客户 *** 作系统使用原生驱动和硬件,缺少必要的中间层来跟踪和维护GPU状态,它不支持实时迁移等虚拟机高级特性。

显卡虚拟化就是将显卡进行切片,并将这些显卡时间片分配给虚拟机使用的过程。由于支持显卡虚拟化的显卡一般可以根据需要切分成不同的规格的时间片,因此可以分配给多台虚拟机使用。GPU全虚拟化允许虚拟机直接访问对性能敏感的资源(如GPU访问显存),基本解决直通和共享的矛盾。比如类似于IO虚拟化的SR-IOV技术,通过影子页表隔离每个虚拟GPU的访问空间,从而大多数的命令执行会不受虚拟机监控器的干预,因此虚拟GPU就可以获得接近非虚拟化情况下的性能。

不同的显卡厂商,其全虚拟化的实现方式不同。比如AMD在其最新的GPU上采用了SR-IOV(单根虚拟化)技术来实现;Intel则采用KVMGT技术来实现,Nvidia采用了GPUvm/GRID技术来实现。

Citrix和VMware的虚拟GPU特性对比

目前两种最为流行的企业VDI产品都是基于Nvidia的GRID技术。而它们之间存在哪些区别呢?

Citrix XenDesktop GRID vGPU

一些专家认为Citrix的GPU虚拟化技术领先于其他竞争对手,因为其在最底层上获得了Nvidia的支持。在Citrix XenDesktop 7.1中,Citrix通过使用Nvidia GRID技术提供了对vGPU技术的原生支持,包括pass-through和GPU共享。但是需要注意的是Nvidia的板卡并不支持太多的服务

器,GRID vGPU特性也只在安装了Service Pack 1的XenServer 6.2上可用。

在你为XenDesktop虚拟机(VM)部署了vGPU之后,主要顾虑如何分配GPU。你可以按照一比一的方式将物理GPU分配给虚拟GPU,这样可以降低每个物理GPU上的负载,实现应用程序的高性能表现;或者你可以将一个物理GPU共享为多个虚拟GPU,可以提供高密度的GPU,但

是性能表现会有所降低。再次强调,这些都取决于应用程序和用户的需求。

GRID卡可以提供四种不同类型的vGPU。每种都根据需要支持的共享用户数量和需要的内存数量而不同。GRID卡还提供了GPU pass-through方式,这也是XenApp能够使用的唯一的GPU类型。

VMware vSGA和vDGA

VMware的技术也基于Nvidia,包括不同的GPU虚拟化方案:Soft 3D、虚拟共享图像加速(vSGA)和虚拟专用图像加速(vDGA)。

Soft 3D使用软件来模拟GPU,适用于有限的3D图像处理需求。

因为其将GPU分成多份,将内存分配给每个虚拟机,所以vSGA可以支持很高的用户密度。其还可以提供故障转移功能,这种特性使用和Soft

3D同样的驱动,可以在需要的时候自动切换到Soft 3D模式。你可以选择是否只使用硬件GPU或者允许自动切换到Soft 3D。

如果想要实现最好的性能表现,可以使用VMware vDGA,其将每个GPU只分配给某个虚拟桌面。还使用了DirectX和OpenGL的最高执行标准。

需要注意的一件有意思的事情是由于Citrix VDI可以运行在多个hypervisor当中,所以如果Citrix XenDesktop运行在VMware ESXi当中,其也可以使用vSGA和vDGA。

GPU的新特性

Nvidia的vGPU过去很长时间都只支持Citrix

XenServer,但是Nvidia宣称其将会在2015年前扩展对于VMware vSphere

hypervisor的支持。针对运行在云中,需要大量图形处理能力的应用程序,VMware和Nvidia同样为Horizon DaaS(桌面即服务)平台增加GRID支持进行了合作。

Nvidia对其GPU产品进行了持续地改进,包括增加用户密度,针对运行Nvidia Tegra处理器的GPU加速开发Citrix Receiver软件客户端,通过更新vGPU增加对于Windows 8.1和Windows Server 2012 R2的支持。

Hyper-V给虚拟机打Patch虚拟化GPU教程:

创建虚拟机,并创建检查点(恢复使用)

关闭检查点功能

打开powershell,执行以下命令:

# win10为虚拟机名字

$vm = "Win10"


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12000379.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存