NVIDIA与Citrix合作并于2012年推出了首款硬件虚拟GPU,也就是我们常说的vGPU。
现在vGPU的硬件技术由NVIDIA、AMD、Intel提供,它可结合KVM、Citrix Xen Server、VMWare ESXi、微软Hyper-V等虚拟化平台,为虚拟机提供硬件绑定的vGPU,从而使多个虚拟机同时拥有独立显卡设备以提高图形计算能力。当然,虚拟机3D应用显示仍然需要配合对应的远程显示协议才能获得良好的体验。
开源社区对vGPU实现的尝试可以最早追溯到2003年开始酝酿的Virtual GL项目,它主要提供给用户带有3D硬件加速的X Windows远程访问功能,同时也是现在诸多优秀远程桌面协议的主要借鉴对象之一。再后来一段时间内,社区在vGPU方面没有太多发展,直到2014年左右出现了XenGT/KVMGT和Virgil 3D项目。这两个适合虚拟化的开源vGPU项目将很可能是未来几年中私有云厂商的重点研究对象,笔者接下来也将对它们的实现与部署进行简单介绍。
1.XenGT/KVMGT
Intel在vGPU方面的技术主要有GVT-d、GVT-s、GVT-g,它们都依赖于Intel Core 4代及其以后的处理器。其中最有对私有云厂商最有价值的是GVT-g,主要功能是使用Intel处理器的内置显卡向多个虚拟机提供完全虚拟化的GPU。
这个项目对Xen和KVM两种虚拟化技术对应提供了XenGT和KVMGT,读者可以从Github上下载其源码。本书成文时它们仍处于开发阶段,尚不明确其下一步方向,也许最终产品形式是类似DPDK、SPDK的GPDK,也可能是支持类似SR-IOV技术的专门设备。
以实现KVMGT为例,我们需要修改内核中的显卡驱动模块与KVM,并在QEMU添加相关设备模型参数,其中使用的CPU型号为i5-4460,操作系统为Ubuntu 14.04。
首先编译安装内核并重启。
重启主机后编译QEMU。
然后启动虚拟机,并指定VGA类型为vgt即可,某些操作系统可能需要定制的显卡驱动才能识别到vgt设备,具体内容可参考项目文档。
此时虚拟机内的显卡设备即为Intel HD 5000,且显存大小可通过修改/sys/kernel/vgt/control/available_resources进行设置,此文件的详细内容可参考官方内核文档说明,如下所示。
2.Virgil3D(www.xing528.com)
Virgil 3D项目即是QEMU 2.4中开始出现的virtio-gpu,它基于virtio标准,使用Mesa实现OpenGL显示加速,这点不同于VMWare基于DirectX 9实现的vGPU,前者完全开源且不依赖于物理GPU设备。
目前Virgil 3D的开发仍处于初级阶段,但发展十分迅速,比如QEMU 2.4版本时它仅支持2D加速,而2.5版本则开始支持带有3D加速能力的本地GTK3显示协议,2.6版本更是与spice协议进行了初步集成。由于它的vGPU实现不与外部的物理显卡绑定,所以其缺点也比较明显,即渲染能力较差一般不能用于大型3D应用。尽管如此,它的出现使得私有云的厂商与客户多了一个选择,不再限制于以往的vGPU商业硬件和软件了。
接下来笔者仍以Fedora 23系统作为主机系统,使用QEMU 2.6启动Windows 7虚拟机,并用基于Socket的spice协议连接到控制台来展示Virgil的简单使用。
首先,先下载并编译最新的QEMU。过程中需要用到spice-gtk-0.31以及spice-server-0.13.1,我们除了自己编译外,也可以直接使用开发者提供的预编译版本。
然后以本地显示模式启动虚拟机即可。
截至本书成文时,Virgil已经提供了对基于套接字spice协议的支持,同时libvirt的域定义中也加入了视频设备参数accel2d与accel3d。
3.NVIDIA vGPU
NVIDIA vGPU的早期商业尝试是在GRID K1/K2显卡上,仅支持VMware与Citrix等主流商业平台。后来与RedHat、Intel共同开发出新的vGPU技术——VFIO MDEV,从而在KVM平台下也能使用(需要license授权),支持包括现在的Tesla系列、GRID系列等专用GPU。这里需要说明的是,NVIDIA vGPU除去3D之外,也可用于较为简单的计算场景,比如机器学习的开发测试。
4.AMD vGPU
AMD vGPU技术采用了成熟的SR-IOV技术,可以在任意平台中使用,且无需授权即可使用。相较于NVIDIA vGPU,AMD vGPU一般仅用于桌面环境,较少在计算场景中使用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。