一种数据处理方法、装置、设备以及可读存储介质转让专利
申请号 : CN202111027385.7
文献号 : CN113467958B
文献日 : 2021-12-14
发明人 : 赵新达 , 杨衍东 , 龚志鹏 , 袁志强 , 杨昊 , 周荣鑫 , 李文焱 , 刘雷 , 周威 , 曹琛
申请人 : 腾讯科技(深圳)有限公司
摘要 :
权利要求 :
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任一项所述的方法。
说明书 :
一种数据处理方法、装置、设备以及可读存储介质
技术领域
背景技术
染函数的过程中,显卡驱动会尽可能为该进程占用足够的显存,而服务器中显存的容量是
有限的,当显存被用满后,某个容器中新的进程运行需要分配显存时,通常会利用GPU
(Graphic Processing Unit,图形处理器)对显存和GTT Memory(Graphics Translation
Table Memory,图形转换表内存)的可访问特性,将部分存储在显存中的数据交换到GTT
Memory中,当GPU需要再次访问该被交换数据时,该被交换数据会从GTT Memory重新被交换
到显存中。但是,当数据交换发生时,会占用GPU资源进行数据交换操作,从而带来GPU性能
的损耗。当A容器运行占用的显存较多时,B容器需要分配显存时,就容易触发数据的交换,B
容器的GPU性能会受到影响,可见现有技术中对容器进行数据交换的过程中,可能会对其余
容器的GPU性能造成影响。
发明内容
进程分配预分配显存容量对应的可用显存。
显存组件中,为目标进程分配预分配显存容量对应的可用显存。
制阈值传入内核组件;
列表。
更新为更新数据访问次数。
件;
本申请实施例中的方法。
备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该
计算机设备执行本申请实施例中的方法。
控制阈值,再根据目标容器的已占用显存容量和预分配显存容量确定目标容器的预占用显
存容量,若预占用显存容量超出显存容量控制阈值,则将显存组件中存储的目标容器的目
标转移数据转移到内存组件中,在已释放该目标转移数据占用的显存的显存组件中,为目
标进程分配预分配显存容量对应的可用显存。通过本申请实施例提供的方法,目标容器可
以占用的显存对应的容量不会超过该目标容器的显存容量控制阈值,可以避免目标容器占
用过多显存而导致其余容器可用显存不足;当目标容器的预占用显存容量超过该显存容量
控制阈值时,仅对该目标容器的目标转移数据进行转移,不动用其余容器的数据,可以减少
不同容器之间的GPU性能影响。
附图说明
申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以
根据这些附图获得其他的附图。
具体实施方式
本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他
实施例,都属于本申请保护的范围。
扩展的方式获得所需服务。这种服务可以是IT和软件、互联网相关,也可是其他服务。云计
算是网格计算(Grid Computing )、分布式计算(Distributed Computing)、并行计算
(Parallel Computing)、效用计算(Utility Computing)、网络存储(Network Storage
Technologies)、虚拟化(Virtualization)、负载均衡(Load Balance)等传统计算机和网络
技术发展融合的产物。
算的产生从理念上将推动整个互联网模式、企业管理模式发生革命性的变革。
(thin client)能运行高品质游戏。在云游戏场景下,游戏并不在玩家游戏终端,而是在云
端服务器中运行,并由云端服务器将游戏场景渲染为视频音频流,通过网络传输给玩家游
戏终端。玩家游戏终端无需拥有强大的图形运算与数据处理能力,仅需拥有基本的流媒体
播放能力与获取玩家输入指令并发送给云端服务器的能力即可。
备,如图1所示,具体可以包括终端设备10a、终端设备10b、终端设备10c、…、终端设备10n。
如图1所示,终端设备10a、终端设备10b、终端设备10c、…、终端设备10n可以分别与上述应
用服务器100进行网络连接,以便于每个终端设备可以通过网络连接与应用服务器100进行
数据交互,以便于每个终端设备可以接收到来自于上述应用服务器100的音视频流数据。
戏应用、视频编辑应用、社交应用、即时通信应用、直播应用、短视频应用、视频应用、音乐应
用、购物应用、小说应用、支付应用、浏览器等具有显示文字、图像、音频以及视频等数据信
息功能的应用中的一个或多个应用。在云计算场景下,应用服务器100中可以创建容器,一
个容器可以与一个终端设备进行连接,从而提供该终端设备所需的计算支持。应用服务器
100中可以同时创建并运行多个容器,每个容器均连接有终端设备,从而保证多个终端设备
可以正常运行目标应用。可以理解,应用服务器100中的多个容器将共享应用服务器100的
硬件资源,其中,硬件资源可以包括显存组件中的显存和内存组件中的图形转换表内存,容
器需要GPU运算时,对应的数据通常存储在显存组件的显存中,当显存不够时,会触发数据
交换,显存中的部分数据会被转移到图形转换表内存中进行存储。由于应用服务器100的显
存有限,因此,在保证终端设备可以正常运行目标应用的前提下,可以为单个容器设定显存
容量控制阈值,其中,显存容量控制阈值是指应用服务器100可以为该容器分配的显存的容
量最大值,当容器已占用显存对应的容量超出该显存容量控制阈值时,会触发数据交换。
显存分配请求,应用服务器100会先根据该显存分配请求确定目标进程的预分配显存容量,
即需要分配给目标进程的显存的容量。然后,应用服务器100会获取目标进程所属的目标容
器的显存容量控制阈值,随后根据目标进程所属的目标容器的已占用显存容量和预分配显
存容量确定目标容器的预占用显存容量,预占用显存容量即目标容器已经占用的显存的容
量和需要分配给目标进程的显存的容量的总和。若预占用显存容量超出显存容量控制阈
值,则应用服务器100会将显存组件中存储的目标容器的目标转移数据转移到内存组件中,
然后在释放目标转移数据占用的显存的显存组件中,为目标进程分配预分配显存容量对应
的可用显存。其中,目标转移数据可以是该目标容器对应的数据中最近最少被访问和使用
的数据,也可以是该目标容器对应的数据中最早创建的数据,当然也可以根据实际需求来
确定,这里不作限制。由此可见,当容器所占用的显存的容量超出容量控制阈值时,应用服
务器100在进行数据交换时,仅会将该容器的目标转移数据从显存组件中转移到内存组件
中,并不会影响到其他容器的数据,也就不会影响其他容器对应的GPU性能。
多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计
算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据
和人工智能平台等基础云计算服务的云服务器。
以为区块链系统,该区块链系统可以是由该多个节点通过网络通信的形式连接形成的分布
式系统。其中,节点之间可以组成的点对点(P2P,Peer To Peer)网络,P2P 协议是一个运行
在传输控制协议(TCP,Transmission Control Protocol )协议之上的应用层协议。在分布
式系统中,任意形式的计算机设备,比如服务器、终端等电子设备都可以通过加入该点对点
网络而成为该区块链系统中的一个节点。
internet device)、POS(Point Of Sales,销售点)机、可穿戴设备(例如智能手表、智能手
环等)、车载终端等。
以为云游戏服务器,通过创建多个容器实例,来支持不同的终端设备运行该云游戏应用,即
通过容器完成终端设备传来的游戏操作指令的计算以及游戏画面的渲染,然后将渲染完成
的游戏画面下发至终端设备。因此,如图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。
游戏服务器2的硬件资源,比如GPU、内存资源等等。云游戏服务器2中有两种形式的内存可
以使用,包括显存和系统内存。GPU可以访问的内存资源包括显存和系统内存中的部分内
存,通常称为图形转换表内存,当显存占满以后,部分数据会存入图形转换表内存中。当容
器中的进程需要通过GPU来实现某些操作,比如渲染操作时,就需要为其分配相应的显存。
如图2a所示,云游戏服务器2可以包含有显存组件24和内存组件25,其中,显存组件24可以
为独立显卡,内存组件25为可以为随机存取存储器,即系统内存。GPU可以访问显存组件24
中的所有显存,但是仅能访问内存组件25中的图形转换表内存。
显存241分配给了容器21中的进程211,单位显存245分配给了容器21中的进程212,单位显
存242分配给了容器22中的进程221,单位显存244分配给了容器22中的进程222,单位显存
243分配给了容器23中的进程231,单位显存246和单位显存分配给了容器23中的进程232。
可以理解,单位显存可以用于存储进程对应的数据,由于不同进程对应的数据大小不同,需
要的显存对应的容量就不同,因此单位显存的容量可以不同。另外为了加快GPU对数据的访
问速度,可以根据数据的业务类型或者对应的函数类型对数据做进一步划分,为同一进程
分配多个单位显存,然后将划分好的数据存储进对应的单位显存中,简言之,同一进程可以
对应多个单位显存。
内存属于内存组件中可以被GPU硬件访问的内存。需要说明的是,云游戏服务器2中的各个
容器虽然共享显存组件24提供的显存,但是每个容器对应有显存容量控制阈值,即每个容
器可以使用的显存容量不会超过其对应的显存容量控制阈值,一旦超过该显存容量控制阈
值,容器对应的部分数据会被转移到内存组件25中进行存储。通常,云游戏服务器2会将容
器中访问次数较少的数据进行转移,可以避免多次触发数据交换,提高GPU性能。如图2a所
示,可以理解,倘若云游戏服务器2将容器22对应的所有数据均存储在显存组件中,其占用
的显存对应的预占用显存容量超过了容器22对应的显存容量控制阈值,因此云游戏服务器
2确定了容器22的目标转移数据,然后将其转移进了内存组件25中的单位图形转换表内存
251中进行存储。
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性能的
影响,间接保证其余容器连接的终端设备运行云游戏的流畅和体验。
100)执行,也可以由应用服务器、终端设备集群(例如,上述图1所对应实施例中的终端设备
集群)共同执行。以下将以本数据处理方法由应用服务器执行为例进行说明。其中,该数据
处理方法至少可以包括以下步骤S101‑步骤S104:
用来存储要处理的图形信息数据的部件。其中,显示芯片( Video chipset)是显卡的主要
处理单元,因此又称为图形处理器(Graphic Processing Unit,GPU),可以执行和处理进程
对应的渲染指令,用于点、直线、三角形等基础图形的绘制以及显示,或用于对图像进行压
缩编码操作。显卡有两种形式:独立显卡和集成显卡,对于独立显卡,显存和系统内存是独
立部署的,显存存在于GPU硬件,即独立显卡上;对于集成显卡,通常是从系统内存中分配一
块内存空间供GPU使用。
程序的实例,当应用程序需要调用渲染函数进行渲染操作时,实际上会调用显卡驱动提供
的接口函数来进行实施,在显卡驱动中,会根据相应的数据用途,在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的应用程序编程接口。
的显存可以存储的数据大小。
态隔离机制,多个操作系统在内核态共用同一内核,在用户态多个操作系统保持相互独立,
即应用服务器中可以运行多个容器,从而可以保证多个终端设备正常运行目标应用。当目
标应用的运行需要应用服务器通过对于的容器完成大量的渲染操作,比如云游戏场景下,
即目标应用为游戏,应用服务器为云游戏服务器时,云游戏服务器除了根据终端设备上传
的操作指令完成对应的操作计算外,还需要将游戏场景渲染为视频音频流,通过网络传输
给终端设备。因此,在类似云游戏这种需要大量渲染操作的场景下,一个容器就需要占用较
多的显存来保证连接的终端设备中的目标应用正常运行,而应用服务器中的显存有限,多
个容器共同运行时,所需要的显存可能不足。为了保证容器中所运行进程在进行显存分配
时,可以保证有最低限度大小的显存可以分配,可以为容器设置显存容量控制阈值。
务器还有空闲的显存可以进行分配,应用服务器也不会为该容器中的进程分配新的显存。
比如,应用服务器中的显存总容量为1GB(Gigabyte,千兆),容器A的显存容量控制阈值为
200MB(Megabyte,兆),假设应用服务器空闲的显存对应的总容量为500MB,但是当容器A已
占用的显存对应容量为200MB时,应用服务器也不会为容器A分配新的显存。因此,应用服务
器在接收到目标进程的显存分配请求后,会确定目标进程所属的目标容器,然后获取该目
标容器对应的显存容量控制阈值。可以理解,显存容量控制阈值可以根据实际情况提前配
置,比如根据应用服务器允许同时运行的容器最大个数以及应用服务器的显存总容量来设
定,这里不作限制。
给目标进程分配了预分配显存容量对应的可用显存后,目标容器将占用的显存对应的容
量。应用服务器将比较目标容器的预占用显存容量和显存容量控制阈值。
的显存的所述显存组件中,为所述目标进程分配所述预分配显存容量对应的可用显存。
件,其除了可以访问显存以外,还可以通过graphics address remapping table(图形地址
重映射表,GART)或graphics translation table(图形转换表,GTT)等方式间接访问部分
系统内存,这部分系统内存可以称为图形转换表内存(GTT Memory)。因此,当容器占用的显
存对应的容量达到该容器的显存容量控制阈值后,如果该容器有新的数据需要分配显存,
由于GPU硬件对显存中数据的读写性能高于GPU硬件对GTT Memory中数据的读写性能,应用
服务器会触发相应的内存数据交换机制,即将部分存放于显存(即显存组件)中的属于该容
器的数据转移到GTT Memory中,并释放相应的显存空间供显卡驱动程序重新分配。
据占用的显存会被释放掉,然后,应用服务器会在已释放目标转移数据占用的显存的显存
组件中,为目标进程分配预分配显存容量对应的可用显存。其中,显存组件在应用服务器部
署的是独立显卡时,可以是独立显卡中的显存;在应用服务器部署的是集成显卡时,可以是
系统内存中被划分出来的一块内存。其中,内存组件即系统内存或者图形转换表内存。其
中,目标转移数据可以根据LRU(Least recently used,最近最少使用)规则确定的,即目标
容器对应的数据中最近最少使用的数据;目标转移数据也可以是目标容器对应的数据中最
早被创建的数据;目标转移数据也可以根据实际情况来确定,这里不作限制。需要说明的
是,存储目标转移数据的显存被释放后,目标容器的当前占用显存对应的当前占用显存容
量和目标进程对应的预分配显存容量相加后,应该小于显存容量控制阈值。倘若存储目标
转移数据的显存被释放后,目标容器的预分配显存容量加上实时占用显存容量仍然超过了
显存容量控制阈值,应用服务器可以再次确定新的目标转移数据,将新的目标转移数据转
移到内存组件中,直至可以在显存组件中为目标进程分配预分配显存容量对应的可用显
存。
显存容量和目标数据的数据占用显存容量,确定目标容器新的预占用显存容量,若新的预
占用显存容量超出显存容量控制阈值,则根据数据访问请求重新在显存组件中确定目标容
器的更新目标转移数据;将更新目标转移数据转移到内存组件中,再从内存组件中将目标
数据转移回显存组件中。例如,应用服务器为了给进程1分配可用显存,将目标容器存储于
显存组件中的数据中的目标转移数据,比如数据A,存储进了内存组件中,在接收到GPU对数
据A的访问请求后,由于GPU对显存组件的读写能力高于GPU对内存组件的读写能力,因此应
用服务器可以将数据A转移回显存组件中进行处理。此时,应用服务器会根据目标容器的实
时占用显存容量和数据A对应的数据占用显存容量进行求和处理,确定转移回数据A后目标
容器的预占用显存容量,假设转移回数据A后目标容器的预占用显存容量将超过目标容器
的容器显存控制阈值,应用服务器会先重新在目标容器存储于显存组件中的数据中,获取
更新目标转移数据,比如数据B,将数据B转移到内存组件中,然后再将数据A转移回显存组
件中。
显存容量确定目标容器的可占用显存总容量;若可占用显存总容量低于显存容量控制阈
值,则从内存组件中将目标转移数据转移回显存组件。目标容器中的部分进程结束后,对应
的数据占用的显存也会被释放,目标容器的实时占用显存容量就会下降,此时即使将目标
容器存储在内存组件中的目标转移数据转移回显存组件,转移后目标容器的实时占用显存
容量也不会超过目标容器的显存容量控制阈值。例如,数据C在目标容器给进程2分配可用
显存时被转移到了内存组件中,进程2结束后,进程2占用的可用显存被释放,显存组件中有
足够的显存可以存储目标容器的数据C,此时可以将数据C从内存组件中转移回显存组件
中。此时当GPU硬件再次访问数据C,可以直接在显存组件中访问,节省了数据访问等待时
间。
的显存容量控制阈值,在根据目标容器的已占有显存容量和预分配容量确定目标容器的预
占用显存容量后,比较预占用显存容量和显存容量控制阈值,若预占用显存容量超出显存
容量控制阈值,则将显存组件中存储的目标容器的目标转移数据转移到内存组件中,在已
释放该目标转移数据占用的显存的显存组件中,为目标进程分配预分配显存容量对应的可
用显存。通过给目标容器配置显存容量控制阈值,在目标容器预占用显存容量超过该显存
容量控制阈值时,将该目标容器中的目标转移数据进行转移,释放目标转移数据占用的显
存,来保证目标进程可以分配到可用显存,还可以避免对其他容器中进程占用的显存造成
影响,从而减少不同容器之间的GPU性能影响。
100)执行,也可以由应用服务器、终端设备集群(例如,上述图1所对应实施例中的终端设备
集群)共同执行。以下将以本数据处理方法由应用服务器执行为例进行说明。可以理解的
是,在云游戏及类似的场景下,应用服务器通常部署的是独立显卡,后续将默认应用服务器
部署的是独立显卡进行说明。其中,该数据处理方法至少可以包括以下步骤S201‑步骤
S206:
其中,显卡驱动就是用来驱动显卡的程序,它是硬件所对应的软件。此时显卡驱动就需要根
据相应的数据用途,在GPU可访问的某个内存区域(如显存组件)中为该目标进程分配相应
大小的显存,并将目标进程传入的数据拷贝至该区域,之后,GPU硬件就可以访问该数据,完
成目标进程所需的渲染操作。因此,显卡驱动会先生成针对目标进程的显存分配请求,然后
将该显存分配请求发送给应用服务器的内核组件,向内核组件请求分配相应的显存空间。
其中,内核组件是应用服务器的操作系统的核心,是基于应用服务器的硬件的第一层软件
扩充,提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内
存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。应用服务器可以通过内
核组件获取针对目标进程的显存分配请求,然后通过内核组件根据该显存分配请求确定需
要分配给该目标进程的显存对应的预分配显存容量。
容量控制阈值。
物理资源的机制,可以为容器实现虚拟化提供了基本保证,是构建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描述的具体实现过程。
目标容器的显存配置操作,获取显存参数,将显存参数转换为显存容量控制阈值,将显存容
量控制阈值传入内核组件。最后通过内核组件将目标容器的显存容量控制阈值存储进显存
管理子系统。一个可行的实施例中,为了配置目标容器可以访问的显存对应的显存容量控
制阈值,可以利用docker来加载并运行目标容器。其中,docker是一个开源的应用容器引
擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流
行的Linux(一种操作系统)或Windows(一种操作系统)机器上,也可以实现虚拟化。在目标
容器运行的过程中,可以通过docker传入相应的显存参数来设定目标容器可以分配的显存
容量大小,即显存容量控制阈值。比如:通过‑‑gpumemory(一种docker命令参数)来完成显
存参数的配置,参考代码如下:
数据大小,即显存容量控制阈值。其中,显存参数对应的存储单位可以为MB或者GB等,显存
容量控制阈值对应的存储单位通常为字节(Byte)。然后docker会将显存容量控制阈值传入
内核,并存储在目标容器对应的cgroup的相关变量中,比如:gpumem_cgroup‑>gpumemory_
limit(一种结构体变量)。
数据访问次数;所述显存组件包含所述至少两个单位显存。
应用服务器中的每个容器建立对应的GPU Memory LRU(GPU Memory Least recently
used,显存访问记录)列表, GPU Memory LRU列表用于记录对应容器中数据的使用情况,比
如,对数据的访问次数,便于应用服务器通过内核组件快速确定容器中最近最少使用的数
据,进而将这部分数据作为目标转移数据交换到GTT Memory,从而给目标进程提供足够的
显存空间。
数据,或者一个单位显存用于存储一个进程对应的某个业务类型的数据,不同单位显存的
大小可以不同。为便于理解,请一并参见图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对应的显存访问记录列表不相同。另外,
应用服务器还可以对每个容器私有的显存访问记录列表进行汇总,得到全局显存访问记录
列表,以便于后续了解显存组件中的整体显存使用情况。
所对应实施例中的容器M,容器M对应的显存访问记录列表中记录了单位显存601对应的数
据访问次数为2,单位显存602对应的数据访问次数为3,单位显存603对应的数据访问次数
为6,则应用服务器会通过内核组件将单位显存1中存储的数据作为目标转移数据。需要说
明的是,应用服务器通过内核组件将单位显存1中存储的数据转移到内存组件中的图形转
换表内存后,如果释放出的显存仍然不足以为目标进程分配预分配显存容量对应的可用显
存,应用服务器可以继续访问显存访问记录列表,获取新的数据访问次数最少的单位显存,
即单位显存602,将单位602中存储的数据作为新的目标转移数据。
从至少两个最少访问单位显存中,获取业务类型对应的优先级最低的最少访问单位显存,
作为目标最少访问单位显存,将目标最少访问单位显存中存储的数据,作为显存组件中存
储的目标容器的目标转移数据。假设容器M私有的显存访问记录列表中记录了单位显存601
对应的数据访问次数为3,单位显存602对应的数据访问次数为3,单位显存603对应的数据
访问次数为6,不过单位显存601中存储的数据所属的业务类型对应的优先级高于单位显存
602中存储的数据所属的业务类型对应的优先级,因此可以应用服务器会将单位显存602中
存储的数据作为目标转移数据。
存。
次数,且新增可用显存对应的默认数据访问次数,得到更新显存访问记录列表。其中,默认
数据访问次数可以设置为0。然后,应用服务器会将目标进程对应的进程数据存储进可用显
存中,并监测图形处理器对可用显存中存储的进程数据的访问情况;当监测到图形处理器
访问进程数据时,对默认数据访问次数进行累加处理,得到更新数据访问次数,将更新显存
访问记录列表中的默认数据访问次数更新为更新数据访问次数。
应的数据作为容器对应的数据划分的依据。然后将数据访问次数最少的进程对应的数据,
作为显存组件中存储的目标容器的目标转移数据;然后将目标转移数据转移到内存组件
中,在已释放目标转移数据占用的显存的显存组件中,为目标进程分配预分配显存容量对
应的可用显存。
位显存被创建的时间。然后将创建时间最早的单位显存中存储的数据,作为显存组件中存
储的所述目标容器的目标转移数据;最后将目标转移数据转移到内存组件中,在已释放目
标转移数据占用的显存的显存组件中,为目标进程分配预分配显存容量对应的可用显存。
比如,显存访问记录列表中包含单位显存E和单位显存F,单位显存E的创建时间是12月4日
8:00,单位显存F的创建时间是12月4日9:05,此时应用服务器会确定创建时间最早的单位
显存,即单位显存E,然后将单位显存E中存储的数据作为目标转移数据。
表,将显存访问记录列表中记录的数据访问次数最少的数据作为显存组件中存储的目标容
器的目标转移数据,然后将目标转移数据转移到内存组件中,再在已释放目标转移数据占
用的显存的显存组件中,为目标进程分配预分配显存容量对应的可用显存。本申请实施例
提供的方法中,通过每个容器分别对应的显存访问记录列表来记录每个容器中数据的访问
情况,在目标容器触发内核数据交换机制时,根据该目标容器对应的显存访问记录列表来
转移该目标容器中的目标转移数据,由于目标转移数据归目标容器所有,因此产生的GPU性
能影响只针对目标容器,并不会对其他容器产生影响,最大限度地减少了对其他容器的影
响。
置为一个应用软件;该装置可以用于执行本申请实施例提供的数据处理方法中的相应步
骤。如图7所示,该数据处理装置1可以包括:请求分配模块101、阈值获取模块102、容量确定
模块103以及显存控制模块104。
的显存组件中,为目标进程分配预分配显存容量对应的可用显存。
里不再进行赘述。
控制阈值传入内核组件;
存;
这里不再进行赘述。
述。
录列表。
数更新为更新数据访问次数。
存组件;
行赘述。
行赘述。
述计算机设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,上述计算机
设备1000还包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现
这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(Display)、键盘
(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选
的可以包括标准的有线接口、无线接口(如WI‑FI接口)。存储器1005可以是高速RAM存储器,
也可以是非不稳定的存储器(non‑volatile memory),例如至少一个磁盘存储器。存储器
1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图8所示,作为一种
计算机可读存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以
及设备控制应用程序。
备控制应用程序,以实现:
进程分配预分配显存容量对应的可用显存。
的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
处理器执行所述计算机程序时,能够执行前文图3、图4所对应实施例中对所述数据处理方
法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行
赘述。对于本申请所涉及的计算机存储介质实施例中未披露的技术细节,请参照本申请方
法实施例的描述。
以是该计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡
(smart media card,SMC),安全数字(secure digital,SD)卡,闪存卡(flash card)等。进
一步地,该计算机可读存储介质还可以既包括该计算机设备的内部存储单元也包括外部存
储设备。该计算机可读存储介质用于存储该计算机程序以及该计算机设备所需的其他程序
和数据。该计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行
该计算机指令,使得该计算机设备执行前文图3、图4任一个所对应实施例提供的方法。
不排他的包含。例如包含了一系列步骤或单元的过程、方法、装置、产品或设备没有限定于
已列出的步骤或模块,而是可选地还包括没有列出的步骤或模块,或可选地还包括对于这
些过程、方法、装置、产品或设备固有的其他步骤单元。
和软件的可互换性,在上述说明中已经按照网元一般性地描述了各示例的组成及步骤。这
些网元究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专
业技术人员可以对每个特定的应用来使用不同方法来实现所描述的网元,但是这种实现不
应认为超出本申请的范围。