GPU虚拟化的状况
虚拟化技术发展到现在,已经比较成熟了。CPU、内存、存储、IO设备等都已经可以虚拟化,可以实现多个虚拟机实例共享同一硬件资源。
而GPU(图形处理器单元)作为计算机的一个很重要的组成部分,其浮点运算和并行运算速度可以比CUP都强。但是在虚拟的技术中,QEMU对GPU虚拟的支持,很长时间都是纯粹的软件模拟,并没有充分利用硬件GPU的资源,性能大大折扣/
GPU密集型工作性负载,对高性能GPU虚拟化的需求越来越强烈。如:
- 3D/2D 图形加速
- 游戏
- VDI
- Media Transcoding 视频会议,
- CDN 高性能计算(GPGPU)
- OpenCL/CUDA
AMD:
其GPU虚拟化解决方案是完全基于业界标准的SR-IOV(单根输入输出虚拟化)。这是由PCI SIG组织开发的一种规范,为设备的硬件虚拟化应用提供了标准化方法。其能够允许多达15个虚拟化桌面共享同一个图形处理器,其最终用户就能够同等地访问GPU,无论他们是何种工作负载,而且不会有任何性能上的损失。
SR-IOV标准允许一个GPU给多个虚拟机共享使用,因此为每一个用户都提供了虚拟化的性能进行设计、创造并且执行他们的工作负载,而没有一个用户会占据整个GPU。由于硬件的复杂性,目前支持的GPU厂商只有AMD。
NVIDIA:
没有像AMD那样使用的基于硬件的GPU虚拟化技术。其虚拟化方案是称为Grid桌面虚拟 化技术,该技术是基于它最新的Tesla GPUs的。NVIDIA的虚拟化方案比较有意思的一个特色是可以虚拟出几种不同model的虚拟显卡。 FloridaAtlantic University基于NVIDIA GPU 虚拟化方案的VDI已经有几年历史了,他们称,可以使用8-12个虚拟化桌面同时共享一个GPU 板卡。
有关NVDIA的GPU虚拟化的更多介绍请参考其官方
http://www.nvidia.cn/object/nvidia-grid-cn.html
IntelGPU虚拟化解决方案:
API转发(GVT-S)
将openGL或者DirectX的API转发给host上的Graphics Driver上
优点:性能佳、可以共享。
缺点:功能滞后。
直通设备(GVT-d)
利用VT-d将显卡直通给虚拟机。
优点:性能佳、功能完备。
缺点:不能共享。
完全GPU虚拟化(GVT-g)
优点:性能佳、功能完备、可以共享
Intel的完全虚拟化解决方案包括软件和硬件方案。可以将GPU直通给多个虚拟机,可以在性能,功能,共享方面达到很好的平衡。
由于在共享和性能方面的平衡,intel的GVT-g 是很值得推荐的。
Intel KVMGT技术
KVMGT 是Intel? 完全GPU虚拟化(GraphicsVirtualization Technology GVT-g) 的KVM实现,是VGT-g的纯软件方案。其mediatedpass-through相当于软件实现的GPU分时复用,不同于SR-IOV。
KVMGT从intel的broadwell处理器开始支持。
其性能:
3D性能可以达到host的80%以上。
2D性能可以达到host的70%以上。
Media解码能力可以到host的90%以上。
Media转码能力可以到host的80%以上。
guest为windows的3D/2D性能与HOST对比。
KVMGT支持的Features
可以运行native的driver。
- DirectX*11.1
- OpenGL*4.2
- OpenCL*1.2
- MediaSDK16.2
- DirectX*12
支持的不同操作系统的guest数量:
- MultipleVMs up to 7
- SupportUbuntu* Guest
- SupportWindows* 7 x32/x64
- SupportWindows* 8 x32/x64
- GuestWindows* 10 x64
目前支持的远程显示协议:
虚拟化技术in openstack
目前,Openstack 对于AMD的GPU虚拟化是应该支持的。因为AMD每个SRIOV的GPU可以作为PCI设备pass-through到guest。
Citrix 提出了2个版本的方案支持Nvidia和 XENGT(VGT-G的XEN实现)。
第一个版本是基于on-demand的方案,社区感觉有些复杂。之后他们提出了一个新的方案,pre-define的方案。pre-define的方案,预先定义虚拟的GPU(VGPU),定义好之后,数量不能修改了,并且通过openstack的代码,做hack,将每个pre-define的VGPU作为SRIOV设备,并且每个设备分配一个虚拟的PCI BDF号,该BDF号只有Openstack可见。社区比较倾向这个方案,但是还没有得到approve, upstream还需要时日。
对于KVMGT,可以在Citrix实现基础上,比较容易的实现。
对于企业来说,如果业务需求,需要GPU的虚拟化,自己完全可以很快的基于Openstack实现自己私有的GPU虚拟化方案,没有必要依赖社区。
转载自:http://www.360doc.com/content/16/0825/10/35405893_585770716.shtml