一种数据处理方法、装置、设备以及可读存储介质转让专利

申请号 : CN202111027385.7

文献号 : CN113467958B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 赵新达杨衍东龚志鹏袁志强杨昊周荣鑫李文焱刘雷周威曹琛

申请人 : 腾讯科技(深圳)有限公司

摘要 :

本发明公开了一种数据处理方法、装置、设备以及可读存储介质,该数据处理方法包括:获取针对目标进程的显存分配请求,根据显存分配请求确定目标进程的预分配显存容量;获取目标进程所属的目标容器的显存容量控制阈值;根据目标容器的已占用显存容量和预分配显存容量确定目标容器的预占用显存容量;若预占用显存容量超出显存容量控制阈值,则将显存组件中存储的目标容器的目标转移数据转移到内存组件中,在已释放目标转移数据占用的显存的显存组件中,为目标进程分配预分配显存容量对应的可用显存。采用本发明提供的方法,可以减少不同容器之间的GPU性能影响。

权利要求 :

1.一种数据处理方法,其特征在于,包括:云游戏服务器获取针对目标进程的显存分配请求,根据所述显存分配请求确定所述目标进程的预分配显存容量;所述云游戏服务器包括至少两个容器;不同容器分别支持不同终端设备运行云游戏应用;每个容器分别具有各自的显存容量控制阈值;

获取所述目标进程所属的目标容器的显存容量控制阈值;所述至少两个容器包括所述目标容器;

根据所述目标容器的已占用显存容量和所述预分配显存容量确定所述目标容器的预占用显存容量;

若所述预占用显存容量超出所述目标容器的显存容量控制阈值,则将显存组件中存储的所述目标容器的目标转移数据转移到内存组件中,在已释放所述目标转移数据占用的显存的所述显存组件中,为所述目标进程分配所述预分配显存容量对应的可用显存。

2.根据权利要求1所述的方法,其特征在于,所述获取所述目标进程所属的目标容器的显存容量控制阈值,包括:

确定所述目标进程所属的目标容器;

通过内核组件确定所述目标容器对应的显存管理子系统;

在所述显存管理子系统中,获取所述目标容器的显存容量控制阈值。

3.根据权利要求2所述的方法,其特征在于,还包括:通过容器管理工具获取目标容器的容器镜像数据,根据所述容器镜像数据运行所述目标容器;

在运行所述目标容器的过程中,通过所述容器管理工具响应针对所述目标容器的显存配置操作,获取显存参数,将所述显存参数转换为显存容量控制阈值,将所述显存容量控制阈值传入内核组件;

通过所述内核组件将所述目标容器的显存容量控制阈值存储进显存管理子系统。

4.根据权利要求1所述的方法,其特征在于,所述将显存组件中存储的所述目标容器的目标转移数据转移到内存组件中,在释放所述目标转移数据占用的显存的所述显存组件中,为所述目标进程分配所述预分配显存容量对应的可用显存,包括:确定所述目标容器对应的显存访问记录列表;所述显存访问记录列表包含至少两个单位显存分别对应的数据访问次数;所述显存组件包含所述至少两个单位显存;

将数据访问次数最少的单位显存中存储的数据,作为所述显存组件中存储的所述目标容器的目标转移数据;

将所述目标转移数据转移到内存组件中,在已释放所述目标转移数据占用的显存的所述显存组件中,为所述目标进程分配所述预分配显存容量对应的可用显存。

5.根据权利要求4所述的方法,其特征在于,所述数据访问次数最少的单位显存包括至少两个最少访问单位显存;

所述将数据访问次数最少的单位显存中存储的数据,作为所述显存组件中存储的所述目标容器的目标转移数据,包括:确定所述至少两个最少访问单位显存中存储的数据所属的业务类型;

从所述至少两个最少访问单位显存中,获取所述业务类型对应的优先级最低的最少访问单位显存,作为目标最少访问单位显存;

将所述目标最少访问单位显存中存储的数据,作为所述显存组件中存储的所述目标容器的目标转移数据。

6.根据权利要求4所述的方法,其特征在于,还包括:在所述显存访问记录列表中,删除所述目标转移数据对应的单位显存对应的数据访问次数,且新增所述可用显存对应的默认数据访问次数,得到更新显存访问记录列表。

7.根据权利要求6所述的方法,其特征在于,还包括:将所述目标进程对应的进程数据存储进所述可用显存中;

监测图形处理器对所述可用显存中存储的所述进程数据的访问情况;

当监测到所述图形处理器访问所述进程数据时,对所述默认数据访问次数进行累加处理,得到更新数据访问次数,将所述更新显存访问记录列表中的所述默认数据访问次数更新为所述更新数据访问次数。

8.根据权利要求1所述的方法,其特征在于,所述将显存组件中存储的所述目标容器的目标转移数据转移到内存组件中,在释放所述目标转移数据占用的显存的所述显存组件中,为所述目标进程分配所述预分配显存容量对应的可用显存,包括:确定所述目标容器对应的显存访问记录列表;所述显存访问记录列表包含至少两个进程分别对应的数据访问次数;所述至少两个进程对应的数据存储于显存组件;

将数据访问次数最少的进程对应的数据,作为显存组件中存储的所述目标容器的目标转移数据;

将所述目标转移数据转移到内存组件中,在已释放所述目标转移数据占用的显存的所述显存组件中,为所述目标进程分配所述预分配显存容量对应的可用显存。

9.根据权利要求1所述的方法,其特征在于,所述将显存组件中存储的所述目标容器的目标转移数据转移到内存组件中,在释放所述目标转移数据占用的显存的所述显存组件中,为所述目标进程分配所述预分配显存容量对应的可用显存,包括:确定所述目标容器对应的显存访问记录列表;所述显存访问记录列表包含至少两个单位显存分别对应的创建时间;所述显存组件包含所述至少两个单位显存;

将创建时间最早的单位显存中存储的数据,作为显存组件中存储的所述目标容器的目标转移数据;

将所述目标转移数据转移到内存组件中,在已释放所述目标转移数据占用的显存的所述显存组件中,为所述目标进程分配所述预分配显存容量对应的可用显存。

10.根据权利要求1所述的方法,其特征在于,还包括:将已转移到所述内存组件中的所述目标转移数据确定为目标数据,接收针对所述目标容器的所述目标数据的数据访问请求;

根据所述目标容器的实时占用显存容量和所述目标数据的数据占用显存容量,确定所述目标容器新的预占用显存容量;

若所述新的预占用显存容量超出所述显存容量控制阈值,则根据所述数据访问请求重新在所述显存组件中确定所述目标容器的更新目标转移数据;

将所述更新目标转移数据转移到所述内存组件中;

从所述内存组件中将所述目标数据转移回所述显存组件中。

11.根据权利要求1所述的方法,其特征在于,还包括:确定已转移到所述内存组件中的所述目标转移数据对应的数据占用显存容量;

监测所述目标容器的实时占用显存容量;

根据所述实时占用显存容量和所述数据占用显存容量确定所述目标容器的可占用显存总容量;

若所述可占用显存总容量低于所述显存容量控制阈值,则从所述内存组件中将所述目标转移数据转移回所述显存组件。

12.一种数据处理装置,其特征在于,所述数据处理装置应用于云游戏服务器;所述数据处理装置包括:

请求分配模块,用于获取针对目标进程的显存分配请求,根据所述显存分配请求确定所述目标进程的预分配显存容量;所述云游戏服务器包括至少两个容器;不同容器分别支持不同终端设备运行云游戏应用;每个容器分别具有各自的显存容量控制阈值;

阈值获取模块,用于获取所述目标进程所属的目标容器的显存容量控制阈值;所述至少两个容器包括所述目标容器;

容量确定模块,用于根据所述目标容器的已占用显存容量和所述预分配显存容量确定所述目标容器的预占用显存容量;

显存控制模块,用于若所述预占用显存容量超出所述目标容器的显存容量控制阈值,则将显存组件中存储的所述目标容器的目标转移数据转移到内存组件中,在已释放所述目标转移数据占用的显存的所述显存组件中,为所述目标进程分配所述预分配显存容量对应的可用显存。

13.一种计算机设备,其特征在于,包括:处理器、存储器以及网络接口;

所述处理器与所述存储器、所述网络接口相连,其中,所述网络接口用于提供数据通信功能,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,以执行权利要求

1‑11任一项所述的方法。

14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序适于由处理器加载并执行权利要求1‑11任一项所述的方法。

说明书 :

一种数据处理方法、装置、设备以及可读存储介质

技术领域

[0001] 本申请涉及云技术领域,尤其涉及一种数据处理方法、装置、设备以及可读存储介质。

背景技术

[0002] 云游戏是指游戏在远程的服务器上运行,并将渲染完毕后的游戏画面压缩编码后,通过网络以音视频流方式下发到终端的过程。
[0003] 在云游戏场景下,服务器存在多实例并发的情况,即服务器可以同时运行多个容器,一个容器可以为一个终端设备运行云游戏提供计算支持。每个容器中的进程在调用渲
染函数的过程中,显卡驱动会尽可能为该进程占用足够的显存,而服务器中显存的容量是
有限的,当显存被用满后,某个容器中新的进程运行需要分配显存时,通常会利用GPU
(Graphic Processing Unit,图形处理器)对显存和GTT Memory(Graphics Translation 
Table Memory,图形转换表内存)的可访问特性,将部分存储在显存中的数据交换到GTT 
Memory中,当GPU需要再次访问该被交换数据时,该被交换数据会从GTT Memory重新被交换
到显存中。但是,当数据交换发生时,会占用GPU资源进行数据交换操作,从而带来GPU性能
的损耗。当A容器运行占用的显存较多时,B容器需要分配显存时,就容易触发数据的交换,B
容器的GPU性能会受到影响,可见现有技术中对容器进行数据交换的过程中,可能会对其余
容器的GPU性能造成影响。

发明内容

[0004] 本申请实施例提供了一种数据处理方法、装置、设备以及可读存储介质,可以减少不同容器之间的GPU性能影响。
[0005] 本申请实施例一方面提供了一种数据处理方法,包括:
[0006] 获取针对目标进程的显存分配请求,根据显存分配请求确定目标进程的预分配显存容量;
[0007] 获取目标进程所属的目标容器的显存容量控制阈值;
[0008] 根据目标容器的已占用显存容量和预分配显存容量确定目标容器的预占用显存容量;
[0009] 若预占用显存容量超出显存容量控制阈值,则将显存组件中存储的目标容器的目标转移数据转移到内存组件中,在已释放目标转移数据占用的显存的显存组件中,为目标
进程分配预分配显存容量对应的可用显存。
[0010] 本申请实施例一方面提供了一种数据处理装置,包括:
[0011] 请求分配模块,用于获取针对目标进程的显存分配请求,根据显存分配请求确定目标进程的预分配显存容量;
[0012] 阈值获取模块,用于获取目标进程所属的目标容器的显存容量控制阈值;
[0013] 容量确定模块,用于根据目标容器的已占用显存容量和预分配显存容量确定目标容器的预占用显存容量;
[0014] 显存控制模块,用于若预占用显存容量超出显存容量控制阈值,则将显存组件中存储的目标容器的目标转移数据转移到内存组件中,在已释放目标转移数据占用的显存的
显存组件中,为目标进程分配预分配显存容量对应的可用显存。
[0015] 其中,阈值获取模块,包括:
[0016] 容器确定单元,用于确定目标进程所属的目标容器;
[0017] 系统确定单元,用于通过内核组件确定目标容器对应的显存管理子系统;
[0018] 阈值获取单元,用于在显存管理子系统中,获取目标容器的显存容量控制阈值。
[0019] 其中,上述数据处理装置,还包括:
[0020] 容器运行模块,用于通过容器管理工具获取目标容器的容器镜像数据,根据容器镜像数据运行目标容器;
[0021] 阈值配置模块,用于在运行目标容器的过程中,通过容器管理工具响应针对目标容器的显存配置操作,获取显存参数,将显存参数转换为显存容量控制阈值,将显存容量控
制阈值传入内核组件;
[0022] 阈值存储模块,用于通过内核组件将目标容器的显存容量控制阈值存储进显存管理子系统。
[0023] 其中,显存控制模块,包括:
[0024] 第一列表确定单元,用于确定目标容器对应的显存访问记录列表;显存访问记录列表包含至少两个单位显存分别对应的数据访问次数;显存组件包含至少两个单位显存;
[0025] 第一数据确定单元,用于将数据访问次数最少的单位显存中存储的数据,作为显存组件中存储的目标容器的目标转移数据;
[0026] 第一显存控制单元,用于将目标转移数据转移到内存组件中,在已释放目标转移数据占用的显存的显存组件中,为目标进程分配预分配显存容量对应的可用显存。
[0027] 其中,数据访问次数最少的单位显存包括至少两个最少访问单位显存;
[0028] 第一数据确定单元,包括:
[0029] 类型确定子单元,用于确定至少两个最少访问单位显存中存储的数据所属的业务类型;
[0030] 优先级判断子单元,用于从至少两个最少访问单位显存中,获取业务类型对应的优先级最低的最少访问单位显存,作为目标最少访问单位显存;
[0031] 数据确定子单元,用于将目标最少访问单位显存中存储的数据,作为显存组件中存储的目标容器的目标转移数据。
[0032] 其中,上述数据处理装置,还包括:
[0033] 列表更新模块,用于在显存访问记录列表中,删除目标转移数据对应的单位显存对应的数据访问次数,且新增可用显存对应的默认数据访问次数,得到更新显存访问记录
列表。
[0034] 其中,上述数据处理装置,还包括:
[0035] 数据存储模块,用于将目标进程对应的进程数据存储进可用显存中;
[0036] 监测模块,用于监测图形处理器对可用显存中存储的进程数据的访问情况;
[0037] 次数更新模块,用于当监测到图形处理器访问进程数据时,对默认数据访问次数进行累加处理,得到更新数据访问次数,将更新显存访问记录列表中的默认数据访问次数
更新为更新数据访问次数。
[0038] 其中,显存控制模块,包括:
[0039] 第二列表确定单元,用于确定目标容器对应的显存访问记录列表;显存访问记录列表包含至少两个进程分别对应的数据访问次数;至少两个进程对应的数据存储于显存组
件;
[0040] 第二数据确定单元,用于将数据访问次数最少的进程对应的数据,作为显存组件中存储的目标容器的目标转移数据;
[0041] 第二显存控制单元,用于将目标转移数据转移到内存组件中,在已释放目标转移数据占用的显存的显存组件中,为目标进程分配预分配显存容量对应的可用显存。
[0042] 其中,显存控制模块,包括:
[0043] 第三列表确定单元,用于确定目标容器对应的显存访问记录列表;显存访问记录列表包含至少两个单位显存分别对应的创建时间;显存组件包含至少两个单位显存;
[0044] 第三数据确定单元,用于将创建时间最早的单位显存中存储的数据,作为显存组件中存储的目标容器的目标转移数据;
[0045] 第三显存控制单元,用于将目标转移数据转移到内存组件中,在已释放目标转移数据占用的显存的显存组件中,为目标进程分配预分配显存容量对应的可用显存。
[0046] 其中,上述数据处理装置,还包括:
[0047] 内存数据访问模块,用于将已转移到内存组件中的目标转移数据确定为目标数据,接收针对目标容器的目标数据的数据访问请求;
[0048] 内存数据访问模块,还用于根据目标容器的实时占用显存容量和目标数据的数据占用显存容量,确定目标容器新的预占用显存容量;
[0049] 内存数据访问模块,还用于若新的预占用显存容量超出显存容量控制阈值,则根据数据访问请求重新在显存组件中确定目标容器的更新目标转移数据;
[0050] 内存数据访问模块,还用于将更新目标转移数据转移到内存组件中;
[0051] 内存数据访问模块,还用于从内存组件中将目标数据转移回显存组件中。
[0052] 其中,上述数据处理装置,还包括:
[0053] 数据调整模块,用于确定已转移到内存组件中的目标转移数据对应的数据占用显存容量;
[0054] 数据调整模块,还用于监测目标容器的实时占用显存容量;
[0055] 数据调整模块,还用于根据实时占用显存容量和数据占用显存容量确定目标容器的可占用显存总容量;
[0056] 数据调整模块,还用于若可占用显存总容量低于显存容量控制阈值,则从内存组件中将目标转移数据转移回显存组件。
[0057] 本申请实施例一方面提供了一种计算机设备,包括:处理器、存储器、网络接口;
[0058] 上述处理器与上述存储器、上述网络接口相连,其中,上述网络接口用于提供数据通信网元,上述存储器用于存储计算机程序,上述处理器用于调用上述计算机程序,以执行
本申请实施例中的方法。
[0059] 本申请实施例一方面提供了一种计算机可读存储介质,上述计算机可读存储介质中存储有计算机程序,上述计算机程序适于由处理器加载并执行本申请实施例中的方法。
[0060] 本申请实施例一方面提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中,计算机设
备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该
计算机设备执行本申请实施例中的方法。
[0061] 本申请实施例中,可以在获取到针对目标进程的显存分配请求后,根据该显存分配请求确定目标进程的预分配显存容量,接着获取该目标进程所属的目标容器的显存容量
控制阈值,再根据目标容器的已占用显存容量和预分配显存容量确定目标容器的预占用显
存容量,若预占用显存容量超出显存容量控制阈值,则将显存组件中存储的目标容器的目
标转移数据转移到内存组件中,在已释放该目标转移数据占用的显存的显存组件中,为目
标进程分配预分配显存容量对应的可用显存。通过本申请实施例提供的方法,目标容器可
以占用的显存对应的容量不会超过该目标容器的显存容量控制阈值,可以避免目标容器占
用过多显存而导致其余容器可用显存不足;当目标容器的预占用显存容量超过该显存容量
控制阈值时,仅对该目标容器的目标转移数据进行转移,不动用其余容器的数据,可以减少
不同容器之间的GPU性能影响。

附图说明

[0062] 为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本
申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以
根据这些附图获得其他的附图。
[0063] 图1是本申请实施例提供的一种网络架构示意图;
[0064] 图2a是本申请实施例提供的一种数据处理场景示意图;
[0065] 图2b是本申请实施例提供的一种数据处理场景示意图;
[0066] 图3是本申请实施例提供的一种数据处理方法的流程示意图;
[0067] 图4是本申请实施例提供的一种数据处理方法的流程示意图;
[0068] 图5是本申请实施例提供的一种显存管理子系统结构示意图;
[0069] 图6是本申请实施例提供的一种显存访问列表示意图;
[0070] 图7是本申请实施例提供的一种数据处理装置的结构示意图;
[0071] 图8是本申请实施例提供的一种计算机设备的结构示意图。

具体实施方式

[0072] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于
本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他
实施例,都属于本申请保护的范围。
[0073] 云计算(cloud computing)指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需资源;广义云计算指服务的交付和使用模式,指通过网络以按需、易
扩展的方式获得所需服务。这种服务可以是IT和软件、互联网相关,也可是其他服务。云计
算是网格计算(Grid Computing )、分布式计算(Distributed Computing)、并行计算
(Parallel Computing)、效用计算(Utility Computing)、网络存储(Network Storage 
Technologies)、虚拟化(Virtualization)、负载均衡(Load Balance)等传统计算机和网络
技术发展融合的产物。
[0074] 随着互联网、实时数据流、连接设备多样化的发展,以及搜索服务、社会网络、移动商务和开放协作等需求的推动,云计算迅速发展起来。不同于以往的并行分布式计算,云计
算的产生从理念上将推动整个互联网模式、企业管理模式发生革命性的变革。
[0075] 云游戏(Cloud gaming)又可称为游戏点播(gaming on demand),是一种以云计算技术为基础的在线游戏技术。云游戏技术使图形处理与数据运算能力相对有限的轻端设备
(thin client)能运行高品质游戏。在云游戏场景下,游戏并不在玩家游戏终端,而是在云
端服务器中运行,并由云端服务器将游戏场景渲染为视频音频流,通过网络传输给玩家游
戏终端。玩家游戏终端无需拥有强大的图形运算与数据处理能力,仅需拥有基本的流媒体
播放能力与获取玩家输入指令并发送给云端服务器的能力即可。
[0076] 本申请实施例提供的方案涉及云技术领域的云计算和云游戏技术,具体过程通过如下实施例进行说明。
[0077] 请参见图1,是本申请实施例提供的一种网络架构示意图。如图1所示,该网络架构可以包括应用服务器100以及终端设备集群,其中,上述终端设备集群可以包括多个终端设
备,如图1所示,具体可以包括终端设备10a、终端设备10b、终端设备10c、…、终端设备10n。
如图1所示,终端设备10a、终端设备10b、终端设备10c、…、终端设备10n可以分别与上述应
用服务器100进行网络连接,以便于每个终端设备可以通过网络连接与应用服务器100进行
数据交互,以便于每个终端设备可以接收到来自于上述应用服务器100的音视频流数据。
[0078] 如图1所示,每个终端设备均可以集成安装有目标应用,当该目标应用运行于各终端设备时,应用服务器100可以为该目标应用提供计算支持。其中,该目标应用可以包括游
戏应用、视频编辑应用、社交应用、即时通信应用、直播应用、短视频应用、视频应用、音乐应
用、购物应用、小说应用、支付应用、浏览器等具有显示文字、图像、音频以及视频等数据信
息功能的应用中的一个或多个应用。在云计算场景下,应用服务器100中可以创建容器,一
个容器可以与一个终端设备进行连接,从而提供该终端设备所需的计算支持。应用服务器
100中可以同时创建并运行多个容器,每个容器均连接有终端设备,从而保证多个终端设备
可以正常运行目标应用。可以理解,应用服务器100中的多个容器将共享应用服务器100的
硬件资源,其中,硬件资源可以包括显存组件中的显存和内存组件中的图形转换表内存,容
器需要GPU运算时,对应的数据通常存储在显存组件的显存中,当显存不够时,会触发数据
交换,显存中的部分数据会被转移到图形转换表内存中进行存储。由于应用服务器100的显
存有限,因此,在保证终端设备可以正常运行目标应用的前提下,可以为单个容器设定显存
容量控制阈值,其中,显存容量控制阈值是指应用服务器100可以为该容器分配的显存的容
量最大值,当容器已占用显存对应的容量超出该显存容量控制阈值时,会触发数据交换。
[0079] 容器可以包含有多个进程,应用服务器100可以为不同的进程分配不同的显存,进程所占用的显存包含在容器的已占用显存中。假设应用服务器100获取到针对目标进程的
显存分配请求,应用服务器100会先根据该显存分配请求确定目标进程的预分配显存容量,
即需要分配给目标进程的显存的容量。然后,应用服务器100会获取目标进程所属的目标容
器的显存容量控制阈值,随后根据目标进程所属的目标容器的已占用显存容量和预分配显
存容量确定目标容器的预占用显存容量,预占用显存容量即目标容器已经占用的显存的容
量和需要分配给目标进程的显存的容量的总和。若预占用显存容量超出显存容量控制阈
值,则应用服务器100会将显存组件中存储的目标容器的目标转移数据转移到内存组件中,
然后在释放目标转移数据占用的显存的显存组件中,为目标进程分配预分配显存容量对应
的可用显存。其中,目标转移数据可以是该目标容器对应的数据中最近最少被访问和使用
的数据,也可以是该目标容器对应的数据中最早创建的数据,当然也可以根据实际需求来
确定,这里不作限制。由此可见,当容器所占用的显存的容量超出容量控制阈值时,应用服
务器100在进行数据交换时,仅会将该容器的目标转移数据从显存组件中转移到内存组件
中,并不会影响到其他容器的数据,也就不会影响其他容器对应的GPU性能。
[0080] 可以理解的是,本申请实施例提供的方法可以由计算机设备执行,计算机设备包括但不限于终端设备或应用服务器。其中,应用服务器可以是独立的物理服务器,也可以是
多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计
算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据
和人工智能平台等基础云计算服务的云服务器。
[0081] 可以理解的是,上述设备(如上述应用服务器100、终端设备10a、终端设备10b、终端设备10c、…、终端设备10n)可以是一个分布式系统中的一个节点,其中,该分布式系统可
以为区块链系统,该区块链系统可以是由该多个节点通过网络通信的形式连接形成的分布
式系统。其中,节点之间可以组成的点对点(P2P,Peer To Peer)网络,P2P 协议是一个运行
在传输控制协议(TCP,Transmission Control Protocol )协议之上的应用层协议。在分布
式系统中,任意形式的计算机设备,比如服务器、终端等电子设备都可以通过加入该点对点
网络而成为该区块链系统中的一个节点。
[0082] 其中,终端设备以及应用服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
[0083] 其中,图1中的终端设备10a、终端设备10b、终端设备10c以及终端设备10n可以包括手机、平板电脑、笔记本电脑、掌上电脑、智能音响、移动互联网设备(MID,mobile 
internet device)、POS(Point Of Sales,销售点)机、可穿戴设备(例如智能手表、智能手
环等)、车载终端等。
[0084] 为便于理解,请参见图2a‑图2b,图2a‑图2b是本申请实施例提供的一种数据处理场景示意图。当上述目标应用为云游戏应用时,即在云游戏场景下,上述应用服务器100可
以为云游戏服务器,通过创建多个容器实例,来支持不同的终端设备运行该云游戏应用,即
通过容器完成终端设备传来的游戏操作指令的计算以及游戏画面的渲染,然后将渲染完成
的游戏画面下发至终端设备。因此,如图2a所示的云游戏服务器2可以为上述图1所示的应
用服务器100。如图2a所示,在云游戏服务器2中,有三个容器,分别为容器21、容器22以及容
器23,上述三个容器分别连接有终端设备,假设容器21对应终端设备A,容器22对应终端设
备B,容器23对应终端设备C,其中,终端设备A、终端设备B和终端设备C均可以为上述图1所
对应实施例中的终端设备集群中的任一终端设备,如,终端设备A可以为终端设备10a,终端
设备B可以为终端设备10b,终端设备C可以为终端设备10c。
[0085] 如图2a所示,容器21中包含有进程211、进程212,容器22中包含有进程221、进程222,容器23中包含有进程231、进程232。不同容器中进程的执行环境彼此隔离,但是共享云
游戏服务器2的硬件资源,比如GPU、内存资源等等。云游戏服务器2中有两种形式的内存可
以使用,包括显存和系统内存。GPU可以访问的内存资源包括显存和系统内存中的部分内
存,通常称为图形转换表内存,当显存占满以后,部分数据会存入图形转换表内存中。当容
器中的进程需要通过GPU来实现某些操作,比如渲染操作时,就需要为其分配相应的显存。
如图2a所示,云游戏服务器2可以包含有显存组件24和内存组件25,其中,显存组件24可以
为独立显卡,内存组件25为可以为随机存取存储器,即系统内存。GPU可以访问显存组件24
中的所有显存,但是仅能访问内存组件25中的图形转换表内存。
[0086] 如图2a所示,此时显存组件24中已经被分配的显存包括单位显存241、单位显存242、单位显存243、单位显存244、单位显存245、单位显存246以及单位显存247,其中,单位
显存241分配给了容器21中的进程211,单位显存245分配给了容器21中的进程212,单位显
存242分配给了容器22中的进程221,单位显存244分配给了容器22中的进程222,单位显存
243分配给了容器23中的进程231,单位显存246和单位显存分配给了容器23中的进程232。
可以理解,单位显存可以用于存储进程对应的数据,由于不同进程对应的数据大小不同,需
要的显存对应的容量就不同,因此单位显存的容量可以不同。另外为了加快GPU对数据的访
问速度,可以根据数据的业务类型或者对应的函数类型对数据做进一步划分,为同一进程
分配多个单位显存,然后将划分好的数据存储进对应的单位显存中,简言之,同一进程可以
对应多个单位显存。
[0087] 如图2a所示,容器22中的进程221对应的数据除了被存储在单位显存242中以外,还有部分数据存储在了内存组件25中的单位图形表转换内存251中。其中,单位图形表转换
内存属于内存组件中可以被GPU硬件访问的内存。需要说明的是,云游戏服务器2中的各个
容器虽然共享显存组件24提供的显存,但是每个容器对应有显存容量控制阈值,即每个容
器可以使用的显存容量不会超过其对应的显存容量控制阈值,一旦超过该显存容量控制阈
值,容器对应的部分数据会被转移到内存组件25中进行存储。通常,云游戏服务器2会将容
器中访问次数较少的数据进行转移,可以避免多次触发数据交换,提高GPU性能。如图2a所
示,可以理解,倘若云游戏服务器2将容器22对应的所有数据均存储在显存组件中,其占用
的显存对应的预占用显存容量超过了容器22对应的显存容量控制阈值,因此云游戏服务器
2确定了容器22的目标转移数据,然后将其转移进了内存组件25中的单位图形转换表内存
251中进行存储。
[0088] 进一步地,为了更好的理解云游戏服务器2如何在容器预占用显存容量超过显存容量控制阈值时,进行数据交换的过程,请一并参见图2b。如图2b所示,假设此时目标进程
213需要占用显存,云游戏服务器2获取到针对目标进程的显存分配请求后,会先确定目标
进程213对应的预分配显存容量,假设预分配显存容量对应预分配显存248。进一步地,云游
戏服务器2需要确定该目标进程所属的目标容器的显存使用情况,来判断是否需要进行数
据交换。如图2b所示,云游戏服务器2会获取目标进程213所属的目标容器,即容器21的显存
容量控制阈值,该显存容量控制阈值对应有目标容器的最大可用显存2421。由图2a可知,容
器21中的进程211占用单位显存241,进程212占用单位显存245,加上目标进程213对应的预
分配显存248,如图2b所示,容器21预占用显存对应的预占用显存容量超出了最大可用显存
2421对应的显存容量控制阈值。因此,云游戏服务器2会进行数据交换操作,即先确定容器
21对应的目标转移数据,假设云游戏服务器2对单位显存245中存储的数据的访问次数最
少,则云游戏服务器2可以将单位显存245中的数据作为容器21的目标转移数据,然后云游
戏服务器2可以将目标转移数据转移到内存组件25中的单位图形转换表内存252中进行存
储。最后,云游戏服务器2可以在已释放目标转移数据占用的显存的内存组件24中,为目标
进程分配预分配显存容量对应的预分配显存248。从图2b可以得知,目标进程需要分配的显
存不足时,云游戏服务器仅会对该目标进程所属的目标容器中的数据进行交换,其他容器
中的进程对应的单位显存中存储的数据不会被交换,可以减少不同容器之间的GPU性能的
影响,间接保证其余容器连接的终端设备运行云游戏的流畅和体验。
[0089] 进一步地,请参见图3,图3是本申请实施例提供的一种数据处理方法的流程示意图。其中,该数据处理方法可以由应用服务器(例如,上述图1所对应实施例中的应用服务器
100)执行,也可以由应用服务器、终端设备集群(例如,上述图1所对应实施例中的终端设备
集群)共同执行。以下将以本数据处理方法由应用服务器执行为例进行说明。其中,该数据
处理方法至少可以包括以下步骤S101‑步骤S104:
[0090] 步骤S101,获取针对目标进程的显存分配请求,根据所述显存分配请求确定所述目标进程的预分配显存容量。
[0091] 具体的,显存(Video Memory)一般指显卡内存,它的作用是用来存储显示芯片处理过或者即将提取的渲染数据,显存和系统内存一样,是用来存储数据的部件,不过显存是
用来存储要处理的图形信息数据的部件。其中,显示芯片( Video chipset)是显卡的主要
处理单元,因此又称为图形处理器(Graphic Processing Unit,GPU),可以执行和处理进程
对应的渲染指令,用于点、直线、三角形等基础图形的绘制以及显示,或用于对图像进行压
缩编码操作。显卡有两种形式:独立显卡和集成显卡,对于独立显卡,显存和系统内存是独
立部署的,显存存在于GPU硬件,即独立显卡上;对于集成显卡,通常是从系统内存中分配一
块内存空间供GPU使用。
[0092] 具体的,进程是应用服务器中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。狭义上,进程是正在运行的应用
程序的实例,当应用程序需要调用渲染函数进行渲染操作时,实际上会调用显卡驱动提供
的接口函数来进行实施,在显卡驱动中,会根据相应的数据用途,在GPU可访问的某个内存
区域中分配相应大小的显存,并将应用程序传入的数据拷贝至该区域,之后,GPU硬件就可
以访问该数据。其中,渲染相关接口函数可以包括:OpenGL(Open Graphics Library,开放
式图形库),主要是用于渲染2D(two‑ dimension,二维)、3D(three‑dimension,三维)矢量
图形的跨语言、跨平台的应用程序编程接口(API);OpenGL ES (OpenGL for Embedded 
Systems,嵌入式系统的开放式图形库) 是 OpenGL 三维图形 API 的子集,主要用于手机
和游戏主机等嵌入式设备;Vulkan(下一代OpenGL)是另一个跨平台的2D和3D绘图应用程序
接口。应用服务器可以通过Mesa(一个开放源代码的计算机图形库),来实现OpenGL/OpenGL 
ES/Vulkan的应用程序编程接口。
[0093] 具体的,应用服务器获取到目标进程的显存分配请求,可以根据该显存分配请求确定需要给该目标进程预分配显存容量。其中,预分配显存容量即需要分配给该目标进程
的显存可以存储的数据大小。
[0094] 步骤S102,获取所述目标进程所属的目标容器的显存容量控制阈值。
[0095] 具体的,应用服务器可以创建容器,通过容器与一个终端设备连接,提供所连接终端设备运行目标应用所需的计算支持。其中,容器是操作系统虚拟化的一种类型。通过内核
态隔离机制,多个操作系统在内核态共用同一内核,在用户态多个操作系统保持相互独立,
即应用服务器中可以运行多个容器,从而可以保证多个终端设备正常运行目标应用。当目
标应用的运行需要应用服务器通过对于的容器完成大量的渲染操作,比如云游戏场景下,
即目标应用为游戏,应用服务器为云游戏服务器时,云游戏服务器除了根据终端设备上传
的操作指令完成对应的操作计算外,还需要将游戏场景渲染为视频音频流,通过网络传输
给终端设备。因此,在类似云游戏这种需要大量渲染操作的场景下,一个容器就需要占用较
多的显存来保证连接的终端设备中的目标应用正常运行,而应用服务器中的显存有限,多
个容器共同运行时,所需要的显存可能不足。为了保证容器中所运行进程在进行显存分配
时,可以保证有最低限度大小的显存可以分配,可以为容器设置显存容量控制阈值。
[0096] 具体的,显存容量控制阈值是指应用服务器分配给容器的显存可以存储的数据的最大阈值。当容器已占用的显存对应的容量超过容器的显存容量控制阈值时,即使应用服
务器还有空闲的显存可以进行分配,应用服务器也不会为该容器中的进程分配新的显存。
比如,应用服务器中的显存总容量为1GB(Gigabyte,千兆),容器A的显存容量控制阈值为
200MB(Megabyte,兆),假设应用服务器空闲的显存对应的总容量为500MB,但是当容器A已
占用的显存对应容量为200MB时,应用服务器也不会为容器A分配新的显存。因此,应用服务
器在接收到目标进程的显存分配请求后,会确定目标进程所属的目标容器,然后获取该目
标容器对应的显存容量控制阈值。可以理解,显存容量控制阈值可以根据实际情况提前配
置,比如根据应用服务器允许同时运行的容器最大个数以及应用服务器的显存总容量来设
定,这里不作限制。
[0097] 步骤S103,根据所述目标容器的已占用显存容量和所述预分配显存容量确定所述目标容器的预占用显存容量。
[0098] 具体的,应用服务器需要先查询目标容器的已占用显存对应的已占用显存容量,然后将已占用显存容量和预分配显存容量相加,得到目标容器的预占用显存容量,即倘若
给目标进程分配了预分配显存容量对应的可用显存后,目标容器将占用的显存对应的容
量。应用服务器将比较目标容器的预占用显存容量和显存容量控制阈值。
[0099] 步骤S104,若所述预占用显存容量超出所述显存容量控制阈值,则将显存组件中存储的所述目标容器的目标转移数据转移到内存组件中,在已释放所述目标转移数据占用
的显存的所述显存组件中,为所述目标进程分配所述预分配显存容量对应的可用显存。
[0100] 具体的,倘若目标容器的预占用显存容量超出显存容量控制阈值,则应用服务器将不能直接给目标进程分配预分配显存容量对应的可用显存。需要说明的是,对于GPU硬
件,其除了可以访问显存以外,还可以通过graphics address remapping table(图形地址
重映射表,GART)或graphics translation table(图形转换表,GTT)等方式间接访问部分
系统内存,这部分系统内存可以称为图形转换表内存(GTT Memory)。因此,当容器占用的显
存对应的容量达到该容器的显存容量控制阈值后,如果该容器有新的数据需要分配显存,
由于GPU硬件对显存中数据的读写性能高于GPU硬件对GTT Memory中数据的读写性能,应用
服务器会触发相应的内存数据交换机制,即将部分存放于显存(即显存组件)中的属于该容
器的数据转移到GTT Memory中,并释放相应的显存空间供显卡驱动程序重新分配。
[0101] 因此,若预占用显存容量超出显存容量控制阈值,应用服务器会先确定目标容器的目标转移数据,然后将目标转移数据从显存组件中转移到内存组件中,这样目标转移数
据占用的显存会被释放掉,然后,应用服务器会在已释放目标转移数据占用的显存的显存
组件中,为目标进程分配预分配显存容量对应的可用显存。其中,显存组件在应用服务器部
署的是独立显卡时,可以是独立显卡中的显存;在应用服务器部署的是集成显卡时,可以是
系统内存中被划分出来的一块内存。其中,内存组件即系统内存或者图形转换表内存。其
中,目标转移数据可以根据LRU(Least recently used,最近最少使用)规则确定的,即目标
容器对应的数据中最近最少使用的数据;目标转移数据也可以是目标容器对应的数据中最
早被创建的数据;目标转移数据也可以根据实际情况来确定,这里不作限制。需要说明的
是,存储目标转移数据的显存被释放后,目标容器的当前占用显存对应的当前占用显存容
量和目标进程对应的预分配显存容量相加后,应该小于显存容量控制阈值。倘若存储目标
转移数据的显存被释放后,目标容器的预分配显存容量加上实时占用显存容量仍然超过了
显存容量控制阈值,应用服务器可以再次确定新的目标转移数据,将新的目标转移数据转
移到内存组件中,直至可以在显存组件中为目标进程分配预分配显存容量对应的可用显
存。
[0102] 可选的,应用服务器可以将已转移到内存组件中的目标转移数据确定为目标数据,然后在接收到针对目标容器的目标数据的数据访问请求时,根据目标容器的实时占用
显存容量和目标数据的数据占用显存容量,确定目标容器新的预占用显存容量,若新的预
占用显存容量超出显存容量控制阈值,则根据数据访问请求重新在显存组件中确定目标容
器的更新目标转移数据;将更新目标转移数据转移到内存组件中,再从内存组件中将目标
数据转移回显存组件中。例如,应用服务器为了给进程1分配可用显存,将目标容器存储于
显存组件中的数据中的目标转移数据,比如数据A,存储进了内存组件中,在接收到GPU对数
据A的访问请求后,由于GPU对显存组件的读写能力高于GPU对内存组件的读写能力,因此应
用服务器可以将数据A转移回显存组件中进行处理。此时,应用服务器会根据目标容器的实
时占用显存容量和数据A对应的数据占用显存容量进行求和处理,确定转移回数据A后目标
容器的预占用显存容量,假设转移回数据A后目标容器的预占用显存容量将超过目标容器
的容器显存控制阈值,应用服务器会先重新在目标容器存储于显存组件中的数据中,获取
更新目标转移数据,比如数据B,将数据B转移到内存组件中,然后再将数据A转移回显存组
件中。
[0103] 可选的,应用服务器可以确定已转移到内存组件中的目标转移数据对应的数据占用显存容量,然后监测目标容器的实时占用显存容量,根据实时占用显存容量和数据占用
显存容量确定目标容器的可占用显存总容量;若可占用显存总容量低于显存容量控制阈
值,则从内存组件中将目标转移数据转移回显存组件。目标容器中的部分进程结束后,对应
的数据占用的显存也会被释放,目标容器的实时占用显存容量就会下降,此时即使将目标
容器存储在内存组件中的目标转移数据转移回显存组件,转移后目标容器的实时占用显存
容量也不会超过目标容器的显存容量控制阈值。例如,数据C在目标容器给进程2分配可用
显存时被转移到了内存组件中,进程2结束后,进程2占用的可用显存被释放,显存组件中有
足够的显存可以存储目标容器的数据C,此时可以将数据C从内存组件中转移回显存组件
中。此时当GPU硬件再次访问数据C,可以直接在显存组件中访问,节省了数据访问等待时
间。
[0104] 采用本申请实施例提供的方法,在获取到目标进程的显存分配请求后,可以根据该显存分配请求确定该目标进程的预分配显存容量,然后获取该目标进程所属的目标容器
的显存容量控制阈值,在根据目标容器的已占有显存容量和预分配容量确定目标容器的预
占用显存容量后,比较预占用显存容量和显存容量控制阈值,若预占用显存容量超出显存
容量控制阈值,则将显存组件中存储的目标容器的目标转移数据转移到内存组件中,在已
释放该目标转移数据占用的显存的显存组件中,为目标进程分配预分配显存容量对应的可
用显存。通过给目标容器配置显存容量控制阈值,在目标容器预占用显存容量超过该显存
容量控制阈值时,将该目标容器中的目标转移数据进行转移,释放目标转移数据占用的显
存,来保证目标进程可以分配到可用显存,还可以避免对其他容器中进程占用的显存造成
影响,从而减少不同容器之间的GPU性能影响。
[0105] 进一步地,请参见图4,图4是本申请实施例提供的一种数据处理方法的流程示意图。其中,该数据处理方法可以由应用服务器(例如,上述图1所对应实施例中的应用服务器
100)执行,也可以由应用服务器、终端设备集群(例如,上述图1所对应实施例中的终端设备
集群)共同执行。以下将以本数据处理方法由应用服务器执行为例进行说明。可以理解的
是,在云游戏及类似的场景下,应用服务器通常部署的是独立显卡,后续将默认应用服务器
部署的是独立显卡进行说明。其中,该数据处理方法至少可以包括以下步骤S201‑步骤
S206:
[0106] 步骤S201,获取针对目标进程的显存分配请求,根据所述显存分配请求确定所述目标进程的预分配显存容量。
[0107] 具体的,当目标进程需要调用渲染函数(例如OpenGL/OpenGL ES/Vulkan相关函数)进行渲染操作时,实际上会调用应用服务器上的显卡驱动提供的接口函数来进行实施。
其中,显卡驱动就是用来驱动显卡的程序,它是硬件所对应的软件。此时显卡驱动就需要根
据相应的数据用途,在GPU可访问的某个内存区域(如显存组件)中为该目标进程分配相应
大小的显存,并将目标进程传入的数据拷贝至该区域,之后,GPU硬件就可以访问该数据,完
成目标进程所需的渲染操作。因此,显卡驱动会先生成针对目标进程的显存分配请求,然后
将该显存分配请求发送给应用服务器的内核组件,向内核组件请求分配相应的显存空间。
其中,内核组件是应用服务器的操作系统的核心,是基于应用服务器的硬件的第一层软件
扩充,提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内
存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。应用服务器可以通过内
核组件获取针对目标进程的显存分配请求,然后通过内核组件根据该显存分配请求确定需
要分配给该目标进程的显存对应的预分配显存容量。
[0108] 步骤S202,获取所述目标进程所属的目标容器的显存容量控制阈值。
[0109] 具体的,应用服务器可以先确定目标进程所属的目标容器,然后通过内核组件确定该目标容器对应的显存管理子系统;最后在显存管理子系统中,获取该目标容器的显存
容量控制阈值。
[0110] 一个可行的实施例中,应用服务器可以通过cgroup(Control Groups,控制组)机制来为不同的容器做资源分配。其中,cgroup是一种可以限制、记录、隔离进程组所使用的
物理资源的机制,可以为容器实现虚拟化提供了基本保证,是构建Docker(容器引擎)等一
系列虚拟化管理工具的基石。cgroup包含有多个子系统,一个子系统是一个通过cgroup提
供的工具和接口来管理进程集合的模块,可以理解为一个资源控制器,用来调度资源或者
控制资源使用的上限。应用服务器可以通过cgroup创建一个GPU memory(内存)子系统(该
GPU memory子系统即上述所说的显存管理子系统),用来管理各个容器的显存资源使用状
况。为便于理解,请一并参见图5,图5是本申请实施例提供的一种显存管理子系统结构示意
图。如图5所示,应用服务器通过cgroup创建了图形处理内存子系统(即GPU memory子系
统),然后通过GPU memory子系统管理一个或多个在应用服务器中运行的容器对应的容器
集合,比如容器1集合,容器2集合,容器3集合。每个容器集合中包含有该容器中存在的进
程。如图5所示,容器1集合中包含有进程1、进程2和进程3;容器2集合中包含有进程4、进程5
和进程6;容器3集合中包含有进程7、进程8和进程9。应用服务器在将进程加入cgroup中时,
通常可以根据该进程对应的进程标识(Process Identifier,PID)来实现,每个进程在创建
时,均可以由内核组件分配一个新的唯一的PID值,来唯一标识该进程,换言之,容器集合中
可以包含每个进程对应的PID值。目标容器中的目标进程在调用渲染函数的过程中,显卡驱
动向内核组件请求分配相应的显存空间时,应用服务器可以通过内核组件在系统中根据目
标进程(例如,当前进程的PID)找到目标进程所属目标容器的GPU memory子系统,获取该
GPU memory子系统中的显存容量控制阈值,然后根据该显存容量控制阈值决定是否需要触
发内核组件的内存数据交换机制(即上述图2b所对应实施例中所述的数据交换),其中,内
存数据交换机制是指将显存中的部分数据交换到图形转换表内存中进行存储,然后释放该
部分数据占用的显存,供目标进程使用。内存数据交互机制可以参见下述步骤S204‑步骤
S06描述的具体实现过程。
[0111] 可选的,应用服务器可以通过容器管理工具获取目标容器的容器镜像数据,根据容器镜像数据运行目标容器。然后在运行目标容器的过程中,通过容器管理工具响应针对
目标容器的显存配置操作,获取显存参数,将显存参数转换为显存容量控制阈值,将显存容
量控制阈值传入内核组件。最后通过内核组件将目标容器的显存容量控制阈值存储进显存
管理子系统。一个可行的实施例中,为了配置目标容器可以访问的显存对应的显存容量控
制阈值,可以利用docker来加载并运行目标容器。其中,docker是一个开源的应用容器引
擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流
行的Linux(一种操作系统)或Windows(一种操作系统)机器上,也可以实现虚拟化。在目标
容器运行的过程中,可以通过docker传入相应的显存参数来设定目标容器可以分配的显存
容量大小,即显存容量控制阈值。比如:通过‑‑gpumemory(一种docker命令参数)来完成显
存参数的配置,参考代码如下:
[0112] # docker run ‑‑gpumemory ${gpu_memory_size} ${src_image_name}
[0113] 其中,${gpu_memory_size} 是目标容器可以分配的最大显存阈值,即显存参数,${src_image_name}是目标容器对应的镜像名称。Docker会将相应的显存参数转化成实际的
数据大小,即显存容量控制阈值。其中,显存参数对应的存储单位可以为MB或者GB等,显存
容量控制阈值对应的存储单位通常为字节(Byte)。然后docker会将显存容量控制阈值传入
内核,并存储在目标容器对应的cgroup的相关变量中,比如:gpumem_cgroup‑>gpumemory_
limit(一种结构体变量)。
[0114] 步骤S203,根据所述目标容器的已占用显存容量和所述预分配显存容量确定所述目标容器的预占用显存容量。
[0115] 具体的,步骤S203的实现过程可以参加上述图3所对应实施例中步骤S103的相关描述,这里不再进行赘述。
[0116] 步骤S204,若所述预占用显存容量超出所述显存容量控制阈值,则确定所述目标容器对应的显存访问记录列表;所述显存访问记录列表包含至少两个单位显存分别对应的
数据访问次数;所述显存组件包含所述至少两个单位显存。
[0117] 具体的,当预占用显存容量超过显存容量控制阈值时,会触发内核组件的内存数据交换机制。为了避免在内存数据交换的过程中,仅对目标容器中的数据进行交换,可以为
应用服务器中的每个容器建立对应的GPU Memory LRU(GPU Memory Least recently 
used,显存访问记录)列表, GPU Memory LRU列表用于记录对应容器中数据的使用情况,比
如,对数据的访问次数,便于应用服务器通过内核组件快速确定容器中最近最少使用的数
据,进而将这部分数据作为目标转移数据交换到GTT Memory,从而给目标进程提供足够的
显存空间。
[0118] 具体的,显存访问列表中可以包含至少两个单位显存分别对应的数据访问次数,其中,至少两个单位显存均是显存组件中的显存,一个单位显存用于存储一个进程对应的
数据,或者一个单位显存用于存储一个进程对应的某个业务类型的数据,不同单位显存的
大小可以不同。为便于理解,请一并参见图6,图6是本申请实施例提供的一种显存访问列表
示意图。如图6所示,应用服务器中可以包含有全局显存访问记录列表和各个容器私有的显
存访问记录列表。如图6所示,容器M私有的显存访问记录列表中可以包含有单位显存601,
单位显存602和单位显存603。单位显存601、单位显存602和单位显存603中存储的数据,皆
属于容器M。假设GPU硬件访问了5次单位显存601中存储的数据,则单位显存601对应的数据
访问次数为5。可以理解,容器M私有的显存访问记录列表中,除了记录单位显存601对应的
数据访问次数,还可以记录单位显存601在显存组件中的显存地址,单位显存601中存储的
数据所属的业务类型,单位显存601对应的显存容量,单位显存601中存储的数据每次被访
问的时间等等。如图6所示,容器N私有的显存访问记录列表中可以包含有多个单位显存和
每个单位显存对应的数据访问次数,容器M和容器N对应的显存访问记录列表不相同。另外,
应用服务器还可以对每个容器私有的显存访问记录列表进行汇总,得到全局显存访问记录
列表,以便于后续了解显存组件中的整体显存使用情况。
[0119] 步骤S205,将数据访问次数最少的单位显存中存储的数据,作为所述显存组件中存储的所述目标容器的目标转移数据。
[0120] 具体的,应用服务器会在目标容器对应的显存访问列表中,将数据访问次数最少的单位显存中存储的数据,作为显存组件中存储的目标转移数据。假设目标容器为上述图6
所对应实施例中的容器M,容器M对应的显存访问记录列表中记录了单位显存601对应的数
据访问次数为2,单位显存602对应的数据访问次数为3,单位显存603对应的数据访问次数
为6,则应用服务器会通过内核组件将单位显存1中存储的数据作为目标转移数据。需要说
明的是,应用服务器通过内核组件将单位显存1中存储的数据转移到内存组件中的图形转
换表内存后,如果释放出的显存仍然不足以为目标进程分配预分配显存容量对应的可用显
存,应用服务器可以继续访问显存访问记录列表,获取新的数据访问次数最少的单位显存,
即单位显存602,将单位602中存储的数据作为新的目标转移数据。
[0121] 可选的,若数据访问次数最少的单位显存中包括了至少两个最少访问单位显存,此时应用服务器可以确定至少两个最少访问单位显存中存储的数据所属的业务类型,然后
从至少两个最少访问单位显存中,获取业务类型对应的优先级最低的最少访问单位显存,
作为目标最少访问单位显存,将目标最少访问单位显存中存储的数据,作为显存组件中存
储的目标容器的目标转移数据。假设容器M私有的显存访问记录列表中记录了单位显存601
对应的数据访问次数为3,单位显存602对应的数据访问次数为3,单位显存603对应的数据
访问次数为6,不过单位显存601中存储的数据所属的业务类型对应的优先级高于单位显存
602中存储的数据所属的业务类型对应的优先级,因此可以应用服务器会将单位显存602中
存储的数据作为目标转移数据。
[0122] 步骤S206,将所述目标转移数据转移到内存组件中,在已释放所述目标转移数据占用的显存的所述显存组件中,为所述目标进程分配所述预分配显存容量对应的可用显
存。
[0123] 具体的,在将目标转移数据转移到内存组件,且为目标进程分配了可用显存后,应用服务器可以在显存访问记录列表中,删除目标转移数据对应的单位显存对应的数据访问
次数,且新增可用显存对应的默认数据访问次数,得到更新显存访问记录列表。其中,默认
数据访问次数可以设置为0。然后,应用服务器会将目标进程对应的进程数据存储进可用显
存中,并监测图形处理器对可用显存中存储的进程数据的访问情况;当监测到图形处理器
访问进程数据时,对默认数据访问次数进行累加处理,得到更新数据访问次数,将更新显存
访问记录列表中的默认数据访问次数更新为更新数据访问次数。
[0124] 可选的,上述显存访问记录列表中也可以包含至少两个进程分别对应的数据访问次数,其中,至少两个进程对应的数据存储于显存组件。即在显存访问记录表中,将进程对
应的数据作为容器对应的数据划分的依据。然后将数据访问次数最少的进程对应的数据,
作为显存组件中存储的目标容器的目标转移数据;然后将目标转移数据转移到内存组件
中,在已释放目标转移数据占用的显存的显存组件中,为目标进程分配预分配显存容量对
应的可用显存。
[0125] 可选的,上述显存访问记录列表中也可以包含至少两个单位显存分别对应的创建时间,其中,至少两个单位显存属于显存组件。即在显存访问记录列表中,可以记录每个单
位显存被创建的时间。然后将创建时间最早的单位显存中存储的数据,作为显存组件中存
储的所述目标容器的目标转移数据;最后将目标转移数据转移到内存组件中,在已释放目
标转移数据占用的显存的显存组件中,为目标进程分配预分配显存容量对应的可用显存。
比如,显存访问记录列表中包含单位显存E和单位显存F,单位显存E的创建时间是12月4日
8:00,单位显存F的创建时间是12月4日9:05,此时应用服务器会确定创建时间最早的单位
显存,即单位显存E,然后将单位显存E中存储的数据作为目标转移数据。
[0126] 通过本申请实施例提供的方法,若目标进程所属的目标容器预占用显存对应的预占用显存容量超过目标容器的显存容量控制阈值,则获取目标容器对应的显存访问记录列
表,将显存访问记录列表中记录的数据访问次数最少的数据作为显存组件中存储的目标容
器的目标转移数据,然后将目标转移数据转移到内存组件中,再在已释放目标转移数据占
用的显存的显存组件中,为目标进程分配预分配显存容量对应的可用显存。本申请实施例
提供的方法中,通过每个容器分别对应的显存访问记录列表来记录每个容器中数据的访问
情况,在目标容器触发内核数据交换机制时,根据该目标容器对应的显存访问记录列表来
转移该目标容器中的目标转移数据,由于目标转移数据归目标容器所有,因此产生的GPU性
能影响只针对目标容器,并不会对其他容器产生影响,最大限度地减少了对其他容器的影
响。
[0127] 请参见图7,图7是本申请实施例提供的一种数据处理装置的结构示意图。该数据处理装置可以是运行于计算机设备的一个计算机程序(包括程序代码),例如该数据处理装
置为一个应用软件;该装置可以用于执行本申请实施例提供的数据处理方法中的相应步
骤。如图7所示,该数据处理装置1可以包括:请求分配模块101、阈值获取模块102、容量确定
模块103以及显存控制模块104。
[0128] 请求分配模块101,用于获取针对目标进程的显存分配请求,根据显存分配请求确定目标进程的预分配显存容量;
[0129] 阈值获取模块102,用于获取目标进程所属的目标容器的显存容量控制阈值;
[0130] 容量确定模块103,用于根据目标容器的已占用显存容量和预分配显存容量确定目标容器的预占用显存容量;
[0131] 显存控制模块104,用于若预占用显存容量超出显存容量控制阈值,则将显存组件中存储的目标容器的目标转移数据转移到内存组件中,在已释放目标转移数据占用的显存
的显存组件中,为目标进程分配预分配显存容量对应的可用显存。
[0132] 其中,请求分配模块101、阈值获取模块102、容量确定模块103以及显存控制模块104的具体功能实现方式可以参见图3对应实施例中的步骤S101到步骤S104的具体描述,这
里不再进行赘述。
[0133] 请再参见图7,阈值获取模块102可以包括:容器确定单元1021、系统确定单元1022以及阈值获取单元1023。
[0134] 容器确定单元1021,用于确定目标进程所属的目标容器;
[0135] 系统确定单元1022,用于通过内核组件确定目标容器对应的显存管理子系统;
[0136] 阈值获取单元1023,用于在显存管理子系统中,获取目标容器的显存容量控制阈值。
[0137] 其中,容器确定单元1021、系统确定单元1022以及阈值获取单元1023的具体功能实现方式可以参见图4对应实施例中的步骤S202的具体描述,这里不再进行赘述。
[0138] 请再参见图7,数据处理装置1还可以包括:容器运行模块105、阈值配置模块106以及阈值存储模块107。
[0139] 容器运行模块105,用于通过容器管理工具获取目标容器的容器镜像数据,根据容器镜像数据运行目标容器;
[0140] 阈值配置模块106,用于在运行目标容器的过程中,通过容器管理工具响应针对目标容器的显存配置操作,获取显存参数,将显存参数转换为显存容量控制阈值,将显存容量
控制阈值传入内核组件;
[0141] 阈值存储模块107,用于通过内核组件将目标容器的显存容量控制阈值存储进显存管理子系统。
[0142] 其中,容器运行模块105、阈值配置模块106以及阈值存储模块107的具体功能实现方式可以参见图4对应实施例中的步骤S202的可选描述,这里不再进行赘述。
[0143] 请再参见图7,显存控制模块104可以包括:第一列表确定单元1041、第一数据确定单元1042以及第一显存控制单元1043。
[0144] 第一列表确定单元1041,用于确定目标容器对应的显存访问记录列表;显存访问记录列表包含至少两个单位显存分别对应的数据访问次数;显存组件包含至少两个单位显
存;
[0145] 第一数据确定单元1042,用于将数据访问次数最少的单位显存中存储的数据,作为显存组件中存储的目标容器的目标转移数据;
[0146] 第一显存控制单元1043,用于将目标转移数据转移到内存组件中,在已释放目标转移数据占用的显存的显存组件中,为目标进程分配预分配显存容量对应的可用显存。
[0147] 其中,第一列表确定单元1041、第一数据确定单元1042以及第一显存控制单元1043的具体功能实现方式可以参见图4对应实施例中的步骤S204到步骤S206的具体描述,
这里不再进行赘述。
[0148] 其中,数据访问次数最少的单位显存包括至少两个最少访问单位显存;
[0149] 请再参见图7,第一数据确定单元1042可以包括:类型确定子单元10421、优先级判断子单元10422以及数据确定子单元10423。
[0150] 类型确定子单元10421,用于确定至少两个最少访问单位显存中存储的数据所属的业务类型;
[0151] 优先级判断子单元10422,用于从至少两个最少访问单位显存中,获取业务类型对应的优先级最低的最少访问单位显存,作为目标最少访问单位显存;
[0152] 数据确定子单元10423,用于将目标最少访问单位显存中存储的数据,作为显存组件中存储的目标容器的目标转移数据。
[0153] 其中,类型确定子单元10421、优先级判断子单元10422以及数据确定子单元10423的具体功能实现方式可以参见图4对应实施例中的步骤S205的可选描述,这里不再进行赘
述。
[0154] 请再参见图7,数据处理装置1还可以包括:列表更新模块108。
[0155] 列表更新模块108,用于在显存访问记录列表中,删除目标转移数据对应的单位显存对应的数据访问次数,且新增可用显存对应的默认数据访问次数,得到更新显存访问记
录列表。
[0156] 其中,列表更新模块108的具体功能实现方式可以参见图4对应实施例中的步骤S206的具体描述,这里不再进行赘述。
[0157] 请再参见图7,数据处理装置1还可以包括:数据存储模块109、监测模块110以及次数更新模块111。
[0158] 数据存储模块109,用于将目标进程对应的进程数据存储进可用显存中;
[0159] 监测模块110,用于监测图形处理器对可用显存中存储的进程数据的访问情况;
[0160] 次数更新模块111,用于当监测到图形处理器访问进程数据时,对默认数据访问次数进行累加处理,得到更新数据访问次数,将更新显存访问记录列表中的默认数据访问次
数更新为更新数据访问次数。
[0161] 其中,数据存储模块109、监测模块110以及次数更新模块111的具体功能实现方式可以参见图4对应实施例中的步骤S206的具体描述,这里不再进行赘述。
[0162] 请再参见图7,显存控制模块104可以包括:第二列表确定单元1044、第二数据确定单元1045以及第二显存控制单元1046。
[0163] 第二列表确定单元1044,用于确定目标容器对应的显存访问记录列表;显存访问记录列表包含至少两个进程分别对应的数据访问次数;至少两个进程对应的数据存储于显
存组件;
[0164] 第二数据确定单元1045,用于将数据访问次数最少的进程对应的数据,作为显存组件中存储的目标容器的目标转移数据;
[0165] 第二显存控制单元1046,用于将目标转移数据转移到内存组件中,在已释放目标转移数据占用的显存的显存组件中,为目标进程分配预分配显存容量对应的可用显存。
[0166] 其中,第二列表确定单元1044、第二数据确定单元1045以及第二显存控制单元1046的具体功能实现方式可以参见图4对应实施例中的步骤S206的可选描述,这里不再进
行赘述。
[0167] 请再参见图7,显存控制模块104可以包括:第三列表确定单元1047、第三数据确定单元1048以及第三显存控制单元1049。
[0168] 第三列表确定单元1047,用于确定目标容器对应的显存访问记录列表;显存访问记录列表包含至少两个单位显存分别对应的创建时间;显存组件包含至少两个单位显存;
[0169] 第三数据确定单元1048,用于将创建时间最早的单位显存中存储的数据,作为显存组件中存储的目标容器的目标转移数据;
[0170] 第三显存控制单元1049,用于将目标转移数据转移到内存组件中,在已释放目标转移数据占用的显存的显存组件中,为目标进程分配预分配显存容量对应的可用显存。
[0171] 其中,第三列表确定单元1047、第三数据确定单元1048以及第三显存控制单元1049的具体功能实现方式可以参见图4对应实施例中的步骤S206的可选描述,这里不再进
行赘述。
[0172] 请再参见图7,数据处理装置1还可以包括:内存数据访问模块112。
[0173] 内存数据访问模块112,用于将已转移到内存组件中的目标转移数据确定为目标数据,接收针对目标容器的目标数据的数据访问请求;
[0174] 内存数据访问模块112,还用于根据目标容器的实时占用显存容量和目标数据的数据占用显存容量,确定目标容器新的预占用显存容量;
[0175] 内存数据访问模块112,还用于若新的预占用显存容量超出显存容量控制阈值,则根据数据访问请求重新在显存组件中确定目标容器的更新目标转移数据;
[0176] 内存数据访问模块112,还用于将更新目标转移数据转移到内存组件中;
[0177] 内存数据访问模块112,还用于从内存组件中将目标数据转移回显存组件中。
[0178] 其中,内存数据访问模块112的具体功能实现方式可以参见图3对应实施例中的步骤S104的可选描述,这里不再进行赘述。
[0179] 请再参见图7,数据处理装置1还可以包括:数据调整模块113。
[0180] 数据调整模块113,用于确定已转移到内存组件中的目标转移数据对应的数据占用显存容量;
[0181] 数据调整模块113,还用于监测目标容器的实时占用显存容量;
[0182] 数据调整模块113,还用于根据实时占用显存容量和数据占用显存容量确定目标容器的可占用显存总容量;
[0183] 数据调整模块113,还用于若可占用显存总容量低于显存容量控制阈值,则从内存组件中将目标转移数据转移回显存组件。
[0184] 其中,数据调整模块113的具体功能实现方式可以参见图3对应实施例中的步骤S104的可选描述,这里不再进行赘述。
[0185] 进一步地,请参见图8,图8是本申请实施例提供的一种计算机设备的结构示意图。如图8所示,上述图7所对应实施例中的数据处理装置1可以应用于上述计算机设备1000,上
述计算机设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,上述计算机
设备1000还包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现
这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(Display)、键盘
(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选
的可以包括标准的有线接口、无线接口(如WI‑FI接口)。存储器1005可以是高速RAM存储器,
也可以是非不稳定的存储器(non‑volatile memory),例如至少一个磁盘存储器。存储器
1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图8所示,作为一种
计算机可读存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以
及设备控制应用程序。
[0186] 在图8所示的计算机设备1000中,网络接口1004可提供网络通讯功能;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设
备控制应用程序,以实现:
[0187] 获取针对目标进程的显存分配请求,根据显存分配请求确定目标进程的预分配显存容量;
[0188] 获取目标进程所属的目标容器的显存容量控制阈值;
[0189] 根据目标容器的已占用显存容量和预分配显存容量确定目标容器的预占用显存容量;
[0190] 若预占用显存容量超出显存容量控制阈值,则将显存组件中存储的目标容器的目标转移数据转移到内存组件中,在已释放目标转移数据占用的显存的显存组件中,为目标
进程分配预分配显存容量对应的可用显存。
[0191] 应当理解,本申请实施例中所描述的计算机设备1000可执行前文图3、图4所对应实施例中对该数据处理方法的描述,也可执行前文图7所对应实施例中对该数据处理装置1
的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
[0192] 此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且所述计算机可读存储介质中存储有前文提及的数据处理装置1所执行的计算机程序,当所述
处理器执行所述计算机程序时,能够执行前文图3、图4所对应实施例中对所述数据处理方
法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行
赘述。对于本申请所涉及的计算机存储介质实施例中未披露的技术细节,请参照本申请方
法实施例的描述。
[0193] 上述计算机可读存储介质可以是前述任一实施例提供的数据处理装置或者上述计算机设备的内部存储单元,例如计算机设备的硬盘或内存。该计算机可读存储介质也可
以是该计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡
(smart media card,SMC),安全数字(secure digital,SD)卡,闪存卡(flash card)等。进
一步地,该计算机可读存储介质还可以既包括该计算机设备的内部存储单元也包括外部存
储设备。该计算机可读存储介质用于存储该计算机程序以及该计算机设备所需的其他程序
和数据。该计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
[0194] 此外,这里需要指出的是:本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读
存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行
该计算机指令,使得该计算机设备执行前文图3、图4任一个所对应实施例提供的方法。
[0195] 本申请实施例的说明书和权利要求书及附图中的术语“第一”、“第二”等是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖
不排他的包含。例如包含了一系列步骤或单元的过程、方法、装置、产品或设备没有限定于
已列出的步骤或模块,而是可选地还包括没有列出的步骤或模块,或可选地还包括对于这
些过程、方法、装置、产品或设备固有的其他步骤单元。
[0196] 本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件
和软件的可互换性,在上述说明中已经按照网元一般性地描述了各示例的组成及步骤。这
些网元究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专
业技术人员可以对每个特定的应用来使用不同方法来实现所描述的网元,但是这种实现不
应认为超出本申请的范围。
[0197] 以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。