远程图形传输系统、方法及云服务器
技术领域
本发明属于计算机系统领域,具体涉及一种远程图形传输显示系统、方法及云服务器。
背景技术
远程图形/桌面协议将远程计算机上的图形/桌面传送到本地设备进行显示,同时将本地设备的操作返回到远程计算机进行响应。远程图形/桌面协议为用户在本地访问远程计算机提供了便利,例如,用户可以使用Windows远程桌面的Microsoft桌面协议(RDP,Remote Desktop Protocol)访问远程的windows计算机等。随着云计算的兴起,此种类型协议的应用场景扩大到虚拟桌面(VDI,Virtual Desktop Infrastructure),可以将云服务器上的虚拟机中的图形/桌面交付给本地客户端进行处理和使用。
免费的远程图形协议有Microsoft RDP、独立计算环境简单协议(SPICE,SimpleProtocol for Independent Computing Environment)、虚拟网络控制台(VNC,VirtualNetwork Console)、TeamViewer、腾讯QQ远程桌面等。商业版的远程图形协议有 CitrixICA、VMware Blast、Huawei HDP等。这些协议分别应用于各自的虚拟桌面产品中,其中Citrix XenDesktop、VMware Horizon、华为FusionCloud占据主流地位。故实际商业用途中,除了以上提到的几家厂商外,都需要研发自己的远程传输协议,并且该协议还必须支持3D显示,才能将GPU显存中的图形传送到客户端进行显示。
云服务器中的虚拟机通过虚拟化方式使用图形处理器(GPU,GraphicsProcessing Unit),关于GPU的虚拟化方式,目前通常采用的是:
基于NVIDIA GRID的vGPU虚拟化方案。目前,主要虚拟化产品厂商Citrix、VMware和华为均采用这一虚拟化方式,基于NVIDIA生产的Grid K1/K2,Tesla M6/M10/M60,TeslaP4/P6/P40/P100等型号的GPU,通过虚拟化管理层组件(Hypervisor)完成GPU资源的切分,将GPU切分成一定数量的vGPU,通过时分复用的方式将GPU交付给多台虚拟机使用。Hypervisor也叫虚拟机监视器(Virtual Machine Monitor),是一种运行在物理服务器和操作系统之间的中间软件层,它可以协调访问服务器上的所有物理设备和虚拟机,从而允许多个操作系统和应用共享一套基础物理硬件。当云服务器启动并执行Hypervisor时,它会给每台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。
从NVIDIA 在2013年首次推出vGPU方案到现在,NVIDIA只为XenServer和ESXi这两种虚拟化平台提供了配套的“管理软件”,这两种虚拟化平台分别对应的就是Citrix、VMware和华为的虚拟化产品,而目前市场上的其他虚拟化产品厂商无法使用NVIDIA GRID的vGPU方案,并且,由于是通过时分复用的方式将GPU交付给多台虚拟机使用,每个用户分得的GPU能力会损耗和被限制,存在图形延迟和图形帧率限制。并且,以前的虚拟机使用的由软件虚拟出的实际不存在的逻辑显卡,所有的图像信息被打包给这个虚拟显卡,但是虚拟显卡的命令是由CPU执行的,所以说实际上你运行虚拟机的时候图像信息和其他命令都是交给CPU的,效率很差。
上述现有技术存在以下不足之处:
对于采用vGPU方案的虚拟化产品而言,通过软件的时分复用的方式将单个GPU显存平均分给每个用户,实际上每个虚拟机并不能完全利用单个GPU的性能,造成工作站的工作效率不高;并且,一个GPU核心被多个用户并发访问,在当前PCI-e总线带宽和编码技术的限制下,每路编码的图形速率(也就是vGPU的帧率)通常被限制在60Hz以内,无法满足更高帧率的使用场景的需求。
发明内容
本发明的目的是提供一种远程图形传输系统、方法及云服务器,以提高GPU利用率、满足高帧率的使用场景需求。
本发明的上述技术目的是通过以下技术方案得以实现的:
一种远程图形传输系统,包括云服务器和客户端,其特征在于:
所述云服务器用于运行虚拟机,以通过挂钩Hook程序对加载到所述虚拟机上的图形处理器GPU显存中的、供与所述虚拟机相关联的客户端显示用的图形进行捕获;
所述客户端用于对从所述虚拟机传来的所述图形进行显示。
优选地,所述云服务器包括:
捕获模块,用于通过Hook程序对加载到所述虚拟机上的所述GPU显存中的、供与所述虚拟机相关联的客户端显示用的图形进行捕获;
发送模块,用于将所述捕获模块所捕获的所述图形发送到所述客户端进行显示;以及,
代理模块,用于配置所述图形的输出参数。
优选地,所述输出参数为:根据与所述虚拟机相关联的所述客户端显示能力所设定的所述GPU的帧率。
优选地,所述GPU的帧率大于60赫兹。
优选地,所述服务器还包括:
虚拟化管理层组件,用于在云服务器的硬件设备与所述虚拟机的操作系统之间实现所述硬件设备物理资源的抽象以及对所述虚拟机的管理。
优选地,所述客户端还用于与所述虚拟化管理层组件通信以交互控制信息、协商并配置工作参数。
优选地,所述Hook程序为DirectX Hook或OpenGL Hook程序;所述图形为远程桌面图形。
本发明还提供一种云服务器,所述云服务器用于运行虚拟机,所述云服务器包括:
捕获模块,用于通过Hook程序对加载到所述虚拟机上的GPU显存中的、供与所述虚拟机相关联的客户端显示用的图形进行捕获;以及,
发送模块,用于将所述捕获模块所捕获的所述图形发送到所述客户端进行显示。
优选地,所述图形的输出参数为:根据与所述虚拟机相关联的所述客户端显示能力所设定的所述GPU的帧率,所述GPU的帧率大于60赫兹,所述Hook程序为DirectX Hook或OpenGL Hook程序;所述图形为远程桌面图形。
本发明还提供一种远程图形传输方法,包括:
运行于云服务器上的虚拟机通过hook程序对加载到所述虚拟机上的GPU显存中的、供与所述虚拟机相关联的客户端显示用的图形进行捕获;
所述云服务器将所捕获的所述图形传输至所述客户端;
所述客户端对所述远程桌面图形进行显示。
本发明具有以下有益效果:提供一种远程图形传输显示系统、方法及云服务器,云服务器上的虚拟机利用Hook程序对加载到该虚拟机上的GPU显存中、供与虚拟机相关联的客户端显示用的图形进行捕获,所捕获的图形传输客户端进行显示。这样,在云服务器中的具有GPU资源的虚拟机的桌面画面就可以在网络可达的客户端进行显示,并且可以充分利用GPU资源进行高帧率图形输出,以满足使用要求更高的使用场景需求。
附图说明
图1示出了本发明实施例的远程图形传输系统的整体结构示意图;
图2示出了本发明实施例的远程图形传输系统的具体结构示意图;
图3示出了本发明实施例的通过Hook的方式对GPU显存中的图形进行捕获的流程示意图。
图4示出了本发明实施例的远程图形传输方法的流程示意图。
具体实施方式
以下结合附图和实施例对本发明作进一步详细说明。
本发明实施例能够基于NVIDIA和AMD的所有类型GPU实现GPU直通,比如GeForce系列、Quadro系列和Tesla系列GPU,获取云服务器中这些GPU显存中的图形,然后将这些图形发送到客户端显示,也即实现本发明实施例所称的远程图形传输。在GPU直通的实现过程中,不依赖NVIDIA NVFBC和AMD RapidFire接口,就可以获取GPU中的图形。这使得GPU直通虚拟化可以支持NVIDIA和AMD全系GPU。不受GPU厂商提供的接口限制。
图1示出了本发明实施例的远程图形传输系统的整体结构示意图。该远程图形传输系统包括云服务器1和客户端2。云服务器可以是位于网络侧(与客户端所在用户侧相对)的单个物理服务器或者由多个物理服务器通过网络连接而组成的群组。图1中GPU11的数量为N个(N≥1,下同),相应地,虚拟机12和客户端的数量也为N个,每个虚拟机由一个GPU服务,每个客户端由一个虚拟机服务。在实际应用中,GPU的数量受到PCI-e 通道(PCI-eLanes)数量的限制,例如,在采用Xeon E5 V4双路的服务器中有84条PCI-e通道,一般情况下,单台服务器中的GPU数量为8。
在远程图形工作站的使用场景中,客户端可以为任何终端,例如平板电脑、笔记本电脑、瘦客户端、移动终端、电视机顶盒等资源受限的设备等。客户端内部包括GPU虚拟化客户端模块,通过该GPU虚拟化客户端模块与云服务器中的虚拟化管理层组件建立通信连接。连接成功后,客户端可看到云服务器上的对应虚拟机中的画面,通过客户端可对虚拟机进行操作。所有的计算和存储都在云服务器中进行,客户端负责显示和操作,从而通过轻量化的客户端实现高负载的图形设计工作。
当虚拟机在云服务器上运行时,虚拟机通过使用DirectX Hook或OpenGL Hook方法,捕获加载到该虚拟机上的GPU显存中的、供与该虚拟机相关联的客户端先使用的图形数据,这样,能够适用于所有的GPU,使得GPU在虚拟化环境下都能对外输出图形。
图2示出了本实施例提供的远程图形传输系统的具体结构示意图。远程图形传输系统同样包括云服务器和客户端。通过借助云服务器的图形处理能力,客户端能够获得良好的用户体验。
云服务器运行有虚拟机并配置有GPU。云服务器具体还包括:虚拟化管理层组件(Hypervisor)13,虚拟机包括有:捕获模块121、发送模块122及代理模块123。
其中,捕获模块用于通过Hook程序对加载到虚拟机上的GPU显存中的、供与该虚拟机相关联的客户端显示用的图形进行捕获;发送模块用于基于远程传送协议(“zVision桌面传输协议”)将捕获模块所捕获的图形发送到上述客户端进行显示;代理模块用于配置上述图形的输出参数,具体的,该输出参数为:根据与虚拟机相关联的客户端显示能力所设定的GPU的帧率,该GPU的帧率可大于60赫兹。
虚拟机配置有操作系统。虚拟机中的代理模块用于控制和实现虚拟化管理层组件(Hypervisor)和虚拟机之间的通信,例如控制客户端的USB设备通过虚拟化管理层组件重定向到虚拟机中。具体地,当代理模块通过虚拟化管理层组件接收到来自客户端的操作命令时,代理模块控制捕获模块通过Hook的方式对加载到虚拟机上的GPU显存中的、供与虚拟机相关联的客户端显示用的图形进行捕获,GPU将这些截取到的图形数据通过自带的视频编码器进行编码,编码所得的数据通过发送模块发送给客户端,其中,代理模块还可以进行图形输出参数的配置。虚拟机的操作系统可以是Window、Linux等操作系统,当客户端连接到云服务器后,看到的就是该操作系统的画面。这种方式解决了将GPU中的图形截取并编码的过程。其中,代理模块用于虚拟化管理层组件和虚拟机之间的通信,比如代理模块可以控制客户端的USB设备通过虚拟化管理层组件层重定向到虚拟机中。
在本实施例中,通过Hook的方式对GPU显存中的图形进行捕获,具体可通过如图3所示的方式实现:首先,为了捕获应用程序对真实图形库的调用,以捕获应用程序对图形库的操作行为,通过动态库加载伪图形库,例如:通过伪造的createdevice创建图形设备IDirect3DDevice9(D3D9.dll);然后,为了真正使应用程序对图形库的操作发生作用,需要转发对图形库功能的调用,也就是需要记录device指针,应用程序对图形库功能的调用以将图形渲染到Backbuffer上,整个过程要经历坐标变化、顶点着色、光栅化、像素着色等过程,这些过程所对应的方法都属于Device,而createdevice是所有这些操作的前提;将图形渲染到Backbuffer上时,图形并没有真正显示到显示器,接着,则需要调用伪造的Present,从而将Backbuffer中的图形进行复制,从而完成通过Hook的方式对GPU显存中的图形进行捕获。
虚拟化管理层组件(Hypervisor)位于云服务器的硬件设备和虚拟机操作系统之间,用于完成硬件设备物理资源的抽象,对虚拟机进行管理,其通过IOMMU进行中断重映射和DMA重映射,将GPU资源透传给虚拟机,通过Hook的方法获取GPU中的图形,并调用GPU对这些图形进行编码。这种方式使得虚拟机能获取GPU资源,并获取虚拟机桌面的画面,进行图形编码后发送出去。
通过代理模块对捕获模块的图形输出参数进行设置,将图形的输出参数设定为等于GPU的刷新率,GPU的刷新率和捕获装置设置的参数高于60赫兹(Hz),既可以向客户端发送高于60Hz的图形。
将编码后的图形数据通过网络传输给客户端,客户端对所述图形数据进行解码后,发送给显示器进行显示。
客户端包括GPU虚拟化客户端21、图形显示模块22及解码模块23。其中,GPU虚拟化客户端用于与虚拟化管理层组件通信以交互控制信息、协商并配置工作参数。客户端包括有显示器,客户端将解码所得图形数据发送给显示器进行显示(比如接收到H.264编码数据,则进行H.264解码)。
在此之前,客户端和云服务器进行通信,通过传递控制信息,相互协商客户端与云服务器之间的工作参数。然后客户端根据协商好的工作参数对图形显示模块进行配置,虚拟化管理层组件对发送模块和代理模块等的工作参数进行配置。代理模块随后对捕获模块的工作参数进行配置。
相应地,本发明实施例还提供了一种远程图形传输方法,包括如图4所示的流程:
401,运行于云服务器上的虚拟机通过hook程序对加载到所述虚拟机上的GPU显存中的、供与所述虚拟机相关联的客户端显示用的图形进行捕获;
402,所述云服务器将所捕获的所述图形传输至所述客户端;
403,所述客户端对所述远程桌面图形进行显示。
整套系统通过以上数据处理过程,完成了GPU显存内容的捕获(含编码)、发送、解码和显示。
本具体实施例仅仅是对本发明的解释,其并不是对本发明的限制,本领域技术人员在阅读完本说明书后可以根据需要对本实施例做出没有创造性贡献的修改,但只要在本发明的权利要求范围内都受到专利法的保护。