掌桥专利:专业的专利平台
掌桥专利
首页

显存分配的方法及装置

文献发布时间:2023-06-19 10:16:30


显存分配的方法及装置

技术领域

本公开涉及图像处理领域,尤其涉及显存分配的方法及装置。

背景技术

云端虚拟化技术当前发展非常迅速。随着公有云平台和私有云平台的进一步发展,对于虚拟桌面云平台提出了进一步的细分需求。当前在虚拟云桌面方向,根据用户的使用行为,逐步细化出云桌面办公用户、二维(2dimensional,2D)/三维(3dimensional,3D)设计开发用户、3D游戏娱乐用户。

在当前技术条件下,桌面云对于第一类用户有很多的解决方案,QEMU+spice协议开源项目,可以满足云桌面办公用户的需求。而对于2D/3D设计开发以及3D游戏娱乐两类用户,需要云端虚拟出来能够渲染3D应用的虚拟显卡,然而,目前业界对于显卡显存如何灵活有效的分配还未提出有效的解决方案。

发明内容

本公开实施例提供一种显存分配的方法及装置,能够解决在在图形渲染过程中,显存资源无法灵活高效分配的问题。所述技术方案如下:

根据本公开的第一方面,提供了一种显存分配的方法,该方法应用于服务器,该服务器用于管理多个显卡,所述方法包括:接收虚拟机VM发送的第一指示信息,所述第一指示信息用于指示所述VM需要使用的目标显存的大小;根据所述第一指示信息和所述多个显卡的可用显存,将所述第一显卡的可用显存分配给所述VM,所述第一显卡为所述多个显卡中的某一个显卡,所述第一显卡的可用显存满足所述目标显存且与所述目标显存的大小最接近。

在一种实现方式中,第一指示信息可以承载于虚拟机发送给服务器的虚拟机配置参数信息中,该虚拟机配置参数信息还可以包括虚拟机配置参数,该配置参数可以为虚拟机的启动参数。

根据本公开实施例提供的显存分配的方法,服务器通过根据虚拟机的目标显存指示,按照最小剩余原则,由其管理的多个显存中选择与目标显存最匹配的显卡为虚拟机提供显存,能够实现显卡显存资源的合理调配,提高图形渲染的效率。

在一个实施例中,所述服务器包括显卡资源管理表,所述显卡资源管理表包括所述多个显卡对应的可用显存;所述根据所述第一指示信息和所述多个显卡的可用显存,将所述第一显卡的显存分配给所述VM,具体包括:根据第一指示信息,由所述显卡资源管理表中确定所述第一显卡;在所述第一显卡的可用显存中,分配所述目标显存给所述VM。

根据本公开实施例提供的显存分配的方法,服务器根据虚拟机的目标显存,由显卡资源管理表中选取可用显存与目标显存符合最小剩余原则,即可用显存即满足目标显存,又与目标显存最接近的显卡,能够更加直观有效的确定为虚拟机提供显存的合适的显卡显存,提高显存分配的效率。

在一个实施例中,所述显卡资源管理表还包括每个显卡中所述VM已实际占用的显存,所述方法还包括:接收所述VM发送的第二指示信息,所述第二指示信息用于指示所述VM当前已实际占用的显存;根据第二指示信息更新所述显卡资源管理表。

根据本公开实施例提供的显存分配的方法,通过在显卡资源管理表中更新虚拟机实际占用的显存,能够使得服务器获知当前显卡显存被实际占用的情况,有利于服务器合理进行显存资源分配。

根据本公开的第二方面,提供了一种显存分配的方法,应用于VM,所述方法包括:获取所述VM所需要的目标显存的大小;向服务器发送第一指示信息,所述第一指示信息用于指示所述目标显存的大小。

根据本公开实施例提供的显存分配的方法,通过虚拟机向服务器发送自身所需要的目标显存,再由服务器通过根据虚拟机的目标显存指示,按照最小剩余原则,由其管理的多个显存中选择与目标显存最匹配的显卡为虚拟机提供显存,能够实现显卡显存资源的合理调配,提高图形渲染的效率。

在一个实施例中,所述方法还包括:通过钩子hook函数获取第一信息,所述第一信息用于指示所述VM申请或者释放的显存;根据所述第一信息获取所述VM当前已实际占用的显存;向渲染主机发送第二指示信息,所述第二指示信息用于指示所述VM当前已实际占用的显存。

根据本公开实施例提供的显存分配的方法,通过虚拟机利用钩子函数在3D API截获虚拟机用于申请或释放显存的函数,再向服务器指示虚拟机当前实际占用的显存,能够使得服务器获知当前显卡显存被实际占用的情况,有利于服务器合理进行显存资源分配。

根据本公开的第三方面,提供了一种服务器,包括:接收模块,用于接收虚拟机VM发送的第一指示信息,所述第一指示信息包括所述VM需要使用的目标显存的大小;处理模块,用于根据所述第一指示信息和所述多个显卡的可用显存,将所述第一显卡的显存分配给所述VM,所述第一显卡为所述多个显卡中的某一个显卡,所述第一显卡的可用显存满足所述目标显存且与所述目标显存的大小最接近。

根据本公开实施例提供的服务器,其可以通过根据虚拟机的目标显存指示,按照最小剩余原则,由其管理的多个显存中选择与目标显存最匹配的显卡为虚拟机提供显存,能够实现显卡显存资源的合理调配,提高图形渲染的效率。

在一个实施例中,所述服务器包括显卡资源管理表,所述显卡资源管理表包括所述多个显卡对应的可用显存;所述处理模块,具体用于根据第一指示信息,由所述显卡资源管理表中确定所述第一显卡;在所述第一显卡的可用显存中,分配所述目标显存给所述VM。

根据本公开实施例提供的服务器,其可以根据虚拟机的目标显存,由显卡资源管理表中选取可用显存与目标显存符合最小剩余原则,即可用显存即满足目标显存,又与目标显存最接近的显卡,能够更加直观有效的确定为虚拟机提供显存的合适的显卡显存,提高显存分配的效率。

在一个实施例中,所述显卡资源管理表还包括每个显卡中所述VM实际占用的显存;所述接收模块,还用于接收所述VM发送的第二指示信息,所述第二指示信息用于指示所述VM当前已实际占用的显存;所述处理模块,还用于根据第二指示信息更新所述显卡资源管理表。

根据本公开实施例提供的服务器,通过在显卡资源管理表中更新虚拟机实际占用的显存,使得服务器获知当前显卡显存被实际占用的情况,有利于服务器合理进行显存资源分配。

根据本公开的第四方面,提供了一种装置,所述装置上运行有至少一个虚拟机,包括:获取模块,用于获取所述VM所需要的目标显存的大小;发送模块,用于向服务器发送第一指示信息,所述第一指示信息用于指示所述目标显存的大小。

根据本公开实施例提供的装置,通过虚拟机向服务器发送自身所需要的目标显存,再由服务器通过根据虚拟机的目标显存指示,按照最小剩余原则,由其管理的多个显存中选择与目标显存最匹配的显卡为虚拟机提供显存,能够实现显卡显存资源的合理调配,提高图形渲染的效率。

在一个实施例中,所述装置还包括处理模块;所述获取模块,还用于通过钩子hook函数获取第一信息,所述第一信息用于指示所述VM申请或者释放的显存;所述处理模块,用于根据所述第一信息获取所述VM当前已实际占用的显存;所述发送模块,还用于向服务器发送第二指示信息,所述第二指示信息用于指示所述VM当前已实际占用的显存。

根据本公开实施例提供的装置,通过虚拟机利用钩子函数在3D API截获虚拟机用于申请或释放显存的函数,再向服务器指示虚拟机当前实际占用的显存,能够使得服务器获知当前显卡显存被实际占用的情况,有利于服务器合理进行显存资源分配。

根据本公开的第五方面,提供了一种显存分配的系统,所述系统包括服务器和至少一个虚拟机,所述服务器用于执行如上述第一方面中任一实施例所述的显存分配的方法,所述虚拟机用于执行如上述第二方面中任一实施例所述的显存分配的方法。

根据本公开的第六方面,提供了一种计算机可读存储介质,该存储介质上存储有计算机指令,当计算机执行所述计算机指令时,使得上述第一方面和第二方面中任一实施例所述的显存分配的方法得以实现。

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

附图说明

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

图1是现有的一种显存分配方案的示意图;

图2是现有的另一种显存分配方案的示意图;

图3是现有的又一种显存分配方案的示意图;

图4是本公开实施例提供的一种显存分配系统架构的示意图;

图5是本公开实施例提供的一种显存分配的方法的示意性流程图;

图6是本公开实施例提供的另一种显存分配的方法的示意性流程图;

图7是本公开实施例提供的一种服务器的结构示意图;

图8是本公开实施例提供的一种装置的结构示意图。

具体实施方式

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

针对虚拟机的3D渲染需求,当前的解决方案一般分为三种。以下结合附图1至附图3,分别对这三种解决方案进行介绍。

示例性地,如图1所示,为现有的一种图形渲染情形下显存分配解决方案的示意图。为便于描述,这里将图1所示的解决方案称为解决方案一。

解决方案一主要通过在云端渲染主机(host)中安装多个物理的图形处理器(graphics processing unit,GPU)显卡,并借助设备直接分配(passthrough)技术将单个物理显卡映射到每个客户的虚拟机(virtual machine,VM)中作为该VM的物理显卡来使用,VM通过passthrough到VM物理显卡实现对3D指令的渲染。

解决方案一在技术实现方面较为简单,然而每个VM在启动时需要绑定好GPU硬件,并独占使用。而在实际应用中,由于可能根本不需要GPU,因此,该解决方案会造成GPU资源的浪费。

如图2所示,为现有的另一种图形渲染情形下显存分配解决方案的示意图。为便于描述,这里将图2所示的解决方案称为解决方案二。

在解决方案二中,在云端渲染主机中,安装单个物理GPU显卡,并借助vGPU技术将当个物理显卡虚拟成多张vGPU显卡,并逐个映射到客户的VM中作为虚拟显卡来使用,VM通过虚拟显卡vGPU实现对3D指令的渲染(如图2所示)。

解决方案二在技术实现时,相对复杂,并且需要GPU硬件支持,而且该功能一般限定在某些特定厂家的特定型号GPU,价格昂贵,使用成本高。

可以看出,解决方案一和解决方案二都无法实现显卡显存的动态调配。比如在解决方案一中,配置的GPU硬件显存多大,决定了虚拟机可以使用的显存最大可以为多大;类似地,在解决方案二中,由于在配置vGPU时,给每个虚拟机使用的显存就已经划分好了,因此在运行时,虚拟机可以使用的显存也是无法改变的。

针对上述问题,如图3所示,为现有的又一种渲染情形下显存分配解决方案。为便于描述,这里将图3所示的解决方案称为解决方案三。

在解决方案三中,虚拟机通过各自的虚拟显卡,将渲染请求发送给宿主机,宿主机利用物理显卡完成真正的渲染。所有渲染可以共用一张物理显卡,也可以使用不同的物理显卡。

相较于解决方案一和解决方案二,解决方案三更为灵活,VM启动和运行种都不需要绑定至固定的GPU硬件,宿主机也不需要选择特定厂家特定型号的GPU硬件。

然而,解决方案三中的灵活性也会带来新的难题。比如,不同场景下,VM对显卡的显存需求不一样,如轻度渲染的虚拟机A可能只需要显存为512M的显卡,而终端渲染的虚拟机B则可能需要4G的显存,但在本解决方案种,虚拟机A和虚拟机B可能会选择用同一张物理显卡进行渲染,导致虚拟机A和虚拟机B的显存资源无法得到合理调配。

针对上述问题,本公开实施例提供一种显存分配的方法,通过VM将自身所需要的显存通知服务器,由服务器根据VM实际需要的显存分配匹配的物理显卡供虚拟机渲染使用,从而实现灵活高效的显存资源分配。

为便于理解本公开提供的实施例,首先结合图4,对本公开提供的一种显存分配系统架构进行介绍。参考图4,为本公开实施例提供的一种显存分配系统架构的示意图。

该系统架构包括宿主机41、服务器42以及服务器42管理的多个渲染主机(如图4中的渲染主机一、渲染主机二等),其中,每个渲染主机可以包括一个或多个显卡,如渲染主机一包括显卡一和显卡二,渲染主机二包括显卡三和显卡四。如图4所示,宿主机可以包括3D渲染代理发送(3D render proxy-sender)模块,服务器可以包括3D渲染代理接收(3Drender proxy-receiver)模块和3D渲染主机调配(3D render host dispatcher)模块。

其中,宿主机41主要用于在其操作系统之上运行多个虚拟机(如图4所示的虚拟机A和虚拟机B)。虚拟机内部可以运行如客户机操作系统的软件系统,虚拟机的操作系统运行在宿主机操作系统之上,使用的是由宿主机操作系统提供的虚拟化的处理器(centralprocessing unit,CPU)、内存、显卡vGPU、显卡等资源。因此,虚拟机操作系统与宿主机操作系统之间可以通过内存映射等方式及逆行数据交换。此外,虚拟机还包括3D API钩子hook函数模块,用于利用hook函数截取3D API中用于申请和释放显存的函数。

虚拟机和宿主机之间的渲染通路可以通过软件虚拟显卡vGPU连通。具体地,宿主机可以为每个虚拟机创建一张软件虚拟显卡vGPU,该vGPU可以通过宿主机的3D渲染代理发送(3D render proxy-sender)模块向渲染主机池中的3D渲染代理接收(3D render proxy-receiver)模块发送渲染中间格式指令流(intermediate representation,IR),该IP可以包括如图像绘制参数等信息,用于渲染主机进行图像绘制。此外,服务器中的3D renderhost dispatcher模块用于接收虚拟机发送的虚拟机配置参数、虚拟机发送的所需要的目标显存等信息,并根据目标显存和显卡资源管理表为虚拟机提供合适的显卡显存。

在实际应用中,宿主机例如可以是计算机、笔记本电脑、手机、平板电脑等终端设备。本公开对宿主机关联的虚拟机的数量不做限定,例如1个宿主机可以关联1个、2个或更多个虚拟机。渲染主机池可以包括多个渲染主机,该渲染主机池也可以理解为渲染主机集群,其中的渲染主机数量不做限定。其中,本公开中的渲染主机可以为服务器或云端服务器,一个渲染主机可以包括多个显卡,不同显卡的显存可以相同或者不同。

本公开实施例体提供一种显存分配的方法,如图5所示。该显存分配的方法可以由服务器41执行,该服务器41可以用于管理多个渲染主机和/或渲染主机上的显卡。该方法具体包括以下步骤:

501、接收虚拟机VM发送的第一指示信息,该第一指示信息包括VM需要使用的目标显存的大小。

502、根据第一指示信息和多个显卡的可用显存,将第一显卡的可用显存分配给VM,该第一显卡为多个显卡中的某一个显卡,第一显卡的可用显存满足目标显存且与目标显存的大小最接近。

在一些实施例中,虚拟机可以向服务器上报自身当前需要使用的显存的大小。具体地,第一指示信息可以承载于虚拟机发送给服务器的虚拟机配置参数信息中,该虚拟机配置参数信息还可以包括虚拟机配置参数,该配置参数可以为虚拟机的启动参数。

服务器根据接收到的第一指示信息,在显卡资源管理表中按照最小剩余匹配原则,查找可用显存与VM请求的目标显存匹配的显卡。

应理解,本公开实施例中的最小剩余匹配原则是指:显卡的可用显存(即未分配显存)能够满足目标显存,且该可用显存与目标显存最接近。例如,如果虚拟机当前请求的目标显存为1GB,而显卡1中的可用显存为512MB、显卡2中的可用显存为2GB,显卡3中的可用显存为4GB,则此时按照最小剩余原则,将显卡2中的显存分配给虚拟机。

在一些实施例中,服务器包括显卡资源管理表,该显卡资源管理表可以记录该服务器管理的所有渲染主机上物理显卡的使用情况。示例性的,显卡资源管理表包括多个显卡分别对应的可用显存(即未被分配的显存)。服务器可以根据第一指示信息以及显卡资源管理表来确定向虚拟机分配第一显卡。

具体来说,服务器根据第一指示信息获取虚拟机当前请求的目标显存的大小,之后服务器可以由显存资源管理表中获取能够满足该目标显存的显卡。在实际应用中,服务器按照最小剩余原则在显存资源管理表中确定第一显卡。

为更好的理解服务器向虚拟机分配显存的过程,以表1示出的一种显存资源管理表为例,进行说明。如表1所示,显卡资源管理表可以包括不同渲染主机中的每个显卡分别对应的显存总量、已分配显存、将显存分配给的虚拟机、虚拟机请求的显存以及实际占用的显存信息。

表1

比如,表1中展示了渲染主机一中的显卡一,其显存总量为4GB,目前已有3GB被分配,其中1GB被分配给虚拟机A,2GB被分配给虚拟机B,而虚拟机A当前实际占用的显存为512MB,而虚拟机B当前实际已占用的显存为1GB。

以表1中的参数为例,假如目前有虚拟机D启动,如果虚拟机D请求的目标显存为512MB或者1GB,则根据最小剩余原则,服务器可以优先为虚拟机D分配渲染主机一中的显卡一;如果虚拟机D请求的目标显存为2GB,则根据最小剩余原则,服务器可以优先为虚拟机D分配渲染主机一中的显卡二。

在一些实施例种,在执行步骤101之前,服务器还可以先将显卡资源管理表进行更新。

具体来说,在虚拟机启动之前,或者在向虚拟机分配显存之前,服务器可以先根据每个显卡的显存总量进行排序,比如按照显存总量由小到大对显卡依次排序(如表1所示),或者,按照显存总量由大到小对显卡依次排序。换言之,服务器可以首先对显卡资源管理表中的前4列进行排序或更新。

在一些实施例中,服务器还可以根据虚拟机的目标显存,对显存资源管理表中虚拟机进行排序。例如,按照目标显存由小到大,对每个显卡对应的虚拟机排序(如表1中示出的虚拟机A~C的排序);或者,按照目标显存由大到小,对每个显卡对应的虚拟机排序。其中,这里的每个显卡对应的虚拟机是指显卡提供显存的虚拟机,如显卡一对应的虚拟机为虚拟机A和虚拟机B,显卡二对应的虚拟机为虚拟机C。

本公开实施例提供的显存分配的方法,服务器根据虚拟机需要的显存大小,按照最小剩余原则为虚拟机匹配显卡显存,能够灵活有效地对虚拟机的虚拟显存资源进行管理,使得显存资源得到合理调配。

基于上述图5对应的实施例提供的显存分配的方法,本公开还提供了另一种显存分配的方法,如图6所示。该显存分配的方法可以由虚拟机42执行,具体包括以下步骤:

601,获取VM所需要的目标显存的大小。

602,向服务器发送第一指示信息,该第一指示信息用于指示目标显存的大小。

其中,第一信息可以是虚拟机经由3D API传输的申请显存或者释放显存的函数。

在一些实施例中,虚拟机在启动之后,可以通过钩子(hook)函数,截获3D API中虚拟机申请或者释放的显存。之后,虚拟机根据获取的第一信息,实时记录当前虚拟机的显存使用量。示例性的,虚拟机可以包括虚拟机显存管理表,表中包括虚拟机申请和释放显存情况,如表2所示,虚拟机当前申请的显存分别为4MB、16MB,释放的显存为4MB,之后,虚拟机利用该表中的数据计算虚拟机实际已占用的显存大小,以表2中的参数为例,此时虚拟机实际已占用的显存大小为16MB。

表2

在一些实施例中,当虚拟机当前使用的西纳村资源达到预设的最大值时,可以在钩子函数这一层向3D应用返回显存不足的错误提示。

应理解,通过钩子函数机制,在用户API层面进行显存资源的统计,更加轻量便捷。

在一些实施例中,虚拟机向服务器发送第二指示信息,该第二指示信息用于指示虚拟机当前实际占用的显存。服务器在接收到该第二指示信息后,可以将虚拟机当前实际占用的显存更新至显存资源管理表中,如更新至表1中的最后一列。

应理解,虚拟机显存管理表记录了虚拟机的显存使用详细情况,虚拟机可以根据该表计算出当前实际占用(或使用)的显存总量,并将其定时更新到服务器中的显卡资源管理表中。

本公开实施例提供的显存分配的方法,服务器根据虚拟机需要的显存大小,按照最小剩余原则为虚拟机匹配显卡显存,能够灵活有效地对虚拟机的虚拟显存资源进行管理,使得显存资源得到合理调配。

基于上述图5和图6对应的实施例中所描述的显存分配的方法,下述为本公开装置实施例,可以用于执行本公开方法实施例。

本公开实施例提供一种服务器,如图7所示,该数据服务器700包括:接收模块701和处理模块702。

在一些实施例中,接收模块701,可以用于接收虚拟机VM发送的第一指示信息,所述第一指示信息包括所述VM需要使用的目标显存的大小。

在一些实施例中,处理模块702,可以用于根据第一指示信息和多个显卡的可用显存,将第一显卡的显存分配给VM,第一显卡为多个显卡中的某一个显卡,第一显卡的可用显存满足目标显存且与目标显存的大小最接近。

在一些实施例中,服务器包括显卡资源管理表,该显卡资源管理表包括多个显卡对应的可用显存;处理模块702,可以具体用于根据第一指示信息,由显卡资源管理表中确定第一显卡;在第一显卡的可用显存中,分配目标显存给VM。

在一些实施例中,显卡资源管理表还包括每个显卡中VM当前实际占用的显存;接收模块701,还可以用于接收该VM发送的第二指示信息,该第二指示信息用于指示VM当前实际占用的显存。

处理模块702,还可以用于根据第二指示信息更新显卡资源管理表。

本公开实施例提供一种装置,如图8所示,该装置800上可以运行以后至少一个虚拟机,包括:获取模块801和发送模块802。

在一些实施例中,获取模块801,可以用于获取VM所需要的目标显存的大小。

发送模块802,可以用于向服务器发送第一指示信息,该第一指示信息用于指示目标显存的大小。

在一个实施例中,装置800还包括处理模块803。其中,获取模块801,还可以用于通过钩子hook函数获取第一信息,该第一信息用于指示VM申请或者释放的显存。

处理模块803,可以用于根据第一信息获取VM当前实际占用的显存。

发送模块802,还可以用于向服务器发送第二指示信息,第二指示信息用于指示VM当前实际占用的显存。

基于上述图5和图6对应的实施例中所描述的显存分配的方法,本公开实施例还提供一种显存分配的系统,该系统包括服务器和运行有虚拟机的装置。其中,服务器和虚拟机分别用于执行上述图5和图6对应的实施例中所描述的显存分配的方法在服务器和虚拟机上的功能,此处不再赘述。

基于上述图5和图6对应的实施例中所描述的显存分配的方法,本公开实施例还提供一种计算机可读存储介质,例如,非临时性计算机可读存储介质可以是只读存储器(英文:Read Only Memory,ROM)、随机存取存储器(英文:Random Access Memory,RAM)、CD-ROM、磁带、软盘和光数据存储装置等。该存储介质上存储有计算机指令,用于执行上述图5和图6对应的实施例中所描述的显存分配的方法,此处不再赘述。

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

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

相关技术
  • 显存分配的方法、装置、计算设备及计算机存储介质
  • 显存分配的方法及装置
技术分类

06120112481601