3D渲染方法及系统与流程

文档序号:23342636发布日期:2020-12-18 16:40阅读:160来源:国知局
3D渲染方法及系统与流程

本申请涉及虚拟云桌面技术领域,尤其涉及3d渲染方法及系统。



背景技术:

随着云端虚拟化技术的迅速发展,公有云平台和私有云平台得到了进一步的发展,这便对虚拟桌面云平台提出了进一步的细分需求。当前,根据用户的使用行为,虚拟云桌面逐步细化出了云桌面办公用户、2d/3d设计开发用户以及3d游戏娱乐用户。在当前的技术条件下,针对云桌面办公用户的需求,桌面云提出了许多解决方案,比如qemu(虚拟操作系统模拟器)结合spice协议开源项目。而对于2d/3d设计开发以及3d游戏娱乐这两类用户,则需要云端虚拟出来能够渲染3d应用的虚拟显卡。

目前,针对虚拟机的3d渲染需求一般有如下的三种解决方案:

第一种是在云端宿主机中安装多个物理gpu(graphicsprocessingunit,图形处理器)显卡,并借助passthrough技术将单个物理gpu显卡映射到每个客户的虚拟机中作为该虚拟机的物理显卡来使用,其原理示意图可参见图1,虚拟机通过passthrough到虚拟机的物理显卡实现对3d指令的渲染。

第二种是在云端宿主机中安装单个物理gpu显卡,并借助vgpu(虚拟gpu)技术将单个物理gpu显卡虚拟成多张vgpu显卡,并将这多张vgpu逐个映射到客户的虚拟机中作为虚拟显卡来使用,其原理示意图可参见图2,虚拟机通过vgpu显卡实现对3d指令的渲染。

第三种是虚拟机虚拟显卡方案,每个虚拟机通过各自的虚拟gpu显卡将渲染请求发送给宿主机,宿主机利用物理gpu显卡完成真正的渲染,其原理示意图可参见图3。

在上述的解决方案中,第一种方案实现简单,但每个虚拟机在启动时就要绑定好gpu硬件并独占使用,而实际运行当中可能根本不需要使用到gpu,从而造成gpu资源的浪费。第二种方案的技术实现相对复杂,需要gpu硬件支持,而且该功能一般限定在某些特定厂家的特定型号的gpu,价格昂贵,使用成本高。第三种方案最为灵活,虚拟机启动和运行中都不需要绑定至固定的gpu硬件,宿主机也不需要选择特定厂家特定型号的gpu硬件,从成本考虑也最优,因此,第三种方案得到了广泛的应用。

但对于第三种方案,虚拟机同时运行多个3d应用时,虚拟gpu要管理多个渲染上下文环境,每个3d应用都需要独占使用虚拟gpu,而在虚拟gpu内部,所有资源都是公共的,每个3d应用通过各自的渲染上下文向虚拟gpu发起渲染请求,虚拟gpu通过识别不同的渲染上下文环境,响应不同应用的渲染请求。这样,多个渲染任务在访问同一公共资源时,虚拟gpu就需要频繁地进行渲染上下文切换、同步、排队等操作,从而影响系统的性能。



技术实现要素:

本申请实施例提供一种3d渲染方法及系统,能够解决多个3d渲染任务访问同一公共资源时因虚拟gpu需要频繁地进行渲染上下文切换、同步、排队等操作而影响系统性能的问题。所述技术方案如下:

根据本申请实施例的第一方面,提供一种3d渲染方法,该方法包括:

虚拟机获取至少一个3d应用发送的3d渲染指令;

所述虚拟机将每个3d渲染指令发送给与所述3d应用对应的虚拟图形处理器gpu,其中,每个所述3d应用对应有一个独立的虚拟gpu;

虚拟gpu对接收到的3d渲染指令进行解析,得到中间表示ir数据,并将所述ir数据发送给宿主机;

宿主机根据所述ir数据生成目标渲染指令,并将所述目标渲染指令发送给目标物理gpu,以便所述目标物理gpu执行所述目标渲染指令。

本申请实施例提供的3d渲染方法,为每个3d应用设置一个独立的虚拟gpu,虚拟机可以将每个3d应用发送的3d渲染指令发送给该3d应用唯一对应的虚拟gpu,虚拟gpu对接收到的3d渲染指令进行解析,并将得到的ir数据发送给宿主机,宿主机根据该ir数据生成目标渲染指令,并将该目标渲染指令发送给目标物理gpu,以便目标物理gpu执行该目标渲染指令。这样,一个虚拟gpu只负责管理一个3d应用的渲染上下文,从而避免了一个虚拟gpu管理多个渲染上下文环境而导致虚拟gpu需要频繁地进行上下文切换、同步、排队等影响性能的问题。

在一个实施例中,所述虚拟机将每个3d渲染指令发送给与所述3d应用对应的虚拟图形处理器gpu包括:

所述虚拟机判断是否为所述3d应用创建了对应的虚拟gpu;

若已创建,则将所述3d渲染指令发送给所述3d应用对应的虚拟gpu。

在一个实施例中,所述虚拟机在判断是否为所述3d应用创建了对应的虚拟gpu之后,所述方法还包括:

若未为所述3d应用创建对应的虚拟gpu,则为所述3d应用创建对应的虚拟gpu;

将所述3d渲染指令发送给所述3d应用对应的虚拟gpu。

本申请实施例提供的3d渲染方法,虚拟机在获取到3d应用发送的3d渲染指令后,先判断是否为该3d应用创建了对应的虚拟gpu,若已创建,则将3d渲染指令发送给3d应用对应的虚拟gpu,若未创建,则先为该3d应用创建对应的虚拟gpu,然后将3d渲染指令发送给3d应用对应的虚拟gpu。可以保证每个3d应用都有一个独立的虚拟gpu。

在一个实施例中,所述将所述目标渲染指令发送给目标物理gpu之前,所述方法还包括:

宿主机根据预设规则从至少一个物理gpu中选定目标物理gpu。

在一个实施例中,所述宿主机根据预设规则从至少一个物理gpu中选定目标物理gpu包括:

宿主机从其管理的至少一个物理gpu中选择利用率最低的物理gpu作为目标物理gpu。

本申请实施例提供的3d渲染方法,宿主机能够从其管理的至少一个物理gpu中选择利用率最低的物理gpu作为目标物理gpu,然后将目标渲染指令发送给该目标物理gpu,以便该目标物理gpu执行该目标渲染指令。这样,能够以3d应用为最小颗粒进行区分,并将各3d的渲染指令分发至不同的物理gpu硬件,从而避免了一个虚拟机仅对应一个物理gpu,且该虚拟机同时运行多个3d应用时造成的该虚拟机对应物理gpu负担过重的问题。

根据本申请实施例的第二方面,提供一种3d渲染系统,该3d渲染系统包括虚拟机、宿主机、至少一个虚拟图形处理器gpu和至少一个物理gpu,所述虚拟机上运行有至少一个3d应用,每个3d应用对应一个独立的虚拟gpu,所述宿主机包括至少一个物理gpu;

所述虚拟机,用于获取至少一个3d应用发送的3d渲染指令,将每个3d渲染指令发送给与所述3d应用对应的虚拟gpu;

所述虚拟gpu,用于对接收到的3d渲染指令进行解析,得到中间表示ir数据,并将所述ir数据发送给所述宿主机;

所述宿主机,用于根据所述ir数据生成目标渲染指令,并将所述目标渲染指令发送给目标物理gpu;

所述物理gpu,用于执行接收到的目标渲染指令。

本申请实施例提供的3d渲染系统,包括虚拟机、宿主机、至少一个虚拟gpu和至少一个物理gpu,虚拟机上运行有至少一个3d应用,每个3d应用对应一个独立的虚拟gpu,宿主机包括至少一个物理gpu。该系统为每个3d应用设置了一个独立的虚拟gpu,虚拟机可以将每个3d应用发送的3d渲染指令发送给该3d应用唯一对应的虚拟gpu,虚拟gpu对接收到的3d渲染指令进行解析,并将得到的ir数据发送给宿主机,宿主机根据该ir数据生成目标渲染指令,并将该目标渲染指令发送给目标物理gpu,以便目标物理gpu执行该目标渲染指令。这样,一个虚拟gpu只负责管理一个3d应用的渲染上下文,从而避免了一个虚拟gpu管理多个渲染上下文环境而导致虚拟gpu需要频繁地进行上下文切换、同步、排队等影响性能的问题。

在一个实施例中,所述虚拟机具体用于获取至少一个3d应用发送的3d渲染指令,判断是否为所述3d应用创建了对应的虚拟gpu,若已创建,则将所述3d渲染指令发送给所述3d应用对应的虚拟gpu;若未创建,则为所述3d应用创建对应的虚拟gpu,然后将所述3d渲染指令发送给所述3d应用对应的虚拟gpu。

这样,虚拟机在获取到3d应用发送的3d渲染指令之后,通过判断是否为所述3d应用创建了对应的虚拟gpu,若未创建,则先为该3d应用创建对应的虚拟gpu,然后再将3d渲染指令发送给该3d应用对应的虚拟gpu,能够保证每个3d应用都有一个独立的虚拟gpu。

在一个实施例中,所述宿主机具体用于根据预设规则从所述至少一个物理gpu中选定一个物理gpu,得到目标物理gpu,并将所述目标渲染指令发送给所述目标物理gpu。

在一个实施例中,所述宿主机具体用于从所述至少一个物理gpu中选择利用率最低的一个物理gpu作为目标物理gpu。

这样,可以将同一个虚拟机的多个3d应用的渲染指令,以3d应用为最小颗粒进行区分,并将各3d应用的渲染指令分发至不同的物理gpu硬件,能够避免虚拟机同时运行多个3d应用的渲染任务时造成该虚拟机对应物理gpu负担过重的问题。

在一个实施例中,所述虚拟gpu包括前端驱动和后端驱动;

所述前端驱动运行在所述虚拟机上,用于对接收到的3d渲染指令进行解析,得到中间表示ir数据,并将所述ir数据发送给所述后端驱动;

所述后端驱动运行在所述宿主机上,用于将所述ir数据发送给所述宿主机。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。

图1是现有技术中通过passthrough技术进行3d渲染的原理图;

图2是现有技术中通过将硬件gpu虚拟化来进行3d渲染的原理图;

图3是现有技术中通过虚拟机虚拟显卡的方案进行3d渲染的原理图;

图4是本申请实施例提供的一种3d渲染系统的结构示意图;

图5是本申请实施例提供的一种3d渲染方法的流程图;

图6是本申请实施例提供的一种具体的3d渲染系统的结构示意图;

图7是本申请实施例提供的另一种3d渲染系统的结构示意图;

图8是本申请实施例提供的一种具体的3d渲染方法的流程图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

在本申请实施例中,以虚拟机上运行的3d应用为最小渲染颗粒,为每一个3d应用设置一个独立的虚拟gpu,该虚拟gpu可以将该3d应用的渲染指令下发至选定的物理gpu进行执行。

本申请实施例提供一种3d渲染系统,如图4所示,该3d渲染系统40可以包括虚拟机401、宿主机402、至少一个虚拟gpu403和至少一个物理gpu4021,其中,宿主机402包括至少一个物理gpu4021,比如m(m为大于等于1的整数)个物理gpu4021;虚拟机401上运行有至少一个3d应用,每个3d应用对应一个独立的虚拟gpu,例如在图4中示出了n(n为大于等于1的整数)个3d应用:3d应用1、3d应用2……3d应用n,3d应用1与虚拟gpu1对应,3d应用2与虚拟gpu2对应,……3d应用n与虚拟gpun对应。

具体的,虚拟机401用于获取至少一个3d应用发送的3d渲染指令,将每个3d渲染指令发送给与该3d应用对应的虚拟gpu。比如,在图4中,虚拟机401可以获取3d应用1、3d应用2……3d应用n分别发送的3d渲染指令,将3d应用1发送的3d渲染指令发送给虚拟gpu1,将3d应用2发送的3d渲染指令发送给虚拟gpu2,……,以此类推,将3d应用n发送的3d渲染指令发送给虚拟gpun。

虚拟gpu403用于对接收到的3d渲染指令进行解析,得到ir(intermediaterepresentation,中间表示)数据,并将该ir数据发送给宿主机402。

宿主机402用于根据ir数据生成目标渲染指令,并将该目标渲染指令发送给目标物理gpu;物理gpu用于执行接收到的目标渲染指令。

例如,在图4中,虚拟gpu1接收到虚拟机401发送的3d应用1的3d渲染指令,然后对该3d渲染指令进行解析,得到ir数据,然后将该ir数据发送给宿主机402,宿主机402根据该ir数据生成目标渲染指令,并将该目标渲染指令发送给目标物理gpu,比如发送给物理gpu1,由物理gpu1执行该目标渲染指令。

在一个实施例中,虚拟机401具体用于获取至少一个3d应用发送的3d渲染指令,判断是否为该3d应用创建了对应的虚拟gpu,若已创建,则将该3d应用的3d渲染指令发送给该3d应用对应的虚拟gpu;若未创建,则为该3d应用创建对应的虚拟gpu,然后将该3d应用的3d渲染指令发送给创建的该3d应用对应的虚拟gpu。

在一个实施例中,宿主机402具体用于根据预设规则从至少一个物理gpu中选定一个物理gpu,得到目标物理gpu,并将目标渲染指令发送给该目标物理gpu。

在一个实施例中,宿主机402可以从其管理的至少一个物理gpu中选择利用率最低的一个物理gpu作为目标物理gpu。

在一个实施例中,虚拟gpu403可以包括前端驱动和后端驱动。其中,前端驱动运行在虚拟机401上,用于对接收到的3d渲染指令进行解析,得到ir数据,并将该ir数据发送给后端驱动;该后端驱动运行在宿主机402上,用于将接收到的ir数据发送给宿主机402。

本申请实施例提供的3d渲染系统,包括虚拟机、宿主机、至少一个虚拟gpu和至少一个物理gpu,虚拟机上运行有至少一个3d应用,每个3d应用对应一个独立的虚拟gpu,宿主机包括至少一个物理gpu。该系统以虚拟机的3d应用为最小渲染颗粒,为每个3d应用设置了一个独立的虚拟gpu,虚拟机可以将每个3d应用发送的3d渲染指令发送给该3d应用唯一对应的虚拟gpu,虚拟gpu对接收到的3d渲染指令进行解析,并将得到的ir数据发送给宿主机,宿主机根据该ir数据生成目标渲染指令,并将该目标渲染指令发送给目标物理gpu,以便目标物理gpu执行该目标渲染指令。这样,一个虚拟gpu只负责管理一个3d应用的渲染上下文,从而避免了一个虚拟gpu管理多个渲染上下文环境而导致虚拟gpu需要频繁地进行上下文切换、同步、排队等影响性能的问题。进一步的,虚拟gpu可以将3d应用的3d渲染指令下发至选定的物理gpu,由选定的物理gpu执行渲染过程,能够为每一个3d应用选择合适的物理gpu,不再是一个虚拟机仅能对应一个物理gpu,从而可以避免虚拟机同时运行多个3d应用的3d渲染时造成该虚拟机对应的物理gpu负担过重的问题。

基于上述图1对应实施例的3d渲染系统,本申请实施例还提供一种3d渲染方法,至少可以应用于上述图4对应实施例的3d渲染系统。如图5所示,该方法可以包括如下步骤:

步骤501:获取至少一个3d应用发送的3d渲染指令。

虚拟机上可以运行至少一个3d应用,当该3d应用发起3d渲染指令时,虚拟机获取这至少一个3d应用发送的3d渲染指令。

步骤502:将每个3d渲染指令发送给与3d应用对应的虚拟gpu。

虚拟机获取到至少一个3d应用发送的3d渲染指令之后,将每个3d渲染指令发送给与3d应用对应的虚拟gpu,其中,每个3d应用对应有一个独立的虚拟gpu。

比如,虚拟机上运行有3个3d应用,分别为3d应用1、3d应用2和3d应用3,这3个3d应用分别与虚拟gpu1、虚拟gpu2和虚拟gpu3一一对应。这3个3d应用在运行时分别发起了3d渲染指令,虚拟机则会将3d应用1发起的3d渲染指令发送给虚拟gpu1,将3d应用2发起的3d渲染指令发送给虚拟gpu2,将3d应用3发起的3d渲染指令发送给虚拟gpu3。

步骤503:对3d渲染指令进行解析得到ir数据。

对于每个虚拟gpu,在接收到虚拟机发送的3d渲染指令之后,对该3d渲染指令进行解析,得到ir数据,并将该ir数据发送给宿主机。通过将3d渲染指令解析为ir数据,可以屏蔽虚拟机和宿主机之间的操作系统和渲染环境的差异。

步骤504:根据ir数据生成目标渲染指令。

宿主机接收到虚拟gpu发送的ir数据之后,根据该ir数据生成目标渲染指令。这样可以将ir数据还原为宿主机支持的数据格式,得到目标渲染指令。

步骤505:将目标渲染指令发送给目标物理gpu。

宿主机根据ir数据生成目标渲染指令之后,将该目标渲染指令发送给目标物理gpu,以便目标物理gpu执行目标渲染指令。

具体的,宿主机可以管理至少一个物理gpu,宿主机在根据ir数据生成目标渲染指令之后,可以根据预设规则从这至少一个物理gpu中选定目标物理gpu,比如,可以从这至少一个物理gpu中选择利用率最低的物理gpu作为目标物理gpu。这样,可以将同一个虚拟机的多个3d应用的渲染指令发至不同的物理gpu,一个虚拟机不再仅对应一个物理gpu,可以避免虚拟机同时运行多个重度渲染的3d应用时造成的该虚拟机对应物理gpu负担过重的问题。

本申请实施例提供的3d渲染方法,虚拟机上运行的每个3d应用对应有一个独立的虚拟gpu,虚拟机获取至少一个3d应用发送的3d渲染指令,并将每个3d渲染指令发送给与该3d应用对应的虚拟gpu;虚拟gpu对接收到的3d渲染指令进行解析,得到ir数据,并将该ir数据发送给宿主机;宿主机根据该ir数据生成目标渲染指令,并将该目标渲染指令发送给目标物理gpu,以便该目标物理gpu执行接收到的目标渲染指令。由于一个虚拟gpu只负责管理一个3d应用的渲染上下文,而不是管理多个渲染上下文环境,因而可以避免虚拟gpu需要频繁地进行上下文切换、同步、排队等操作而影响系统性能的问题,提高了3d渲染的系统性能。

为了更加清楚地体现出本申请的目的,在上述实施例的基础上作进一步的举例说明。

基于上述图4对应实施例的3d渲染系统,本申请另一实施例提供一种具体的3d渲染系统,如图6所示,该3d渲染系统40包括虚拟机401、宿主机402、至少一个虚拟gpu403和至少一个物理gpu4021。其中,虚拟机401上运行有至少一个3d应用,每个3d应用对应一个独立的虚拟gpu403。例如,在图6中示出了n(n为大于等于1的整数)个3d应用:3d应用1,3d应用2,……,3d应用n;3d应用1对应虚拟gpu1,3d应用2对应虚拟gpu2,……,3d应用n对应虚拟gpun。实际应用中,宿主机402可以是服务器,该服务器上可以运行虚拟机401,可以负责管理物理gpu4021。

其中,虚拟机401可以包括3d渲染入口模块4011,虚拟机401上运行的至少一个3d应用与该3d渲染入口模块4011通信连接。宿主机402可以包括3d渲染中间指令模块4022、gpu分发模块4023和至少一个物理gpu4021。例如,宿主机402可以包括m=4个物理gpu4021:物理gpu1、物理gpu2、物理gpu3和物理gpu4,这里仅是举例说明,并不用于限定本申请,实际应用中可以是任意多个物理gpu4021。

当虚拟机401上的每个3d应用运行时,若发起3d渲染指令,该3d渲染指令比如可以是opengl(opengraphicslibrary,开放图形库)api(applicationprogramminginterface,应用程序接口)的调用,则会被虚拟机401的3d渲染入口模块4011捕获。具体的,3d渲染入口模块4011的捕获方式可以是以3dapi函数动态库的方式呈现。比如,虚拟机401运行的是linux系统,则3d渲染入口模块4011的捕获方式可以是替换linux系统上的libgl.so动态库,这样,所有基于openglapi开发的3d应用在加载libgl.so动态库时实际加载的便是3d渲染入口模块4011。

进一步的,3d渲染入口模块4011在获取到至少一个3d应用发送的3d渲染指令之后,可以先判断是否已经为该3d应用创建了对应的虚拟gpu,如果已经创建,则继续走渲染流程,将各3d应用的3d渲染指令发送给该3d应用对应的虚拟gpu;否则,为之新建虚拟gpu,然后再各3d应用的3d渲染指令发送给该3d应用对应的虚拟gpu。

例如,如图6所示,假设3d应用1和3d应用2分别发起了3d渲染指令,该3d渲染指令被3d渲染入口模块4011捕获,这时,3d渲染入口模块4011判断出已经为3d应用1创建了对应的虚拟gpu1,则将3d应用1发起的3d渲染指令发送给虚拟gpu1;3d渲染入口模块4011同时判断出还未为3d应用2创建对应的虚拟gpu,则先为3d应用2创建对应的虚拟gpu2,然后将3d应用2发起的3d渲染指令发送给虚拟gpu2。

虚拟gpu403是一个连接并运行在虚拟机和宿主机上的虚拟设备,其可以包括前端驱动4031和后端驱动4032,前端驱动4031运行在虚拟机401上,后端驱动4032运行在宿主机403上。前端驱动4031可以将接收到的3d渲染指令进行解析,得到ir数据,并将该ir数据发送给后端驱动4032;后端驱动4032接收到前端驱动4031发送的ir数据后,将该ir数据发送给宿主机402,具体的,可以是发给宿主机402的3d渲染中间指令模块4022。通过将3d渲染指令解析成ir数据,可以屏蔽虚拟机401和宿主机402之间的操作系统和渲染环境的差异。

宿主机402的3d渲染中间指令模块4022可以为每一路虚拟gpu403创建对应的渲染上下文,并负责将从虚拟gpu403的前端驱动4031接收到的ir数据解析为本机物理gpu4021支持的目标渲染指令,该目标渲染指令可以为3dapi调用,比如可以是vulkanapi的调用,其中的vulkan是一个跨平台的2d和3d绘图应用程序接口。

gpu分发模块4023负责管理物理gpu4021。当3d渲染中间指令模块4022发送的目标渲染指令到达时,能够为该目标渲染指令选择一个合适的物理gpu4021进行渲染。一种实施例中,选择物理gpu的策略可以是以物理gpu的利用率为参考,优先选择相对闲置的物理gpu作为目标物理gpu,即选择利用率最低的物理gpu作为目标物理gpu。这样,同一渲染上下文,也即同一3d应用的渲染便可以在同一个物理gpu上执行。

本申请实施例提供的3d渲染系统,能够以虚拟机上运行的3d应用为最小渲染颗粒,并为每个3d应用创建专有的虚拟gpu显卡,即为每一个3d应用设置一个独立的虚拟gpu,该虚拟gpu可以将该3d应用的渲染指令下发至选定的目标物理gpu进行执行。这样,可以将同一个虚拟机的多个3d应用的渲染指令以3d应用为最小颗粒进行区分,并将各3d应用的渲染指令分发至不同的物理gpu硬件,从而避免了一个虚拟机仅对应一个物理gpu且该虚拟机同时运行多个渲染3d应用时造成的该虚拟机对应物理gpu负担过重的问题;而且,在该方案中,一个虚拟gpu只负责管理一个3d应用的渲染上下文,可以避免因一个虚拟gpu管理多个渲染上下文环境而导致的虚拟gpu需要频繁地进行上下文切换、同步、排队等影响性能的问题,提高了系统的渲染性能。

上述实施例以一个宿主机对应一个虚拟机为例来进行说明,实际应用中也可以是一个宿主机对应多个虚拟机,比如,如图7所示,一个宿主机可以对应两个虚拟机,这两个虚拟机可以分别运行至少一个3d应用,对于每一个虚拟机,其上运行的每个3d应用都对应一个独立的虚拟gpu。宿主机可以对来自这两个虚拟机的3d渲染指令同时进行管理,为每一个3d渲染指令选定目标物理gpu。

基于上述图6对应实施例的3d渲染系统,本申请实施例还提供一种具体的3d渲染方法,至少可以应用于上述图6对应实施例的3d渲染系统。如图8所示,该方法可以包括如下步骤:

步骤801:获取至少一个3d应用发送的3d渲染指令。

虚拟机401上可以运行至少一个3d应用,当虚拟机上的3d应用发起3d渲染指令时,比如发起3dapi调用时,虚拟机上的3d渲染入口模块4011会捕获该3d渲染指令。

步骤802:判断是否为3d应用创建了对应的虚拟gpu。

3d渲染入口模块4011获取到至少一个3d应用发送的3d渲染指令之后,判断是否为该3d应用创建了对应的虚拟gpu节点,即虚拟gpu显卡,若已创建,则执行步骤804,否则执行步骤803。

步骤803:为3d应用创建对应的虚拟gpu。

3d渲染入口模块4011若判断出未为3d应用创建对应的虚拟gpu,则为该3d应用新建一个虚拟gpu节点,然后执行步骤804。

步骤804:将3d渲染指令发送给3d应用对应的虚拟gpu。

3d渲染入口模块4011判断出为3d应用创建了对应的虚拟gpu之后,或者为3d应用新建一个虚拟gpu之后,将3d渲染指令发送给3d应用对应的虚拟gpu。

其中,虚拟gpu是一个连接并运行在虚拟机和宿主机上的虚拟设备,其可以包括前端驱动和后端驱动,前端驱动运行在虚拟机401上,后端驱动运行在宿主机403上。具体的,3d渲染入口模块4011可以将3d渲染指令发送给3d应用对应的虚拟gpu的前端驱动。

比如,虚拟机401上运行的3d应用1和3d应用2分别发起了3d渲染指令,3d渲染入口模块4011捕获到该3d渲染指令之后,判断是否为3d应用1和3d应用2分别创建了对应的虚拟gpu,假设已经为3d应用1创建了虚拟gpu1,而未为3d应用2创建虚拟gpu,则3d渲染入口模块4011会将3d应用1发起的3d渲染指令发送给虚拟gpu1的前端驱动,同时会为3d应用2创建虚拟gpu2后再将3d应用2发起的3d渲染指令发送给虚拟gpu2的前端驱动。

步骤805:对3d渲染指令进行解析得到ir数据。

对于每个虚拟gpu,在接收到3d渲染入口模块4011发送的3d渲染指令之后,对该3d渲染指令进行解析,得到ir数据,并将该ir数据发送给宿主机。通过将3d渲染指令解析为ir数据,可以屏蔽虚拟机和宿主机之间的操作系统和渲染环境的差异。

具体的,由虚拟gpu的前端驱动对3d渲染入口模块4011发送的3d渲染指令进行解析,生成ir数据,然后将该ir数据发送给虚拟gpu的后端驱动;虚拟gpu的后端驱动再将该ir数据发送给宿主机402的3d渲染中间指令模块4022。

步骤806:根据ir数据生成目标渲染指令。

宿主机402的3d渲染中间指令模块4022接收到虚拟gpu发送的ir数据之后,根据该ir数据生成目标渲染指令,比如可以通过解析ir数据生成目标渲染指令,这样便可以将ir数据还原为宿主机402支持的数据格式,得到目标渲染指令。然后,3d渲染中间指令模块4022将该目标渲染指令发送给gpu分发模块4023。

步骤807:选定目标物理gpu。

gpu分发模块4023接收到3d渲染中间指令模块4022发送的目标渲染指令之后,可以根据预设规则从其管理的至少一个物理gpu中选定目标物理gpu。具体的,gpu分发模块4023可以根据宿主机402所管理的各物理gpu的利用率,选择gpu利用率最低的物理gpu作为目标物理gpu。

步骤808:将目标渲染指令发送给目标物理gpu。

gpu分发模块4023选定目标物理gpu之后,将目标渲染指令发送给选定的目标物理gpu。

步骤809:执行目标渲染指令。

目标物理gpu接收到目标渲染指令之后,执行该目标渲染指令。

在本申请中,同一虚拟机的不同3d应用,可以被分发至不同的物理gpu;不同虚拟机的不同3d应用,可以被分发至相同的物理gpu。具体的,分发物理gpu的选择策略可以为优先选择处于闲置状态的物理gpu,这样可以解决宿主机中多个物理gpu忙闲不均的问题。

可以理解的,从渲染数据流角度来看,一个虚拟机运行的3d应用的所有渲染指令,始终发送至宿主机的一个物理gpu,直到该3d应用退出时渲染流程结束,对应的虚拟gpu和物理gpu被释放。可以避免虚拟gpu驱动和物理gpu驱动频繁地进行上下文切换、同步、排队等影响性能的操作,提高了渲染效率。

本申请实施例提供的3d渲染方法,当虚拟机上的3d应用发起3d渲染指令时,3d渲染入口模块捕获该3d渲染指令,判断是否为该3d应用创建了对应的虚拟gpu,若已创建,则将3d渲染指令发送给3d应用对应的虚拟gpu;若未创建,则为3d应用创建对应的虚拟gpu,然后将3d渲染指令发送给3d应用对应的虚拟gpu;虚拟gpu对3d渲染指令进行解析得到ir数据并将该ir数据发生给宿主机的3d渲染中间指令模块;的3d渲染中间指令模块根据ir数据生成目标渲染指令,并将该目标渲染指令发送给gpu分发模块;gpu分发模块选定利用率最低的物理gpu为目标物理gpu,将目标渲染指令发送给目标物理gpu,以使目标物理gpu执行目标渲染指令。能够将同一个虚拟机的多个3d应用的3d渲染指令以3d应用为最小颗粒进行区分,并将各3d应用的3d渲染指令分发至不同的物理gpu硬件,不再是一个虚拟机仅对应一个物理gpu,这样,当虚拟机同时运行多个重度渲染的3d应用时,便可以避免该虚拟机对应的物理gpu负担过重的问题。同时,一个虚拟gpu只负责管理一个3d应用的渲染上下文,可以避免一个虚拟gpu因管理多个渲染上下文环境而导致虚拟gpu驱动需要频繁地进行上下文切换、同步、排队等影响性能的问题,提高了3d渲染的效率。

基于上述图5和图8对应的实施例中所描述的3d渲染方法,本申请实施例还提供一种计算机可读存储介质,例如,非临时性计算机可读存储介质可以是只读存储器(英文:readonlymemory,rom)、随机存取存储器(英文:randomaccessmemory,ram)、cd-rom、磁带、软盘和光数据存储装置等。该存储介质上存储有计算机指令,用于执行上述图5和图8对应的实施例中所描述的3d渲染方法,此处不再赘述。

本领域技术人员在考虑说明书及实践这里公开的内容后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由所附的权利要求指出。

应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1