GPU虚拟化与流渲染的兴起的背后~
我前面结合Unity和UE4写过一篇关于流渲染的文章,后台有不少小伙伴咨询这个技术到底怎么样,虽然我不想再谈这个话题了,但是结合最近的一些动向和小伙伴的需要再聊点边角料。其实这个技术并不是一个新技术,只是针对GIS或者智慧城市领域来说算是一个“非主流”的技术,无论是像素流还是流渲染都不是突然出现的,这个技术的溯源要追踪到云游戏这个赛道上来,而且云游戏的发展有很长的一段时间的历史。
什么是云游戏?
云游戏是一种以云计算技术为基础的在线游戏方式。游戏中的所有计算(包括画面渲染、数据同步、交互逻辑等)全部在 云端服务器进行,并通过互联网接受玩家的输入指令,同时将处理完成后的最终画面结果显示在玩家的前端设备上。在云 游戏场景下,用户的游戏设备只需要具备基本的视频解压能力和联网功能即可,而无需任何高端的处理器或显卡。
在2009年的时候,这个技术就已经出现了,美国有家叫Onlive 的公司第一个推出云游戏服务,但是他最终在商业上还是失败了,技术最后被索尼公司收购,并运用在PS Now上。随着5G和云计算的成熟,云游戏重新存在了生根发展的土壤,云游戏的方向也被各大巨头锁定,谷歌、微软、索尼、Facebook、NVIDIA、Valve、腾讯,以及各大游戏厂商也都在布局云游戏业务,根据艾瑞的行业研究报告显示,预计至2024年,云游戏市场收入规模将达到420.1亿元;用户规模将达到2.1亿人。主打平台运营的云游戏厂商,将占据市场的主导地位(具体行业报告,文末有下载方式)。
谷歌Staida于2019年11月正式上线,只要玩家使用专属游戏控制器,即可在 PC、 Chromecast通过视频流游玩 4K 60fps HDR 的高画质游戏,串流最高支持4K/60帧和5.1声道,月服务费为9.99美元。
微软的云游戏服务xCloud,也已于2019年12月开启内测,玩家只需要一台Android 6.0以上的手机、Xbox无线手柄以及最低10M的网络,就可在移动端畅享Xbox的主机大作。并且,凭借微软自家优势,xCloud云游戏还有望与Windows 10系统整合。
NVIDIA 10月份正式宣布开放GeForce Now云游戏服务,GeForce Now允许几乎任何设备PC,Mac,TV(带有Nvidia Shield)或Android移动设备的用户从云端中访问并流畅游玩游戏,拥有免费版和创始人版(付费)两种类型,其中免费版仅仅给予60min游戏时间,并限制游玩设备,,而创始人版本的Nvidia云游戏服务GeForce Now,则是售价5美元/月。
亚马逊 9月份推出云游戏Luna,Luna采用的是基于Windows的EC2 G4服务器,由Intel Cascade Lake CPU和NVIDIA T4 GPU驱动。亚马逊的主要选择是Luna Plus,Luna Plus的入门价格为每月6美元。带宽要求方面,Luna对于1080p游戏至少要求10 Mbps的带宽,对于在4K分辨率下玩游戏则至少需要35 Mbps的带宽。目前大多数游戏仅支持1080p流式传输,只有部分标注了4K的可以进行4K流式传输。流式传输的设备范围方面,到目前为止,已经覆盖了Mac,PC,iPhone和iPad(即将支持Android),以及Fire TV设备。
以上都是国外的厂商,其实国内的厂商阿里云也推出了云游戏解决方案,根据官方云游戏解决方案的介绍,游戏厂商只要将游戏包体(.apk、.exe等)交付阿里云,阿里云会快速对其进行云游戏转化,对游戏包体无侵入,同时厂商还可以使用阿里云提供的SDK快速发布属于自己的云游戏平台。
云游戏虽然是一个很好的思路但是在如下四个方面还是存在一定的技术挑战:
第一个是实时性
游戏的整体延迟包括了游戏逻辑运算时间、音画渲染的时间,加上编码的延时、网路传输的延时、客户端解码的延时、客户端向服务端发送控制信息的延时,云游戏的实时性要达到一个可令玩家接受的程度,这个技术挑战是非常高的,当然也要依靠硬件和网络本身的性能,如果没有足够的带宽也不可能做到。根据上面几个厂家对于云游戏的使用条件对网络的最低要求基本上都是10 Mbps,但是对于智慧城市的使用场景一般对于延时的要求没有游戏那么高,同时一般智慧城市的应用都在一个网络中使用,场景比较单纯不用刻意考虑To C端复杂的使用情景。
第二是虚拟化技术
对于云端渲染有一个最大的问题就是并发的问题,现在的Web端可视化渲染是在前端完成,虽然也是单例的,但是可以利用前端设备的算力,服务端主要是做数据和计算的支撑,不用支持每个用户的场景渲染,但是如果渲染放到后端就需要后端能够为每个用户提供渲染服务,因而后端就必须要通过虚拟化手段来进行用户的隔离。通用的游戏虚拟化有两种手段:
第一个是通过虚拟机虚拟+GPU的虚拟化(下面介绍),借助虚拟机的环境隔离能力来为每个用户提供一个一致化的使用环境;
第二个市通过API Hook的方式,这种方式可能使用过C/C++的开发人员会比较熟悉,主要就是把游戏所用到的系统 API 全部hook接管,让游戏认为自己运行在一个正常的 OS 上面,但实际上是一个被接管的OS,这种方案我读书期间的实验室就利用这种方式来改造三维软件使其支持虚拟的立体成像。这样做的好处是性能损耗很小,基本上没有额外的损耗,但是比较痛苦的要针对每个 API 做适配,需要对每个游戏进行适配,而且游戏通常不开源,游戏开发商通常也不会配合你去修改代码,需要一些 hack 技术来针对每个游戏做适配。
第三是经济性
每个并发用户的服务器硬件成本关系到这个模式能否成功商业化,如果成本超出了用户可接受的范围,那就没有办法实现盈利。
第四是运维管理
云游戏的运维管理跟传统的服务器运维管理不一样,因为用到的服务器硬件不一样,同时硬件负载又很高,这对运维管理提出了新的挑战,所以在技术上就要解决这些问题。
第一点问题的解决要依靠基础网络设施的提升,比如现在正在大规模推进的5G,其余三点技术挑战的解决其实核心都需要依赖一个技术组合:虚拟机+GPU的虚拟化。通过将GPU虚拟化是一个能够兼顾经济性和安全性的方案,将图形处理器(GPU)放置在数据中心的虚拟化服务器资源上,用户共享GPU计算资源,提高了昂贵的GPU资源的使用效率,另外一个方面,用户所有的数据都保存在数据中心,用户本地不保存任何数据,IT管理员可以对数据中心里面的VM实施集中的安全管控,大大提高了数据安全性。
正常情况下我们在使用虚拟机的时候一般不会特意关注3D的使用情况,因为我们一般不会在虚拟机中使用3D的应用,性能太差,因为一般情况的虚拟机使用的是“软 3D”的技术,这是VMware自己开发的一个 VGA 驱动(内嵌在VMware Tools中),该驱动能够通过软件实现OpenGL或者DirectX的部分接口,然后图形处理程序调用该VGA驱动来进行图形处理。需要指出的是,该VGA驱动没有使用任何GPU的硬件处理能力,完全利用CPU来进行图形处理,它的图形处理能力是很有限的,只有在CPU的负载不大,某些非常轻量级的图形处理运算,我们才可以考虑该技术。
但是对于云端渲染对GPU的要求比较高,自然希望是能够绕过操作系统直接使用GPU的能力,这样才能够保证性能,这个时候一个很关键的技术的出现,使得这一需求得到满足,这个技术就是“GPU直通”。GPU直通是也叫GPU pass-through直通,是将PCI插槽上的物理设备(这里指GPU设备)绕过OS层,直接提供给了VM。一般情况下PCI设备提供到VM,是需要经过OS层面的设备驱动,经过OS识别到该PCI设备,再将物理设备模拟提供给了VM。这个时候一个物理显卡的计算资源被一台虚拟机所独占,所以通过这个直通的方案是可以支持多块物理显卡。
GPU直通虽然是已经是在技术上比软3D更进一步了,但是在GPU的利用效率上还是不足的,一个GPU只能被一个虚拟机独享,这显然太大手笔了,为了提高GPU的利用率是不是可以将一个GPU分配给很多个虚拟机使用?这个技术就是GPU的“分片虚拟化”,此处的分片从两个维度上来定义:其一,是对GPU在时间片段上的划分,与CPU的进程调度类似,一个物理GPU的计算engine在几个vGPU之间共享,而调度时间片一般都在1ms-10ms左右,是一种分时复用方案;其二,是对GPU资源的划分,主要是指对GPU显存的划分,以NVIDIA为例,一个物理GPU带有16GB的显存,那么按照16个vGPU来划分,每个vGPU得到1GB的显存。由于安全隔离的要求,每个vGPU独享分配给它的显存,不会与其他vGPU共享。
GPU分片虚拟化的方案被NVIDIA与Intel两家GPU厂家所采用。NVIDIA GRID vGPU系列与Intel的GVT-g,但是由于GVT-g是基于Intel的集成显卡,即便是免费附加增值服务,GVT-g在数据中心也很少被采用,目前大多数云厂商的还是基于NVIDIA vGPU方案。
GIS本身就是一个交叉融合的学科,在制图技术方面GIS也吸收了很多游戏的解决方案,比如有段时间很流行的仿真2.5D地图就是受到游戏固定视角地图的启发而吸收进来,游戏领域在可视化渲染方面有着深厚的积累和很多创新的探索,任何技术的开始都是高门槛的,但是随着技术的持续成熟,这项技术逐渐也就走向了普惠,云游戏的再次被拾起来也说明了这项技术已经经历过了一个低谷,并在逐渐走向成熟,更加的普惠,正如王坚所说,“过去的技术让你比较精准,未来的技术我们要保证世界上每一个该得到帮助的人,一个都不能少。精准是从一百个人里面挑一个人出来,一个都不能少就是一百个人都应该服务到。”
公众号后台回复“虚拟化”获取云游戏行业分析报告!