CN115292020B - 一种数据处理方法、装置、设备以及介质 - Google Patents

一种数据处理方法、装置、设备以及介质 Download PDF

Info

Publication number
CN115292020B
CN115292020B CN202211171432.XA CN202211171432A CN115292020B CN 115292020 B CN115292020 B CN 115292020B CN 202211171432 A CN202211171432 A CN 202211171432A CN 115292020 B CN115292020 B CN 115292020B
Authority
CN
China
Prior art keywords
resource
rendered
global
driver
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202211171432.XA
Other languages
English (en)
Other versions
CN115292020A (zh
Inventor
袁志强
赵新达
杨衍东
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202211171432.XA priority Critical patent/CN115292020B/zh
Publication of CN115292020A publication Critical patent/CN115292020A/zh
Application granted granted Critical
Publication of CN115292020B publication Critical patent/CN115292020B/zh
Priority to PCT/CN2023/114656 priority patent/WO2024066828A1/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/50Information retrieval; Database structures therefor; File system structures therefor of still image data
    • G06F16/51Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Abstract

本申请实施例提供了一种数据处理方法、装置、设备以及介质,该方法包括:在第一云应用客户端获取到云应用的待渲染资源数据时,确定待渲染资源数据的哈希值;基于待渲染资源数据的哈希值查找云应用对应的全局哈希表,得到哈希查找结果;若哈希查找结果指示在全局哈希表中查找到与待渲染资源数据的哈希值相同的全局哈希值,则获取全局哈希值所映射的全局资源地址标识;基于全局资源地址标识获取全局共享资源,将全局共享资源映射到云应用对应的渲染进程,得到第一云应用客户端在运行云应用时的渲染图像;全局共享资源为云服务器首次加载待渲染资源数据输出渲染图像时的已渲染资源。采用本申请,可以避免资源数据的重复加载,实现资源共享。

Description

一种数据处理方法、装置、设备以及介质
技术领域
本申请涉及云应用技术领域,尤其涉及一种数据处理方法、装置、设备以及介质。
背景技术
目前,在云应用场景下,每个用户均可以与云服务器建立连接,以在各自的用户终端上操作并运行某个云应用(例如,云游戏X)。然而,在每个用户终端与云服务器建立连接,且在该云服务器中运行该云游戏X时,该云服务器需要单独为这些用户终端中的每个用户终端配置相应的显存存储空间,以存储相应的渲染资源。
为便于理解,这里以上述用户包含游戏用户A1和游戏用户A2为例,当游戏用户A1所使用的用户终端(例如,用户终端B1)和游戏用户A2所使用的用户终端(例如,用户终端B2)与云服务器建立连接时,该云服务器在运行上述云游戏X时,需要在该云服务器中单独为用户终端B1配置一个显存存储空间,还需要为单独为用户终端B2配置另一个显存存储空间。这意味着对于并发运行同一云游戏的多个用户终端而言,需要无差别的为每个用户终端分别分配一个显存存储空间,以进行游戏资源的加载,显然,当并发运行同一云游戏的用户终端的终端数量较大时,存在资源数据重复加载的可能,这意味着该云服务器在需要重复加载并编译这些资源数据的情况下,会造成该云服务器中有限的资源(比如,显存资源)的浪费。综上,发明人发现在云应用场景下,如何在云服务器中避免资源数据的重复加载是一个亟待解决的技术问题。
发明内容
本申请实施例提供一种数据处理方法、装置、设备以及介质,可以通过资源共享的方式避免资源数据的重复加载,还可以提升渲染图像的输出效率。
本申请实施例一方面提供了一种数据处理方法,方法由云服务器执行,云服务器包含并发运行的多个云应用客户端,多个云应用客户端包括第一云应用客户端;方法包括:
在第一云应用客户端获取到云应用的待渲染资源数据时,确定待渲染资源数据的哈希值;
基于待渲染资源数据的哈希值查找云应用对应的全局哈希表,得到哈希查找结果;
若哈希查找结果指示在全局哈希表中查找到与待渲染资源数据的哈希值相同的全局哈希值,则获取全局哈希值所映射的全局资源地址标识;
基于全局资源地址标识获取全局共享资源,将全局共享资源映射到云应用对应的渲染进程,得到第一云应用客户端在运行云应用时的渲染图像;全局共享资源为云服务器首次加载待渲染资源数据输出渲染图像时的已渲染资源。
其中,云服务器包含图形处理驱动组件;
在第一云应用客户端获取到云应用的待渲染资源数据时,确定待渲染资源数据的哈希值,包括:
在第一云应用客户端运行云应用时,获取云应用的待渲染资源数据;
在第一云应用客户端请求加载待渲染资源数据时,通过图形处理驱动组件将待渲染资源数据从云服务器的磁盘传输至云服务器的内存存储空间;
调用图形处理驱动组件确定内存存储空间中的待渲染资源数据的哈希值。
其中,云服务器包含图形处理驱动组件,图形处理驱动组件包含位于用户层的驱动程序和位于内核层的驱动程序;待渲染资源数据的哈希值是由第一云应用客户端调用图形处理驱动组件所得到的;用户层的驱动程序用于对存储在云服务器的内存存储空间中的待渲染资源数据进行哈希计算;
基于待渲染资源数据的哈希值查找云应用对应的全局哈希表,得到哈希查找结果,包括:
在用户层的驱动程序将待渲染资源数据的哈希值下发至内核层时,通过位于内核层的驱动程序调用驱动接口,在云应用对应的全局哈希表中,对与待渲染资源数据的哈希值相同的全局哈希值进行查找;
若在全局哈希表中查找到与待渲染资源数据的哈希值相同的全局哈希值,则将查找到的与待渲染资源数据的哈希值相同的全局哈希值作为查找成功结果;
若在全局哈希表中未查找到与待渲染资源数据的哈希值相同的全局哈希值,则将未查找到的与待渲染资源数据的哈希值相同的全局哈希值作为查找失败结果;
将查找成功结果或者查找失败结果,确定为哈希查找结果。
其中,若哈希查找结果指示在全局哈希表中查找到与待渲染资源数据的哈希值相同的全局哈希值,则获取全局哈希值所映射的全局资源地址标识,包括:
若哈希查找结果指示在全局哈希表中查找到与待渲染资源数据的哈希值相同的全局哈希值,则确定哈希查找结果为查找成功结果;
基于查找成功结果确定待渲染资源数据对应的渲染资源已被云服务器中的目标云应用客户端加载;目标云应用客户端为并发运行的多个云应用客户端中的云应用客户端;
在目标云应用客户端已加载待渲染资源数据对应的渲染资源的情况下,获取全局哈希值所映射的全局资源地址标识。
其中,在目标云应用客户端已加载待渲染资源数据对应的渲染资源的情况下,获取全局哈希值所映射的全局资源地址标识,包括:
在目标云应用客户端已加载待渲染资源数据对应的渲染资源的情况下,通过内核层的驱动程序确定存在与待渲染资源数据相关联的全局资源地址标识,且通过内核层的驱动程序在云应用对应的全局资源地址标识列表中获取与待渲染资源数据相关联的全局哈希值所映射的全局资源地址标识;
将全局资源地址标识返回给用户层的驱动程序,以使用户层的驱动程序通知第一云应用客户端执行基于全局资源地址标识获取全局共享资源的步骤。
其中,方法还包括:
若哈希查找结果指示在全局哈希表中未查找到与待渲染资源数据的哈希值相同的全局哈希值,则确定哈希查找结果为查找失败结果,基于查找失败结果确定待渲染资源数据对应的渲染资源尚未被多个云应用客户端中任意一个云应用客户端加载;
通过内核层的驱动程序确定不存在与待渲染资源数据相关联的全局资源地址标识,且将待渲染资源数据的哈希值所映射的资源地址标识配置为空值,将空值所对应的资源地址标识返回给用户层的驱动程序,以使用户层的驱动程序通知第一云应用客户端对待渲染资源数据进行加载。
其中,在第一云应用客户端对待渲染资源数据进行加载时,方法还包括:
在检查到待渲染资源数据的数据格式为第一数据格式时,将待渲染资源数据的数据格式由第一数据格式转换为第二数据格式,将具备第二数据格式的待渲染资源数据确定为转换资源数据,通过云服务器中的传输控制组件将转换资源数据由内存存储空间传输至云服务器为待渲染资源数据预分配的显存存储空间。
其中,在第一云应用客户端请求加载待渲染资源数据之前,方法还包括:
在图形处理驱动组件接收到第一云应用客户端发送的显存配置指令时,基于显存配置指令为待渲染资源数据配置目标显存存储空间。
其中,图形处理驱动组件包括位于用户层的驱动程序和位于内核层的驱动程序;
基于显存配置指令为待渲染资源数据配置目标显存存储空间,包括:
位于用户层的驱动程序基于显存配置指令确定第一图形接口,通过第一图形接口创建待渲染资源数据在用户层的第一用户态对象,且在用户层生成用于向位于内核层的驱动程序发送的用户态分配命令;
在位于内核层的驱动程序接收到位于用户层的驱动程序下发的用户态分配命令时,基于用户态分配命令创建待渲染资源数据在内核层的第一资源对象,且为第一资源对象配置目标显存存储空间。
其中,位于用户层的驱动程序包括第一用户态驱动程序和第二用户态驱动程序;
位于用户层的驱动程序基于显存配置指令确定第一图形接口,通过第一图形接口创建待渲染资源数据在用户层的第一用户态对象,且在用户层生成用于向位于内核层的驱动程序发送的用户态分配命令,包括:
在位于用户层的驱动程序中,通过第一用户态驱动程序对显存配置指令进行解析,得到显存配置指令中携带的第一图形接口;
通过第一图形接口创建待渲染资源数据在用户层的第一用户态对象,且通过第一图形接口生成用于向第二用户态驱动程序发送的接口分配指令;
在第二用户态驱动程序接收到接口分配指令时,响应接口分配指令进行接口分配,以得到用于指向内核层的驱动程序的分配接口;
在用户层生成用于向位于内核层的驱动程序发送的用户态分配命令时,通过分配接口向位于内核层的驱动程序发送用户态分配命令。
其中,位于内核层的驱动程序包括第一内核态驱动程序和第二内核态驱动程序;用户态分配命令是由位于用户层的驱动程序中的第二用户态驱动程序所发送的;
在位于内核层的驱动程序接收到位于用户层的驱动程序下发的用户态分配命令时,基于用户态分配命令创建待渲染资源数据在内核层的第一资源对象,且为第一资源对象配置目标显存存储空间,包括:
在位于内核层的驱动程序中,当第一内核态驱动程序接收到位于第二用户态驱动程序下发的用户态分配命令时,基于用户态分配命令添加与第二用户态驱动程序相关的第一输入输出操作类型;
基于第一输入输出操作类型生成用于派发给第二内核态驱动程序的分配驱动接口调用指令;
在第二内核态驱动程序接收到第一内核态驱动程序派发的分配驱动接口调用指令时,通过分配驱动接口调用指令在第二内核态驱动程序中确定驱动接口;
调用驱动接口,创建待渲染资源数据在内核层的第一资源对象,且为第一资源对象配置目标显存存储空间。
其中,方法还包括:
在调用驱动接口,创建待渲染资源数据在内核层的第一资源对象时,将第一资源对象的资源计数值配置为第一数值。
其中,云服务器包含图形处理驱动组件;图形处理驱动组件用于在通过第二图形接口加载待渲染资源数据之前,通过第一图形接口创建待渲染资源数据在用户层的第一用户态对象,图形处理驱动组件还用于在内核层创建与第一用户态对象绑定的第一资源对象;
基于全局资源地址标识获取全局共享资源,包括:
图形处理驱动组件基于全局资源地址标识在用户层创建第二用户态对象,并在内核层创建与第二用户态对象绑定的第二资源对象;
在图形处理驱动组件基于全局资源地址标识获取到第一资源对象时,用第二资源对象替换第一资源对象;
通过图形处理驱动组件在内核层中为第二资源对象配置用于映射全局共享资源的物理地址的虚拟地址空间,通过虚拟地址空间所映射的物理地址获取全局共享资源。
其中,方法还包括:
在基于全局资源地址标识获取全局共享资源时,通过图形处理驱动组件将与全局资源地址标识相关联的全局共享资源的资源计数值进行递增处理;
通过图形处理驱动组件释放在用户层创建的第一用户态对象、在内核层创建的第一资源对象、以及为第一资源对象配置的目标显存存储空间。
本申请实施例一方面提供了一种数据处理装置,装置运行在云服务器中,云服务器包含并发运行的多个云应用客户端,多个云应用客户端包括第一云应用客户端;装置包括:
哈希确定模块,用于在第一云应用客户端获取到云应用的待渲染资源数据时,确定待渲染资源数据的哈希值;
哈希查找模块,用于基于待渲染资源数据的哈希值查找云应用对应的全局哈希表,得到哈希查找结果;
地址标识获取模块,用于若哈希查找结果指示在全局哈希表中查找到与待渲染资源数据的哈希值相同的全局哈希值,则获取全局哈希值所映射的全局资源地址标识;
共享资源获取模块,用于基于全局资源地址标识获取全局共享资源,将全局共享资源映射到云应用对应的渲染进程,得到第一云应用客户端在运行云应用时的渲染图像;全局共享资源为云服务器首次加载待渲染资源数据输出渲染图像时的已渲染资源。
其中,云服务器包含图形处理驱动组件;
哈希确定模块包括:
资源数据获取单元,用于在第一云应用客户端运行云应用时,获取云应用的待渲染资源数据;
资源数据传输单元,用于在第一云应用客户端请求加载待渲染资源数据时,通过图形处理驱动组件将待渲染资源数据从云服务器的磁盘传输至云服务器的内存存储空间;
哈希值确定单元,用于调用图形处理驱动组件确定内存存储空间中的待渲染资源数据的哈希值。
其中,云服务器包含图形处理驱动组件,图形处理驱动组件包含位于用户层的驱动程序和位于内核层的驱动程序;待渲染资源数据的哈希值是由第一云应用客户端调用图形处理驱动组件所得到的;用户层的驱动程序用于对存储在云服务器的内存存储空间中的待渲染资源数据进行哈希计算;
哈希查找模块包括:
全局哈希查找单元,用于在用户层的驱动程序将待渲染资源数据的哈希值下发至内核层时,通过位于内核层的驱动程序调用驱动接口,在云应用对应的全局哈希表中,对与待渲染资源数据的哈希值相同的全局哈希值进行查找;
查找成功单元,用于若在全局哈希表中查找到与待渲染资源数据的哈希值相同的全局哈希值,则将查找到的与待渲染资源数据的哈希值相同的全局哈希值作为查找成功结果;
查找失败单元,用于若在全局哈希表中未查找到与待渲染资源数据的哈希值相同的全局哈希值,则将未查找到的与待渲染资源数据的哈希值相同的全局哈希值作为查找失败结果;
查找结果确定单元,用于将查找成功结果或者查找失败结果,确定为哈希查找结果。
其中,地址标识获取模块包括:
哈希查找成功单元,用于若哈希查找结果指示在全局哈希表中查找到与待渲染资源数据的哈希值相同的全局哈希值,则确定哈希查找结果为查找成功结果;
资源加载确定单元,基于查找成功结果确定待渲染资源数据对应的渲染资源已被云服务器中的目标云应用客户端加载;目标云应用客户端为并发运行的多个云应用客户端中的云应用客户端;
地址标识获取单元,用于在目标云应用客户端已加载待渲染资源数据对应的渲染资源的情况下,获取全局哈希值所映射的全局资源地址标识。
其中,地址标识获取单元包括:
地址标识确定子单元,用于在目标云应用客户端已加载待渲染资源数据对应的渲染资源的情况下,通过内核层的驱动程序确定存在与待渲染资源数据相关联的全局资源地址标识,且通过内核层的驱动程序在云应用对应的全局资源地址标识列表中获取与待渲染资源数据相关联的全局哈希值所映射的全局资源地址标识;
地址标识返回子单元,用于将全局资源地址标识返回给用户层的驱动程序,以使用户层的驱动程序通知第一云应用客户端执行基于全局资源地址标识获取全局共享资源的步骤。
其中,哈希查找模块还包括:
查找失败单元,用于若哈希查找结果指示在全局哈希表中未查找到与待渲染资源数据的哈希值相同的全局哈希值,则确定哈希查找结果为查找失败结果,基于查找失败结果确定待渲染资源数据对应的渲染资源尚未被多个云应用客户端中任意一个云应用客户端加载;
地址标识配置单元,用于通过内核层的驱动程序确定不存在与待渲染资源数据相关联的全局资源地址标识,且将待渲染资源数据的哈希值所映射的资源地址标识配置为空值,将空值所对应的资源地址标识返回给用户层的驱动程序,以使用户层的驱动程序通知第一云应用客户端对待渲染资源数据进行加载。
其中,在第一云应用客户端对待渲染资源数据进行加载时,哈希查找模块还包括:
格式转换单元,用于在检查到待渲染资源数据的数据格式为第一数据格式时,将待渲染资源数据的数据格式由第一数据格式转换为第二数据格式,将具备第二数据格式的待渲染资源数据确定为转换资源数据,通过云服务器中的传输控制组件将转换资源数据由内存存储空间传输至云服务器为待渲染资源数据预分配的显存存储空间。
其中,在第一云应用客户端请求加载待渲染资源数据之前,装置还包括:
目标显存配置模块,用于在图形处理驱动组件接收到第一云应用客户端发送的显存配置指令时,基于显存配置指令为待渲染资源数据配置目标显存存储空间。
其中,图形处理驱动组件包括位于用户层的驱动程序和位于内核层的驱动程序;
目标显存配置模块包括:
分配命令生成单元,用于位于用户层的驱动程序基于显存配置指令确定第一图形接口,通过第一图形接口创建待渲染资源数据在用户层的第一用户态对象,且在用户层生成用于向位于内核层的驱动程序发送的用户态分配命令;
分配命令接受单元,用于在位于内核层的驱动程序接收到位于用户层的驱动程序下发的用户态分配命令时,基于用户态分配命令创建待渲染资源数据在内核层的第一资源对象,且为第一资源对象配置目标显存存储空间。
其中,位于用户层的驱动程序包括第一用户态驱动程序和第二用户态驱动程序;
分配命令生成单元包括:
图形接口确定子单元,用于在位于用户层的驱动程序中,通过第一用户态驱动程序对显存配置指令进行解析,得到显存配置指令中携带的第一图形接口;
用户对象创建子单元,用于通过第一图形接口创建待渲染资源数据在用户层的第一用户态对象,且通过第一图形接口生成用于向第二用户态驱动程序发送的接口分配指令;
接口分配子单元,用于在第二用户态驱动程序接收到接口分配指令时,响应接口分配指令进行接口分配,以得到用于指向内核层的驱动程序的分配接口;
分配命令生成子单元,用于在用户层生成用于向位于内核层的驱动程序发送的用户态分配命令时,通过分配接口向位于内核层的驱动程序发送用户态分配命令。
其中,位于内核层的驱动程序包括第一内核态驱动程序和第二内核态驱动程序;用户态分配命令是由位于用户层的驱动程序中的第二用户态驱动程序所发送的;
分配命令接受单元包括:
分配命令接收子单元,用于在位于内核层的驱动程序中,当第一内核态驱动程序接收到位于第二用户态驱动程序下发的用户态分配命令时,基于用户态分配命令添加与第二用户态驱动程序相关的第一输入输出操作类型;
调用指令生成子单元,用于基于第一输入输出操作类型生成用于派发给第二内核态驱动程序的分配驱动接口调用指令;
驱动接口确定子单元,用于在第二内核态驱动程序接收到第一内核态驱动程序派发的分配驱动接口调用指令时,通过分配驱动接口调用指令在第二内核态驱动程序中确定驱动接口;
显存配置子单元,用于调用驱动接口,创建待渲染资源数据在内核层的第一资源对象,且为第一资源对象配置目标显存存储空间。
其中,分配命令接受单元还包括:
计数值配置子单元,用于在调用驱动接口,创建待渲染资源数据在内核层的第一资源对象时,将第一资源对象的资源计数值配置为第一数值。
其中,云服务器包含图形处理驱动组件;图形处理驱动组件用于在通过第二图形接口加载待渲染资源数据之前,通过第一图形接口创建待渲染资源数据在用户层的第一用户态对象,图形处理驱动组件还用于在内核层创建与第一用户态对象绑定的第一资源对象;
共享资源获取模块包括:
对象资源绑定单元,用于图形处理驱动组件基于全局资源地址标识在用户层创建第二用户态对象,并在内核层创建与第二用户态对象绑定的第二资源对象;
资源对象替换单元,用于在图形处理驱动组件基于全局资源地址标识获取到第一资源对象时,用第二资源对象替换第一资源对象;
全局资源获取单元,用于通过图形处理驱动组件在内核层中为第二资源对象配置用于映射全局共享资源的物理地址的虚拟地址空间,通过虚拟地址空间所映射的物理地址获取全局共享资源。
其中,共享资源获取模块还包括:
计数值递增单元,用于在基于全局资源地址标识获取全局共享资源时,通过图形处理驱动组件将与全局资源地址标识相关联的全局共享资源的资源计数值进行递增处理;
资源释放单元,用于通过图形处理驱动组件释放在用户层创建的第一用户态对象、在内核层创建的第一资源对象、以及为第一资源对象配置的目标显存存储空间。
本申请实施例一方面提供了一种计算机设备,包括存储器和处理器,存储器与处理器相连,存储器用于存储计算机程序,处理器用于调用计算机程序,以使得该计算机设备执行本申请实施例中上述一方面提供的方法。
本申请实施例一方面提供了一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,计算机程序适于由处理器加载并执行,以使得具有处理器的计算机设备执行本申请实施例中上述一方面提供的方法。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述一方面提供的方法。
本申请实施例中的云服务器可以包含并发运行的多个云应用客户端,这里的多个云应用客户端具体可以包括第一云应用客户端;可以理解的是,该云服务器可以在第一云应用客户端获取到云应用的待渲染资源数据时,确定待渲染资源数据的哈希值;进一步的,云服务器可以基于待渲染资源数据的哈希值查找云应用对应的全局哈希表,得到哈希查找结果;进一步的,若哈希查找结果指示在全局哈希表中查找到与待渲染资源数据的哈希值相同的全局哈希值,则该云服务器可以获取全局哈希值所映射的全局资源地址标识;应当理解,在本申请实施例中,该云服务器还可以进一步基于全局资源地址标识获取全局共享资源,并可以将全局共享资源映射到云应用对应的渲染进程,以得到第一云应用客户端在运行云应用时的渲染图像;其中,可以理解的是,全局共享资源为云服务器首次加载待渲染资源数据输出渲染图像时的已渲染资源。由此可见,在本申请实施例中,当在云服务器中运行的某个云应用客户端(例如,前述第一云应用客户端)需要加载该云应用的某种资源数据(即前述待渲染资源数据,比如,该待渲染资源数据可以为待渲染纹理资源的资源数据)时,可以通过该待渲染资源数据(即待渲染纹理资源的资源数据)的哈希值,查找全局哈希表,以判断该哈希值所映射的全局资源地址标识是否存在,如果存在,则可以进一步利用该全局资源地址标识,快速为该第一云应用客户端获取由该云服务器共享的已渲染资源(即全局共享资源),从而可以在该云服务器中通过资源共享的方式避免资源数据的重复加载。此外,可以理解的是,该云服务器还可以进一步将获取到的渲染资源映射到该云应用对应的渲染进程,进而可以在无需单独加载且编译待渲染资源数据的情况下,快速且稳定地生成该第一云应用客户端中所运行的云应用的渲染图像。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种云应用的处理系统的架构图;
图2是本申请实施例提供的一种云应用的数据交互场景示意图;
图3是本申请实施例提供的一种数据处理方法的流程示意图;
图4是本申请实施例提供的一种在云服务器中并发运行多个云应用客户端的场景示意图;
图5是本申请实施例提供的一种部署在云服务器中的GPU驱动的内部架构图;
图6是本申请实施例提供的一种在显卡软件设备中所存储的全局业务数据表之间的查找关系示意图;
图7是本申请实施例提供的另一种数据处理方法;
图8是本申请实施例提供的一种分配显存存储空间的流程示意图;
图9是本申请实施例提供的一种用于描述GPU驱动中的各个驱动程序之间的调用关系的调用时序图;
图10是本申请实施例提供的加载待渲染资源数据输出渲染图像的场景示意图;
图11是本申请实施例提供的一种数据处理装置的结构示意图;
图12是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例涉及云计算(cloud computing)和云应用。其中,云计算是一种计算模式,它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。作为云计算的基础能力提供商,会建立云计算资源池(简称云平台,一般称为IaaS(Infrastructure as aService,基础设施即服务)平台,在资源池中部署多种类型的虚拟资源,供外部客户选择使用。云计算资源池中主要包括:计算设备(为虚拟化机器,包含操作系统)、存储设备、网络设备。
云应用作为云计算的子集,是云计算技术在应用层的体现,云应用的工作原理是把传统软件本地安装、本地运算的使用方式变为即取即用的服务,通过互联网或局域网连接并操控远程服务器集群,完成业务逻辑或运算任务的一种新型应用。云应用的优点是云应用的应用程序(如云应用客户端)运行在服务器端(即云服务器)中,服务器端(即云服务器)执行云应用的计算工作,比如数据渲染,然后将云应用的计算结果传输给终端设备中的用户客户端进行显示,用户客户端可以采集用户的操作信息(也可以称为云应用的对象操作数据,或者可以称为云应用的输入事件数据),将这些操作信息传输给服务器端(即云服务器)中的云应用客户端,以实现服务器端(即云服务器)对云应用的操控。
其中,本申请实施例中所涉及的云应用客户端均为运行在服务器端(即云服务器)的云应用实例,而用户客户端可以是指支持安装在终端设备中,且能够为用户提供对应的云应用体验服务的客户端,简单来说,用户客户端可以用于输出对应云应用客户端的云应用展示页面,也可以称为云应用用户客户端,后面不再对此进行解释;云应用可以包括云游戏、云教育、云会议、云呼叫以及云社交等等,其中,云游戏作为云应用中的典型,近年来受到越来越多的关注。
云游戏(Cloud gaming)又可以称为游戏点播(gaming on demand),是一种以云计算技术为基础的在线游戏技术。云游戏技术使图形处理与数据运算能力相对有限的轻端设备(thin client)能运行高品质游戏。在云游戏业务场景下,游戏本身并不在用户所使用的游戏终端,游戏终端中仅运行用户客户端,真正的游戏应用程序(如云游戏客户端)是在服务器端(即云服务器)中运行,并由服务器端(即云服务器)将云游戏中的游戏场景渲染为音视频码流,并将渲染完成的音视频码流传输给游戏终端中的用户客户端,由用户客户端对接收到的音视频码流进行显示。游戏终端无需拥有强大的图形运算与数据处理能力,仅需拥有基本的流媒体播放能力与获取用户输入事件数据并发送给云游戏客户端的能力即可。用户在体验云游戏时,其本质是在对云游戏的音视频码流进行操作,如通过触屏、键盘鼠标、摇杆等生成输入事件数据(或者称为对象操作数据,或者可以称为用户操作指令),然后通过网络传输到服务器端(即云服务器)中的云游戏客户端,以达到操作云游戏的目的。
其中,本申请所涉及的游戏终端可以是指玩家在体验云游戏时所使用的终端设备,即安装了与云游戏客户端相对应的用户客户端的终端设备,此处的玩家可以是指正在体验云游戏或者请求体验云游戏的用户;音视频码流可以包括云游戏客户端所生成的音频流和视频流,该音频流可以包括云游戏客户端在运行过程中所产生的持续的音频数据,视频流可以包括云游戏在运行过程中渲染完成的图像数据(比如游戏画面)。应当理解,在本申请实施例中,可以将渲染完成的图像数据(比如游戏画面)统称为渲染图像,如视频流可以认为是由云服务器渲染完成的一系列图像数据(比如游戏画面)所构成的视频序列,那么此时的渲染图像也可以认为是视频流中的视频帧。
在云应用(例如,云游戏)的运行过程中,涉及服务器端(即云服务器)中的云应用客户端与终端设备(例如,游戏终端)之间的通信连接(具体可以为云应用客户端与终端设备中的用户客户端之间的通信连接),云应用客户端与终端设备之间成功建立通信连接之后,在云应用客户端和终端设备之间可以传输云应用中的云应用数据流,如云应用数据流可以包括视频流(包括云应用客户端在运行云游戏的过程中所产生的一系列图像数据)和音频流(包括云应用客户端在运行云游戏过程中产生的音频数据,为便于理解,此处的音频数据和前述图像数据可以统称为音视频数据),那么可以由该云应用客户端将视频流、音频流传输至终端设备;又比如云应用数据流可以包括终端设备所获取到的针对该云应用的对象操作数据,那么可以由该终端设备将对象操作数据传输至服务器端(即云服务器)运行的云应用客户端。
下面对本申请实施例涉及的基础概念进行解释说明:
云应用实例:在服务器端(即云服务器),包含完整云应用功能的一组软件集合可以称为一个云应用实例;例如,包含完整云应用功能的一组软件集合可以称为一个云应用实例。
显存存储空间:是在服务器端(即云服务器)的显存中,通过GPU(GraphicsProcessing Unit,图形处理器)驱动为暂存某种资源数据所对应的渲染资源而分配的区域。在本申请实施例中,可以将GPU驱动统称为图形处理驱动组件,该图形处理驱动组件可以包含用于提供数据处理服务的CPU( Central Processing Unit,中央处理器)硬件(简称为CPU),还可以包含用于提供资源渲染服务的GPU硬件(简称为GPU),此外,该图形处理驱动组件还包括位于用户层的驱动程序和位于内核层的驱动程序。
其中,可以理解的是,本申请实施例所涉及的资源数据可以包含但不限于纹理数据、顶点数据、着色数据。相应的,这里的资源数据所对应的渲染资源可以包含但不限于纹理数据对应的纹理资源、顶点数据对应的顶点资源以及着色数据对应的着色资源。此外,应当理解,本申请实施例可以将云服务器中某路云游戏客户端请求加载的资源数据统称为待渲染资源数据。应当理解,当GPU驱动不支持该云游戏客户端请求加载的资源数据的数据格式(即不支持待渲染资源数据的数据格式)时,需要预先通过该GPU驱动对该待渲染资源数据的数据格式进行转换,进而可以将格式转换后的待渲染资源数据统称为转换资源数据。
其中,位于用户层的驱动程序和位于内核层的驱动程序具有调用CPU进行哈希查找、通过全局哈希值获取全局资源地址标识,以及通过全局资源地址标识获取全局共享资源等功能。比如,运行在服务器端(即云服务器)的云应用客户端可以调用图形处理驱动组件(即GPU驱动)提供的相应图形接口加载待渲染资源数据,并可以在加载待渲染资源数据的过程中通过哈希查找的方式实现已渲染资源的资源共享。其中,可以理解的是,这里的全局资源地址标识可以用于唯一标识在全局哈希表中所查找的全局哈希值所对应的全局共享资源。基于此,本申请实施例可以将该全局资源地址标识统称为资源ID(IdentityDocument)。
其中,应当理解,本申请实施例可以将当前处于资源共享状态的已渲染资源统称为全局共享资源,即这里的全局共享资源为云服务器中的某路云游戏客户端通过该GPU驱动首次加载待渲染资源数据输出渲染图像时的已渲染资源。应当理解,该全局共享资源所对应的存储区域即为在首次请求加载待渲染资源数据之前,在显存中所预分配的显存存储空间。该渲染图像(即渲染完成后的图像数据)所存放的区域即为显存中的帧缓冲区,该帧缓存区可以用来暂时存储云应用客户端渲染完成的图像数据。其中,可以理解的是,本申请实施例可以在云服务器中并发运行多个云应用客户端的情况下,将首次加载待渲染资源数据的云应用客户端统称为目标云应用客户端,即该目标云应用客户端可以为并发运行的多个云应用客户端中的某一个云应用客户端。
DRM(Direct Rendering Manager,直接渲染管理器),DRM 是Linux系统下的图形渲染框架,具体的说是显卡驱动框架,也可以叫做DRM框架,该DRM框架可以用于负责驱动显卡,以把显存中暂存的内容以适当的格式传递给显示器加以显示。应当理解,本申请实施例所涉及的云服务器的显卡不仅可以包含图形存储和传递的功能,还包含利用GPU驱动进行资源处理、显存分配以及渲染得到2D/3D图形的功能。
其中,需要注意的是,在DRM框架下,本申请所涉及的GPU驱动主要包含以下四个模块,这四个模块具体为GPU用户态驱动, DRM用户态驱动, DRM内核态驱动以及GPU内核态驱动。其中,GPU用户态驱动和DRM用户态驱动为上述位于用户层的驱动程序,且DRM内核态驱动以及GPU内核态驱动则为上述位于内核层的驱动程序。
其中,1)GPU用户态驱动主要用于对云服务器所调用的相应图像接口进行实现,渲染状态机以及数据的管理;
2)DRM用户态驱动:主要用于对前述图形接口所要调用的内核操作进行接口封装;
3)DRM内核态驱动:主要用于响应用户层的调用(比如,可以响应位于用户层的DRM用户态驱动的调用),进而可以将调用派发给对应的驱动设备(比如,GPU内核态驱动);
4)GPU内核态驱动:主要用于响应用户层的驱动,以进行显存分配(比如,可以分配显存存储空间),渲染任务管理和驱动硬件运行等。
进一步的,请参见图1,图1是本申请实施例提供的一种云应用的处理系统的架构图。如图1所示,该云应用的处理系统可以包括终端设备1000a、终端设备1000b、终端设备1000c、…、终端设备1000n以及云服务器2000等;图1所示的云应用的处理系统中的终端设备和云服务器的数量仅为举例说明,在实际应用场景中,可以根据需求来确定云应用的处理系统中的终端设备和云服务器的具体数量,如终端设备和云服务器的数量可以为一个或多个,本申请不对终端设备和云服务器的数量进行限定。
其中,云服务器2000可以运行云应用的应用程序(即云应用客户端),该云服务器2000可以是独立的服务器,或者是多个服务器构成的服务器集群或者分布式系统,或者为提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的服务器,本申请不对云服务器2000的类型进行限定。
可以理解的是,在图1所示的终端设备1000a、终端设备1000b、终端设备1000c、…、终端设备1000n中,均可以包括与云服务器2000中的云应用客户端相关联的用户客户端。如图1所示,终端设备1000a、终端设备1000b、终端设备1000c、…、终端设备1000n具体可以包括:智能手机(如Android手机、iOS手机等)、台式电脑、平板电脑、便携式个人计算机、移动互联网设备(Mobile Internet Devices,MID)以及可穿戴设备(例如智能手表、智能手环等)、车载设备等电子设备,本申请实施例不对云应用的处理系统中的终端设备的类型进行限定。
如图1所示,云服务器2000中可以运行一个或多个云应用客户端(此处的一个云应用客户端可以认为是一个云应用实例),一个云应用客户端对应一个用户,即一个云应用客户端可以对应一个终端设备;云服务器2000中所运行的一个或多个云应用客户端可以为同一个云应用,也可以为不同的云应用。例如,用户A和用户B在相同的时间体验云应用1时,此时可以在云服务器2000中为用户A和用户B都创建一个云应用1实例;用户A和用户B在相同的时间体验不同的云应用(例如,用户A体验云应用1,用户B体验云应用2)时,此时可以在云服务器2000中为用户A创建一个云应用1实例,为用户B创建一个云应用2实例。
其中,终端设备1000a、终端设备1000b、终端设备1000c、…、终端设备1000n均可以是玩家所使用的电子设备,此处的玩家可以是指正在体验过云应用或者请求体验云应用的用户,一个终端设备中可以集成一个或多个用户客户端,每一个用户客户端都可以与云服务器2000中对应的云应用客户端建立通信连接,用户客户端与其对应的云应用客户端之间可以通过该通信连接进行数据交互。如终端设备1000a中的用户客户端可以基于该通信连接接收云应用客户端发送的音视频码流,以解码得到相应云应用的音视频数据(例如,可以得到云应用客户端运行云应用时的图像数据和音频数据),并输出接收到的音视频数据;相应地,终端设备1000a也可以将获取到的对象操作数据封装为输入事件数据流,以发送给对应的云应用客户端,以使云服务器端的云应用客户端可以在解封得到对象操作数据时,将其注入云应用客户端所运行的云应用,以执行相应的业务逻辑。
应当理解,在云应用场景下,云应用客户端均是运行在云服务器端的,为了提高单个云服务器中所并发运行的云应用实例的数量,本申请实施例提出可以通过资源共享的方式避免资源数据的重复加载,从而可以减少云服务器中的显存开销。
应当理解,这里的一个云应用实例可以认为是一个云应用客户端,一个云应用客户端对应一个用户。在本申请实施例中,图1所示的云应用的处理系统可以应用在单个云服务器的云应用并发运行场景(可以理解为单个云服务器中同时运行多个云应用实例)中,这意味着在云应用场景下,本申请实施例所涉及的在云服务器2000中并发运行的多个云应用客户端,可以运行在该云服务器2000所提供的虚拟机、容器,或其它类型的虚拟化环境中,也可以运行在该服务器所提供的非虚拟化环境中(如直接在服务器端的真实操作系统上运行),本申请对此不做限定。其中,云服务器2000中运行的多个云应用客户端可以共享使用该云服务器2000中的GPU驱动,比如,针对同一云应用而言,并发运行的每个云应用客户端均可以调用该GPU驱动,以通过哈希查收的方式,快速确定得到同一全局资源地址标识(比如,资源ID1),进而可以通过同一全局资源地址标识(比如,资源ID1)获取到处于资源共享状态的全局共享资源,以实现资源共享。
为便于理解,下面以云应用为云游戏为例,对云应用的处理系统中的云服务器与终端设备之间的数据交互过程进行描述。进一步的,请参见图2,图2是本申请实施例提供的一种云应用的数据交互场景示意图。如图2所示的云服务器2a可以为上述图1所示的云服务器2000,在该云服务器2a中,可以并发运行多个云应用客户端,这里的多个云应用客户端具体可以包含图2所示的云应用客户端21a和云应用客户端22a。
在多个云应用客户端并发运行的云应用为云游戏时,这里的云应用客户端21a可以为云服务器2a根据图2所示的用户客户端21b所处的客户端环境系统(例如,安卓系统),在云应用环境24a中所虚拟出的云游戏客户端。如图2所示,与该云应用客户端21a通过通信连接进行数据交互的用户客户端为图2所示的用户客户端21b。同理,云应用客户端22a可以为云服务器2a根据图2所示的用户客户端22b所处的客户端环境系统(例如,安卓系统)在云应用环境24a中虚拟出的另一个云游戏客户端。同理,如图2所示,与该云应用客户端22a通过通信连接进行数据交互的用户客户端为图2所示的用户客户端22b。
其中,应当理解,如图2所示的云应用环境24a可以是云服务器2a所提供的能够并发运行多个云应用客户端的虚拟机,容器,或其它类型的虚拟化环境,可选地,图2所示的云应用环境24a还可以是该云服务器2a所提供的非虚拟化环境中(如云服务器2a的真实操作系统),本申请对此不做限定。
如图2所示的终端设备2b可以为用户A所使用的电子设备,该终端设备2b可以集成一个或多个与不同类型云游戏相关联的用户客户端,此处的用户客户端可以理解为安装在终端设备上的,且能够为用户提供对应的云游戏体验服务的客户端。例如,终端设备2b中的用户客户端21b是与云游戏1相关联的客户端,那么该用户客户端21b在终端设备2b中的图标可以为云游戏1的图标,该用户客户端21b可以为用户A提供云游戏1体验服务,即用户A通过终端设备2b中的用户客户端21b可以体验云游戏1。
当用户A想要体验云游戏1时,可以对终端设备2b中的用户客户端21b执行触发操作,此时的终端设备2b可以响应于针对用户客户端21b的启动操作,得到由该用户客户端21b生成的启动指令,进而可以将该启动指令发送至云服务器2a,以在云服务器2a中为用户A创建或分配一个云游戏1实例(即为用户A创建或分配一个云游戏1对应的云应用客户端21a),并在该云服务器2a中运行该用户A对应的云应用客户端21a;与此同时,终端设备2b中的用户客户端21b也会成功启动,即终端设备2b中的用户客户端21b与服务器2a中的云应用客户端21a保持相同的运行状态。
应当理解,若云服务器2a中已经预先部署了云游戏1实例,那么云服务器2a在接收到用户客户端21b的启动指令后,可以直接从云服务器2a中为用户A分配一个云游戏1实例,并启动该云游戏1实例,这样可以加快云游戏1的启动时间,从而可以减少用户客户端21b显示云游戏1页面的等待时间;若云服务器2a中没有预先部署云游戏1实例,那么云服务器2a在接收到用户客户端21b的启动指令后,需要在云服务器2a中为该用户A创建一个云游戏1实例,并启动该新创建的云游戏1实例。
同理,如图2所示的终端设备2c可以为用户B所使用的电子设备,该终端设备2c同样可以集成一个或多个与不同类型云游戏相关联的用户客户端。例如,终端设备2c中的用户客户端22b也可以是与前述云游戏1相关联的客户端,那么该用户客户端22b在终端设备2c中的图标也可以为云游戏1的图标,当用户B想要体验云游戏1时,可以对终端设备2c中的用户客户端22b执行触发操作,此时的终端设备2c可以响应于针对用户客户端22b的启动操作,获取该用户客户端22b生成的启动指令,进而可以将该启动指令发送至云服务器2a,以在云服务器2a中为用户B创建或分配一个云游戏1实例(即为用户B创建或分配一个云游戏1对应的云应用客户端22a),并在该云服务器2a中运行该用户B对应的云应用客户端22a;与此同时,终端设备2c中的用户客户端22b也会成功启动,即终端设备2c中的用户客户端22b与云服务器2a中的云应用客户端22a保持相同的运行状态。
如图2所示,云应用客户端21a和云应用客户端22a在云服务器2a中并发运行同一云游戏(即前述云游戏1)时,均可以执行云游戏1中的游戏逻辑,比如,云应用客户端21a和云应用客户端22a均可以调用图2所示的图形处理驱动组件23a(即上述GPU驱动)来实现待渲染资源数据的加载。应当理解,在同服同游(即同一云服务器中运行同一云游戏)的业务场景下,为避免同一云游戏的待渲染资源数据的重复加载,本申请实施例提出可以通过资源共享的方式充分发挥云游戏的服务优势,提升云服务器中的并发路数,进而可以降低云游戏的运营成本。
如图2所示,云应用客户端21a在获取到云游戏1的待渲染资源数据(例如,纹理数据)时,可以通过云应用环境24a中的图形处理驱动组件23a进行哈希计算,即可以通过该图形处理驱动组件23a计算哈希值,以确定得到该待渲染资源数据(例如,纹理数据)的哈希值(例如,哈希值H1)。进一步的,云服务器2a还可以通过该图形处理驱动组件23a查找全局哈希,即该图形处理驱动组件23a可以在该云游戏1对应的全局哈希表中查找是否存在与前述待渲染资源数据(例如,纹理数据)的哈希值(例如,哈希值H1)相同的全局哈希值。如果存在与前述待渲染资源数据(例如,纹理数据)的哈希值(例如,哈希值H1)相同的全局哈希值(例如,哈希值H1’),则可以确定在该云服务器2a中存在与该全局哈希值(例如,哈希值H1’)对应的全局资源地址标识。为便于理解,这里以全局资源地址标识为上述资源ID1为例,该资源ID1可以用于唯一标识查找到的全局哈希值(例如,哈希值H1’)所对应的全局共享资源。基于此,进一步的,图形处理驱动组件23a可以根据获取到的资源ID1快速获取到当前已共享存储在该云服务器2a的显存中的全局共享资源。然后,云服务器2a可以将当前获取到的全局共享资源映射到云游戏1所对应的渲染进程,以得到该云游戏客户端21a在运行该云游戏1时的渲染图像(即该云游戏1的图像数据)。
其中,应当理解,图2所示的全局共享资源可以为云服务器2a首次加载待渲染资源数据输出前述渲染图像时的已渲染资源。比如,为便于理解,在云服务器2a并发运行有前述云应用客户端22a和云应用客户端21a的情况下,图2所示的全局共享资源具体可以为云应用客户端22a通过该图形处理驱动组件23a首次请求加载该待渲染资源数据输出上述渲染图像时的已渲染资源。显然,在确定云服务器2a的显存中存在与当前云应用客户端21a所请求加载的待渲染资源数据相关联的全局共享资源的情况下,可以通过资源共享的方式快速获取到该全局共享资源,从而可以避免该渲染资源数据在该云服务器2a中的重复加载。
应当理解,在前述同服同游的业务场景下,云应用客户端21a和云应用客户端22a均可以通过该云应用环境24a中的GPU驱动共享同一显存中的已渲染资源,以避免同一资源数据的重复加载。比如,若图2所示的云应用客户端21a和云应用客户端22a均需要加载同一纹理数据和同一着色数据,则可以通过资源共享的方式,在图2所示的显存中为这两个云应用客户端(即云应用客户端21a和云应用客户端22a)配置一个用于存储纹理数据所对应纹理资源的显存存储空间,另一个用于存储着色数据所对应的着色资源的显存存储空间。这意味着本申请实施例通过资源共享的方式无需单独为云应用客户端21a和云应用客户端22a分别配置一个用于存储纹理数据所对应纹理资源的显存存储空间和用于存储着色数据所对应的着色资源的另一显存存储空间。这样可以从根源上解决在同一显存中为这些云应用客户端分别分配等资源类型数量的显存存储空间的问题,即本申请实施例通过资源共享方式可以共享同一显存中的全局共享资源,进而可以避免在同一显存中为不同云应用客户端重复配置同等大小的显存存储空间而造成的显存资源的浪费。
应当理解,当云应用客户端22a首次将待渲染资源数据所对应的已渲染资源作为全局共享资源存储在图2所示的显存中时,无需在该显存中额外为请求加载同一待渲染资源数据的云应用客户端21a配置同等大小的显存存储空间,这样可以有效地避免显存资源的浪费。
需要说明的是,云应用客户端21a和云应用客户端22a实质上可以认为是服务器端包含完整云应用功能的一组软件集合,其本身是静止的,该云应用客户端21a和云应用客户端22a需要建立其对应的进程才能在云服务器2a中运行,进程本身是动态的。换言之,在需要启动云服务器2a中的云应用客户端21a时,可以在云服务器2a中建立该云应用客户端21a对应的进程,并启动该云应用客户端21a所在的进程;也就是说,在云服务器2a中运行云应用客户端21a的实质是在云服务器2a中运行该云应用客户端21a所在的进程,该进程可以认为是云应用客户端21a在云服务器2a中的基本执行实体。同理,在需要启动云服务器2a中的云应用客户端22a时,可以在云服务器2a中建立该云应用客户端22a对应的进程,并启动该云应用客户端22a所在的进程。
应当理解,如图2所示,在该云服务器2a中的云应用环境24a中,可以运行图2所示的图形处理驱动组件23a(即前述GPU驱动),该GPU驱动可以为该云服务器2a中运行的云应用客户端21a和云应用客户端21b提供相应的图形接口,例如,云应用客户端22a所在的进程需要调用该GPU驱动程序所提供的图形接口对待渲染的资源数据(即图2所示的待渲染资源数据)进行加载,以得到该云应用客户端22a在运行上述云游戏1时的渲染图像。
应当理解,由云应用客户端22a调用图形处理驱动组件23a所得到的每一帧渲染图像,都可以由该云应用客户端22a以编码得到的音视频码流的方式,实时传送至终端设备2c中的用户客户端22b,以使该用户客户端22b可以进一步将解码得到的每一帧渲染图像进行显示;而用户客户端22b获取到的每一个操作数据,都可以以输入事件数据流的方式传输至云应用客户端22a,以使云应用客户端22a将解析得到的每一个操作数据注入至云应用客户端22a运行的云应用(例如,可以注入到在云应用客户端22a运行的云游戏1)中,以此来实现云服务器2a中的云应用客户端22a与终端设备2c中的用户客户端22b之间的数据交互。同理,应当理解,由云应用客户端21a调用图形处理驱动组件23a所得到的每一个渲染图像,都可以由该云应用客户端21a实时传送至终端设备2b中的用户客户端21b进行显示;而用户客户端21b获取到的每一个操作数据,都可以注入至云服务器2a中运行的云应用客户端21a,以此来实现云服务器2a中的云应用客户端21a与终端设备2b中的用户客户端21b之间的数据交互。
其中,云服务器2a中并发运行的每个云应用客户端通过图形处理驱动组件23a进行哈希计算、哈希查找以及通过资源ID获取全局共享资源的具体实现方式,可以参见图3-图10所对应实施例的描述。
进一步的,请参见图3,图3是本申请实施例提供的一种数据处理方法的流程示意图。可以理解的是,该数据处理方法由云服务器执行,该云服务器可以为图1所示的云应用的处理系统中的服务器2000,也可以为上述图2所对应实施例中的云服务器2a。其中,该云服务器可以包含并发运行的多个云应用客户端,这里的多个云应用客户端可以包括第一云应用客户端,此时,该数据处理方法至少可以包括以下步骤S101至步骤S104:
步骤S101,在第一云应用客户端获取到云应用的待渲染资源数据时,确定待渲染资源数据的哈希值;
具体的,在第一云应用客户端运行云应用时,云服务器可以获取云应用的待渲染资源数据;进一步的,在第一云应用客户端请求加载待渲染资源数据时,云服务器可以通过图形处理驱动组件将待渲染资源数据从云服务器的磁盘传输至云服务器的内存存储空间;进一步的,云服务器可以调用图形处理驱动组件确定内存存储空间中的待渲染资源数据的哈希值。
其中,这里的云应用可以包含但不限于上述云游戏、云教育、云视频以及云会议。为便于理解,这里以运行在各个云应用客户端中的云应用为云游戏为例,以阐述在多个云应用客户端中的某个云应用客户端请求加载待渲染资源数据的具体过程。
为便于理解,本申请实施例可以在并发运行的多个云应用客户端中,将当前请求加载待渲染资源数据的云应用客户端作为第一云应用客户端,并将多个云应用客户端中除该第一云应用客户端之外的其他云应用客户端作为第二云应用客户端。
所以,当第一云应用客户端通过游戏引擎运行该云游戏时,可以快速获取到该云游戏的待渲染资源数据。这里的待渲染资源数据可以包含但不限于上述纹理数据、顶点数据以及着色数据。进一步的,当第一云应用客户端需要请求加载待渲染资源数据时,可以通过图形处理驱动组件(例如,上述GPU驱动)将待渲染资源数据从该云服务器的磁盘传输至该云服务器的内存(即内存存储空间),进而可以调用该图形处理驱动组件快速确定出该内存中所存储的待渲染资源数据的哈希值。同理,当第二云应用客户端通过游戏引擎运行同一云游戏时,也可以快速获取到该云游戏的待渲染资源数据。进一步的,在第二云应用客户端需要请求加载该待渲染资源数据时,也可以通过该图形处理驱动组件(例如,上述GPU驱动)将待渲染资源数据从该云服务器的磁盘传输至该云服务器的内存(即内存存储空间),进而可以调用该图形处理驱动组件快速确定出该内存中所存储的待渲染资源数据的哈希值。
为便于理解,进一步的,请参见图4,图4是本申请实施例提供的一种在云服务器中并发运行多个云应用客户端的场景示意图。如图4所示的云应用客户端4a可以为上述第一云应用客户端,如图4所示的云应用客户端4b具体可以为上述第二云应用客户端。应当理解,在云应用为上述云游戏1时,该第一云应用客户端具体可以为运行上述云游戏1的云游戏客户端(比如,游戏客户端V1),且与该云游戏客户端(比如,游戏客户端V1)进行数据交互的用户客户端可以为上述图2所对应实施例中的用户客户端21b,这意味着运行有该用户客户端21b的终端设备2b可以为上述用户A持有的游戏终端。同理,该第二云应用客户端具体可以为运行上述云游戏1的云游戏客户端(比如,游戏客户端V2),且与该云游戏客户端(比如,游戏客户端V2)进行数据交互的用户客户端可以为上述图2所对应实施例中的用户客户端22b,这意味着运行有该用户客户端22b的终端设备2c可以为上述用户B持有的游戏终端。
如图4所示,云应用客户端4a所需要加载的待渲染资源数据可以为图4所示的资源数据41a和资源数据41b。在云应用为上述云游戏1时,该资源数据41a具体可以为纹理数据,该资源数据41b具体可以为着色数据,比如,这里的着色数据具体可以包含用于描述各个像素点颜色的颜色数据,以及用于描述各个顶点之间的几何关系的几何数据。应当理解,这里将不对资源数据41a和资源数据41b的数据类型进行限定。
为便于理解,这里结合上述图2所对应实施例中描述的云应用客户端21a与GPU驱动之间的调用关系,阐述如图4所示的云应用客户端4a(即第一云应用客户端)在通过相应的图形接口(例如,一种用于压缩2D纹理资源的glCompressedTexSubImage2D图形接口)加载资源数据41a和资源数据41b的具体过程。应当理解,在本申请实施例中,为便于与加载待渲染资源数据之前所使用的另一图像接口(例如,一种用于存储2D纹理资源的glTexStorage2D图形接口)进行区分,可以将加载待渲染资源数据之前所使用的图像接口(例如,一种用于存储2D纹理资源的glTexStorage2D图形接口)统称为第一图形接口,并将加载待渲染资源数据时所使用的图像接口(例如,一种用于压缩2D纹理资源的glCompressedTexSubImage2D图形接口)统称为第二图形接口。
在如图4所示的云应用客户端4a(即第一云应用客户端)通过第二图形接口加载待渲染资源数据(即资源数据41a和资源数据41b)时,可以通过图形处理驱动组件(即GPU驱动)将待渲染资源数据(即资源数据41a和资源数据41b)从云服务器的磁盘传输至云服务器的内存存储空间,以进一步通过图形处理驱动组件(即GPU驱动)确定内存存储空间中的待渲染资源数据的哈希值。同理,在如图4所示的云应用客户端4b(即第二云应用客户端)通过第二图形接口加载待渲染资源数据(即资源数据41a和资源数据41b)时,也可以通过图形处理驱动组件(即GPU驱动)将待渲染资源数据(即资源数据41a和资源数据41b)从云服务器的磁盘传输至云服务器的内存存储空间,以进一步通过图形处理驱动组件(即GPU驱动)确定内存存储空间中的待渲染资源数据的哈希值。
具体的,云应用客户端4a(即第一云应用客户端)可以向图形处理驱动组件(即GPU驱动)发送用于加载待渲染资源数据(即资源数据41a和资源数据41b)的加载请求,以使该图形处理驱动组件(即GPU驱动)解析得到上述第二图形接口,并可以通过该第二图形接口调用该GPU驱动中的CPU硬件读取存储在内存存储空间中的资源数据41a和资源数据41b,进而可以通过该GPU驱动中的CPU硬件在用户层计算得到资源数据41a的哈希值和资源数据41b的哈希值。应当理解,在本申请实施例中,可以将计算得到资源数据41a的哈希值和资源数据41b的哈希值统称为待渲染资源数据的哈希值,该待渲染资源数据的哈希值可以为图4所示的哈希值H1,以便于后续可以进一步执行步骤S102,以将该哈希值H1下发至位于内核层,以在内核层的全局哈希表中查找与该哈希值H1相同的全局哈希值。应当理解,图4所示的哈希值H1具体可以包含资源数据41a的哈希值和资源数据41b的哈希值。
以此类推,如图4所示,云应用客户端4b(即第二云应用客户端)也可以通过GPU驱动中的CPU硬件进行数据传输和哈希计算,以计算得到待渲染资源数据的哈希值(即资源数据41a的哈希值和资源数据41b的哈希值),为便于进行区分,如图4所示,该待渲染资源数据的哈希值可以为图4所示的哈希值H1’。同理,该云应用客户端4b(即第二云应用客户端)通过GPU驱动在用户层计算得到该哈希值H1’时,也可以进一步执行下述步骤S102,以将该哈希值H1’下发至位于内核层,以在内核层的全局哈希表中查找与该哈希值H1’相同的全局哈希值。
步骤S102,基于待渲染资源数据的哈希值查找云应用对应的全局哈希表,得到哈希查找结果;
具体的,在云服务器包含图形处理驱动组件时,该图形处理驱动组件具体可以包含位于用户层的驱动程序和位于内核层的驱动程序;此时,待渲染资源数据的哈希值是由第一云应用客户端调用该图形处理驱动组件所得到的;这意味着该用户层的驱动程序可以用于对存储在云服务器的内存存储空间中的待渲染资源数据进行哈希计算;应当理解,在云服务器执行完上述步骤S101之后,在用户层的驱动程序可以进一步将待渲染资源数据的哈希值下发至内核层,以通过位于内核层的驱动程序调用驱动接口,在云应用对应的全局哈希表中,对与待渲染资源数据的哈希值相同的全局哈希值进行查找;进一步的,若在全局哈希表中查找到与待渲染资源数据的哈希值相同的全局哈希值,则云服务器可以将查找到的与待渲染资源数据的哈希值相同的全局哈希值作为查找成功结果;可选地,若在全局哈希表中未查找到与待渲染资源数据的哈希值相同的全局哈希值,则云服务器可以将未查找到的与待渲染资源数据的哈希值相同的全局哈希值作为查找失败结果;进一步的,云服务器可以将查找成功结果或者查找失败结果,确定为哈希查找结果。这样,当哈希查找结果为查找成功结果时,则说明当前需要加载的待渲染资源数据(例如,纹理数据)已被上述目标云应用客户端首次加载过,故而可以进一步执行下述步骤S103-步骤S104,以实现资源共享。反之,当哈希查找结果为查找失败结果时,则说明当前需要加载的待渲染资源数据(例如,纹理数据)尚未被上述任意一个云应用客户端加载,属于首次加载的纹理数据,进而可以调用该图形处理驱动组件执行相应的纹理数据加载过程。
其中,可以理解的是,这里的目标云应用客户端可以为上述图4所示的云应用客户端4a(即第一云应用客户端),即上述待渲染资源数据(例如,纹理数据)可能已经被该第一云应用客户端自己首次加载过。比如,在该云应用客户端4a运行云游戏1时,可以将自己首次加载该待渲染资源数据(比如,纹理数据)输出渲染图像时的渲染资源作为全局共享资源,这样,当云应用客户端4a在运行该云游戏1的过程中,若需要再次加载待渲染资源数据(比如,纹理数据)时,则可以通过哈希查找的方式快速找到该待渲染资源数据(比如,纹理数据)的哈希值相同的全局哈希值。
在一个或者多个实施例中,这里的目标云应用客户端也可以为上述图4所示的云应用客户端4b(即第二云应用客户端),即上述待渲染资源数据(例如,纹理数据)也有可能是被并发运行的第二云应用客户端首次加载过,比如,在该云应用客户端4b并发运行同一云游戏(即云游戏1)时,可以将自己首次加载该待渲染资源数据(比如,纹理数据)输出渲染图像时的渲染资源作为全局共享资源,这样,当云应用客户端4a在运行该云游戏1的过程中,若需要加载该待渲染资源数据(比如,纹理数据)时,则可以直接通过哈希查找的方式快速找到该待渲染资源数据(比如,纹理数据)的哈希值相同的全局哈希值。基于此,这里将不对首次加载待渲染资源数据的云应用客户端进行限定。
其中,应当理解,在本申请实施例中,一个云应用可以对应一个全局哈希表。这样,对于并发运行同一云游戏的多个云游戏客户端而言,可以根据上述步骤S101得到的哈希值,在相应全局哈希表中快速判断出是否存在与当前待渲染资源数据的哈希值相同的全局哈希值。
为便于理解,进一步的,请参见上述图4,当图形处理驱动组件(即GPU驱动)在用户层调用CPU硬件计算得到待渲染资源数据的哈希值(比如图4所示的哈希值H1)时,可以将该哈希值H1下发至内核层,以在内核层中通过当前云应用(即上述云游戏1)所对应的全局哈希表执行上述图4所示的步骤S11,即可以在内核层中通过当前云应用(即上述云游戏1)所对应的全局哈希表进行哈希匹配,以判断该全局哈希表中是否存在与该哈希值H1相同的全局哈希值。
应当理解,图4所示的全局哈希表是以各个已渲染资源数据的哈希值(即由云服务器首次加载了的各个待渲染资源数据的哈希值)为节点构建的全局二叉树,那么,可以理解的是,本申请实施例可以将当前写入该内核层的全局哈希表中的每个哈希值统称为全局哈希值,以在该全局哈希表中查找是否存在与当前待渲染资源数据的哈希值(即图4所示在用户层计算得到的哈希值H1)相同的全局哈希值。其中,应当理解,这里的已渲染数据用于表征已首次加载了的待渲染资源数据。
如上述图4所示,当云应用客户端4a调用图形处理驱动组件首次加载待渲染资源数据(即图4所示的资源数据41a和资源数据41b)时,将不会在全局哈希表中找到与该待渲染资源数据的哈希值相匹配的全局哈希值,进而将会出现上述哈希查找失败结果。此时,运行该云应用客户端4a的云服务器可以根据该哈希查找失败结果执行上述图4所示的步骤S12,即该云服务器可以在哈希匹配失败的情况下,通过GPU驱动对作为待渲染资源数据的资源数据41a和资源数据41b进行首次加载,比如,如上述图4所示,可以将用于计算得到哈希值H1的资源数据41a和资源数据41b,通过DMA(Direct Memory Access,直接存储器访问单元,也可以称之为传输控制组件)将该资源数据41a和资源数据41b传输至图4所示的显存,进而可以通过该GPU驱动的GPU硬件访问显存,以将显存中的待渲染资源数据加载到预先在内核层创建的第一资源对象(例如,资源A)中。
应当理解,在本申请实施例中,在云应用客户端4a(即第一云应用客户端)请求加载待渲染资源数据之前,会通过GPU驱动预先在云服务器的显存中为待渲染资源数据分配显存存储空间,比如,如上述图4所示,云服务器可以预先为资源数据41a分配一个显存存储空间,并为资源数据41b分配另一个显存存储空间。应当理解,在本申请实施例中,云服务器预先为资源数据41a分配的显存存储空间和为资源数据41b分配的另一个显存存储空间均为上述云服务器为待渲染资源数据分配的目标显存存储空间。
其中,值得注意的是,这里的目标显存存储空间(即图4所示的两个显存存储空间)可以用于存储通过该GPU驱动的GPU硬件,对加载有待渲染资源数据的第一资源对象(例如,资源A)进行渲染所得到的渲染资源,即云服务器可以将当前加载有待渲染资源数据的第一资源对象(例如,资源A)映射到云游戏1对应的渲染进程,以通过该渲染进程对当前加载有待渲染资源数据的第一资源对象(例如,资源A)进行渲染处理,以得到待渲染资源数据对应的渲染资源。
比如,如上述图4所示,预先为资源数据41a分配的显存存储空间可以用于存储图4所示的资源数据41a对应的渲染资源42a、预先为资源数据41b分配另一个显存存储空间可以用于存储资源数据41b对应的渲染资源42b。应当理解,如图4所示的渲染资源42a和渲染资源42b均是能够用于进行资源共享的已渲染资源。此时,云服务器可以进一步执行步骤S13,以将待渲染资源数据对应的渲染资源(即图4所示的渲染资源42a和渲染资源42b)作为上述全局共享资源。
如图4所示,云服务器可以进一步将待渲染资源数据的哈希值(即图4所示的哈希值H1)作为全局哈希值,以添加到图4所示的全局哈希表中,此时,待渲染资源数据的哈希值(即图4所示的哈希值H1)即可以作为在该全局哈希表中的图4所示的全局哈希值H1。
具体的,如上述图4所示,云服务器还可以在执行步骤S13时,为全局共享资源生成用于唯一标识全局共享资源的物理地址的资源地址标识ID,进而可以将该资源地址标识ID与待渲染资源数据的哈希值(即图4所示的哈希值H1)进行映射,以将映射后的待渲染资源数据的哈希值(即图4所示的哈希值H1)添加到图4所示的全局哈希表,以更新得到包含全局哈希值H1的全局哈希表。
应当理解,可选地,在一个或者多个实施例中,如上述图4所示,由于该云游戏1对应的全局哈希表中存在与该与当前待渲染资源数据的哈希值(即图4所示在用户层计算得到的哈希值H1)相同的全局哈希值,故而可以进一步执行下述步骤S103,以在同服同游时实现同一云应用客户端之间的显存资源共享。
同理,如图4所示,对于在云服务器中与云应用客户端4a并发运行的云应用客户端4b而言,当该云应用客户端4b请求加载同一待渲染资源数据(例如,图4所示的资源数据41a和资源数据41b)时,则可以通过上述计算记得的哈希值(例如,图4所示的哈希值H1’)执行步骤S21,以进行哈希匹配,进而可以在哈希匹配成功的情况下,进一步执行下述步骤S103,以在同服同游时实现不同云应用客户端之间的显存资源共享。
其中,可以理解的是,位于用户层的驱动程序包括第一用户态驱动程序和第二用户态驱动程序,位于内核层的驱动程序包括第一内核态驱动程序和第二内核态驱动程序。应当理解,当云服务器通过GPU驱动中的这些驱动程序进行哈希匹配的过程中,可以基于这些驱动程序之间的程序调用关系,将在用户层计算得到的哈希值(例如,上述哈希值H1)逐层下发至内核层。这样,当位于内核层的第二内核态驱动程序获取到哈希值(例如,上述哈希值H1)时,就可以通过第一内核态驱动程序在内核层基于输入输出操作(即IO操作类型)所指示的用于进行哈希查找的驱动接口,获取到全局哈希表,以通过查找全局哈希表的方式,快速判断是否存在与当前哈希值相同的全局哈希值所映射的全局资源地址标识。这意味着该云服务器可以通过该GUP驱动中的第二内核态驱动程序在全局哈希表中通过哈希匹配的方式判断出是否存在与当前哈希值相同的全局哈希值。
基于此,在用户层的驱动程序进一步将待渲染资源数据的哈希值下发至内核层时,可以通过位于内核层的驱动程序调用驱动接口,在云应用对应的全局哈希表中,对与待渲染资源数据的哈希值相同的全局哈希值进行查找的具体过程可以描述为:在云服务器中,第一用户态驱动程序可以根据在该用户层计算得到的哈希值(例如,上述哈希值H1),生成用于发送给第二用户态驱动程序的全局资源地址标识获取指令。可以理解的是,在第二用户态驱动程序接收到该第一用户态驱动程序发送的全局资源地址标识获取指令时,可以对该全局资源地址标识获取指令进行解析,以解析得到在该用户层计算得到的哈希值(例如,上述哈希值H1),进而可以根据解析得到的哈希值(即上述哈希值H1),在用户层生成用于发送给位于内核层的第一内核态驱动程序的全局资源地址标识查找命令。这样,在位于内核层的第一内核态驱动程序接收到位于用户层的第二用户态驱动程序发送的全局资源地址标识查找命令时,可以根据该全局资源地址标识查找命令添加相应的输入输出操作(比如,可以添加与用户态驱动程序相应的IO操作类型),进而可以在内核层生成用于派发给第二内核态驱动程序的查找驱动接口调用指令。可以理解的是,该第二内核态驱动程序在接收到第一内核态驱动程序发送的查找驱动接口调用指令时,可以基于该查找驱动接口调用指令中添加的输入输出操作类型(比如,可以添加与用户态驱动相应的IO操作类型),确定哈希查找驱动接口(这里的哈希查找驱动接口可以统称为驱动接口),进而可以调用确定的哈希查找驱动接口,在全局哈希表中查找与当前哈希值(例如,上述哈希值H1)相同的全局哈希值。
为便于理解,进一步的,请参见图5,图5是本申请实施例提供的一种部署在云服务器中的GPU驱动的内部架构图。其中,该GPU驱动包含图5所示的用户态驱动程序53a、用户态驱动程序53b、内核态驱动程序54a和内核态驱动程序54b。其中,图5所示的用户态驱动程序53a即为上述位于用户层的第一用户态驱动程序,图5所示的用户态驱动程序53b即为上述位于用户层的第二用户态驱动程序。同理,图5所示的内核态驱动程序54a即为上述位于内核层的第一内核态驱动程序,图5所示的内核态驱动程序54b即为上述位于内核层的第二内核态驱动程序。
应当理解,在云应用为云游戏时,在如图5所示的云服务器中部署的第一云游戏客户端可以为图5所示的云游戏客户端51a,该云游戏客户端51a可以通过游戏引擎51b启动图5所示的云游戏X,以使得该云游戏X可以运行在该云游戏客户端51a中。
应当理解,当该云游戏客户端51a运行该云游戏X时,可以获取该云游戏X的待渲染资源数据,为便于理解,这里以待渲染资源数据为纹理数据为例,进而可以通过该GPU驱动中的这四个驱动程序之间的调用关系,对由用户层向内核层下发哈希值,以进行哈希查找的具体过程进行阐述。
其中,应当理解,在本申请实施例中的调用关系具体是指:第一用户态驱动程序可以用于调用第二用户态驱动程序,第二用户态驱动程序可以用于调用第一内核态驱动程序,且第一内核态驱动程序可以用于调用第二内核态驱动程序,第二内核态驱动程序则调用相应的驱动接口执行相应的业务操作,比如,这里的业务操作具体可以包括,为待渲染资源数据配置目标显存存储空间、通过哈希值查找资源ID等。
当云游戏客户端51a请求该GPU驱动加载纹理数据时,可以将用于加载该纹理数据的加载请求发送给图5所示的用户态驱动程序53a(即第一用户态驱动程序),以使该用户态驱动程序53a(即第一用户态驱动程序)在接收到针对该纹理数据的加载请求时,可以进一步对该加载请求进行解析,得到上述第二图形接口,进而可以通过第二图形接口调用图5所示的CPU读取当前传输至内存(即内存存储空间)中的待渲染资源数据,以计算得到该待渲染资源数据的哈希值。进一步的,用户态驱动程序53a可以根据在该用户层计算得到的哈希值(例如,上述哈希值H1),生成用于发送给用户态驱动程序53b的全局资源地址标识获取指令。可以理解的是,在用户态驱动程序53b接收到该用户态驱动程序53a发送的全局资源地址标识获取指令时,可以对该全局资源地址标识获取指令进行解析,以解析得到在该用户层计算得到的哈希值(例如,上述哈希值H1),进而可以根据解析得到的哈希值(即上述哈希值H1),在用户层生成用于发送给位于内核层的内核态驱动程序54a的全局资源地址标识查找命令。这样,在位于内核层的内核态驱动程序54a接收到位于用户层的用户态驱动程序53b发送的全局资源地址标识查找命令时,可以根据该全局资源地址标识查找命令添加相应的输入输出操作类型(比如,可以添加与用户态驱动程序53b相应的IO操作类型),进而可以在内核层生成用于派发给内核态驱动程序54b的查找驱动接口调用指令。可以理解的是,该内核态驱动程序54b在接收到内核态驱动程序54a发送的查找驱动接口调用指令时,可以基于该查找驱动接口调用指令中添加的输入输出操作类型,确定哈希查找驱动接口(这里的哈希查找驱动接口可以统称为驱动接口),进而可以调用确定的哈希查找驱动接口,在全局哈希表中查找与当前哈希值(例如,上述哈希值H1)相同的全局哈希值,并可以在查找到与当前哈希值(例如,上述哈希值H1)相同的全局哈希值的情况下,执行下述步骤S103。其中,应当理解,上述哈希值H1是由用户态驱动程序53a在用户层,调用CPU读取内存存储空间(即图5所示的内存)中的待渲染资源数据(比如,纹理数据)进行哈希计算得到的。该内存存储空间中的待渲染资源数据是由该云游戏客户端51a调用GPU驱动中的CPU硬件(简称为CPU),将待渲染资源数据从图5所示的磁盘传输而来的。
应当理解,图5所示的图形渲染组件52a可以用于在获取到与待渲染资源数据相关联的全局共享资源时,将该全局共享资源映射到云游戏X对应的渲染进程,以通过渲染进程调用图5所示的GPU硬件(简称为GPU)进行渲染操作,以输出云游戏客户端51a在运行该云游戏X时的渲染图像,进而可以通过图5所示的图形管理组件对帧缓存区中所存储的该渲染图像进行抓取,以将抓取到的渲染图像(即抓取到的图像数据)通过图5所示的视频编码组件进行视频编码,以编码得到该云游戏X的视频流。应当理解,图5所示的音频管理组件可以用于抓取与该渲染图像相关联的音频数据,进而可以将抓取到的音频数据通过音频编码组件进行音频编码,以编码得到该云游戏X的音频流。应当理解,该云服务器在得到该云游戏X的视频流和音频流时,可以以流媒体的形式将该云游戏X的视频流和音频流返回给与该云游戏客户端51a具有通信连接的用户客户端。此外,应当理解,图5所示的操作输入管理组件可以用于在接收到用户客户端发送的输入事件数据流时,解析得到该输入事件数据流中的对象操作数据,并可以进一步通过图5所示的操作数据注入组件将解析得到的对象操作数据注入到该云游戏X中,以便于可以按需获取该云游戏X的下一帧渲染图像。其中,应当理解,图5所示的用于运行云游戏X的云游戏客户端51a所在的云系统,为该云服务器针对与该云游戏客户端51a具有通信连接的用户客户端的客户端环境系统所虚拟得到的云应用环境。
步骤S103,若哈希查找结果指示在全局哈希表中查找到与待渲染资源数据的哈希值相同的全局哈希值,则获取全局哈希值所映射的全局资源地址标识;
具体的,若哈希查找结果指示在全局哈希表中查找到与待渲染资源数据的哈希值相同的全局哈希值,则云服务器可以确定哈希查找结果为查找成功结果;进一步的,云服务器可以基于查找成功结果确定待渲染资源数据对应的渲染资源已被云服务器中的目标云应用客户端加载;这里的目标云应用客户端为并发运行的多个云应用客户端中的云应用客户端;比如,这里的目标云应用客户端可以为上述图4所对应实施例中的云应用客户端4a。进一步的,云服务器可以在目标云应用客户端已加载待渲染资源数据对应的渲染资源的情况下,获取全局哈希值所映射的全局资源地址标识。
应当理解,如上述图4所示,当在全局哈希表中查找到与当前哈希值(即当前待渲染资源数据的哈希值)相同的全局哈希值的情况下,可以基于首次加载该待渲染资源数据时所创建的全局哈希值与全局资源地址标识之间的映射关系,快速找到该全局哈希值H1所映射的资源ID,进而可以根据找到的资源ID进一步执行下述步骤S104。
具体的,云服务器可以在目标云应用客户端已加载待渲染资源数据对应的渲染资源的情况下,通过内核层的驱动程序确定存在与待渲染资源数据相关联的全局资源地址标识,且通过内核层的驱动程序在云应用对应的全局资源地址标识列表中获取与待渲染资源数据相关联的全局哈希值所映射的全局资源地址标识;进一步的,云服务器可以将全局资源地址标识返回给用户层的驱动程序,以使用户层的驱动程序通知第一云应用客户端执行下述步骤S104中基于全局资源地址标识获取全局共享资源的步骤。可以理解的是,这里的全局资源地址标识列表存储在显卡所对应的显存中,该全局资源地址标识列表中所添加的每个全局资源地址标识均为当前作为全局共享资源的已渲染资源所对应的资源ID。应当理解,在一个或者多个实施例中,在将某个资源ID(例如,上述资源ID1)添加至全局资源地址标识列表中时,会一并建立该资源ID(例如,上述资源ID1)与上述全局哈希表中的全局哈希值(例如,上述全局哈希值H1)之间的一一映射关系,比如,本申请实施例可以将根据当前添加的资源ID和添加至全局哈希表中的全局哈希值所建立的映射关系统称为方向性查找关系。这样,云服务器可以基于在全局哈希表中查找到的与当前哈希值匹配的全局哈希值(例如,上述全局哈希值H1)和该方向性查找关系,快速获取到全局资源地址标识列表中的资源ID(例如,上述资源ID1)。
其中,可以理解的是,该全局资源地址标识列表中所包含的每个资源ID可以统称为全局资源地址标识。应当理解,本申请实施例可以根据GPU驱动之间的各个驱动程序之间的调用关系,在该GPU驱动中的各个驱动程序(即上述四个驱动程序)之间逐层传递当前获取到的全局资源地址标识(例如,上述资源ID1)。基于此,当该GPU驱动中的第二内核态驱动程序基于查找到的全局哈希值获取到全局资源地址标识(例如,上述资源ID1)时,可以将该全局资源地址标识(例如,上述资源ID1)返回给上述第一用户态驱动程序,以使该第一用户态驱动程序可以基于全局资源地址标识(例如,上述资源ID1),触发对该GPU驱动程序中其他驱动程序(例如,第二用户态驱动程序、第一内核态驱动程序和第二内核态驱动程序)的调用。
可选地,可以理解的是,在一个或者多个实施例中,当该第一用户态驱动程序在获取到全局资源地址标识(例如,上述资源ID1)时,还可以一并将成功查找到该全局资源地址标识的通知消息返回给第一云应用客户端(例如,上述图5所示的云游戏客户端51a),以使该第一云应用客户端通过该GPU驱动进一步执行下述步骤S104。可选地,可以理解的是,在一个或者多个实施例中,该第一用户态驱动程序在获取到全局资源地址标识(例如,上述资源ID1)时,可以将成功查找到该全局资源地址标识的通知消息返回给第一云应用客户端,并可以同步跳转执行下述步骤S104。
步骤S104,基于全局资源地址标识获取全局共享资源,将全局共享资源映射到云应用对应的渲染进程,得到第一云应用客户端在运行云应用时的渲染图像;全局共享资源为云服务器首次加载待渲染资源数据输出渲染图像时的已渲染资源。
其中,应当理解,在一个或者多个实施例中,全局共享资源可以理解为当前添加到全局共享资源列表中的已渲染资源(即上述图4所示的渲染资源42a和渲染资源42b),基于此,在本申请实施例中,云服务器可以通过GPU驱动调用渲染状态机,以通过渲染状态机将当前添加到全局共享资源列表中的已渲染资源的资源状态管理配置为共享状态,进而可以将处于共享状态的已渲染资源统称为上述全局共享资源。
应当理解,云服务器还可以在自己的显卡所对应的显存资源中,预先为添加至该全局共享资源列表中的全局共享资源分配相应的物理地址。该全局共享资源的物理地址可供GPU驱动中的GPU硬件对上述目标显存空间进行访问,比如,为便于理解,以该全局共享资源的物理地址为OFFF为例,以阐述在GPU驱动的各个驱动程序之间,通过逐层传递资源ID(例如,上述资源ID1)的方式获取到存储在物理地址OFFF处的全局共享资源的具体过程。
应当理解,在本申请实施例中,当并发运行在该云服务器中的多个云应用客户端中的某些云应用客户端(比如,上述图4所示的云应用客户端4a)需要二次加载该资源数据41a和资源数据41b时,为避免资源数据的重复加载,云服务器可以在确定存在与该资源数据41a和资源数据41b的哈希值相同的全局哈希值的情况下,通过GPU驱动为全局共享资源的物理地址所动态分配的虚拟地址空间,间接获取存储在全局共享资源列表中的全局共享资源。
基于此,当在云服务器的显存中已存储有待渲染资源数据对应的渲染资源的情况下,就可以通过哈希查找的方式快速判断出确实存在与处于共享状态的已渲染资源映射的资源ID,这样,对于并发运行在该云服务器中的其他云游戏客户端(即上述第二云应用客户端)而言,也可以在GPU驱动程序之间通过逐层传递资源ID的方式实现资源对象的替换(比如,可以用在内核层新建的第二资源对象替换本次加载待渲染资源数据前在内核层创建的第一资源对象),进而可以在内核层中将新建的第二资源对象与基于资源ID所获取到的全局共享资源进行映射时,为该第二资源对象配置得到用于映射全局共享资源的物理地址的虚拟地址空间,进而可以通过调用GPU硬件,访问该虚拟地址空间所映射的物理地址,以获取到存储在该物理地址下的全局共享资源。由此可见,通过在GPU驱动的各个驱动程序之间逐层传递资源ID的方式,可以快速获取到该资源ID所映射的全局共享资源,进而可以在当前云应用客户端(例如,第一云应用客户端)无需二次加载和编译待渲染资源数据的情况下,实现显存资源的共享。
为便于理解,进一步的,请参见图6,图6是本申请实施例提供的一种在显卡软件设备中所存储的全局业务数据表之间的查找关系示意图。如图6所示的全局共享资源列表、全局哈希表和全局资源地址标识列表均是由该云服务器的显卡所对应的显卡软件设备所创建的。即在该显卡所对应的显存中,可以将图6所示的全局共享资源列表、全局哈希表和全局资源地址标识列表统称为全局业务数据表。
其中,全局共享资源列表中包含的资源Z1、资源Z2、资源Z3和资源Z4均为处于共享状态的已渲染资源,这意味着该全局共享资源列表中的这些已渲染资源(即资源Z1、资源Z2、资源Z3和资源Z4)均先后被云服务器通过GPU驱动添加到该云游戏的渲染进程,以输出对应的渲染图像。即如图6所示,在该全局共享资源列表中,资源Z1的添加时间戳早于资源Z2的添加时间戳,资源Z2的添加时间戳早于资源Z3的添加时间戳,以此类推,资源Z3的添加时间戳早于资源Z4的添加时间戳,这意味着此时,在该全局共享资源列表中的资源Z4为最新添加至该全局共享资源列表中的全局共享资源。
比如,对于图6所示的资源Z1而言,该资源Z1可以视为云服务器首次加载T1时刻的待渲染资源数据(例如,纹理数据1)输出相应渲染图像(例如,图像数据1)时的已渲染资源。同理,对于图6所示的资源Z2而言,该资源Z2可以视为云服务器首次加载T2时刻的另一待渲染资源数据(例如,纹理数据2,该纹理数据2的数据内容不同于纹理数据1的数据内容)输出相应渲染图像(例如,图像数据2)时的已渲染资源。以此类推,对于图6所示的资源Z3而言,该资源Z3可以视为云服务器首次加载T3时刻的又一待渲染资源数据(例如,纹理数据3,该纹理数据3的数据内容不同于纹理数据1的数据内容,也不同于纹理数据2的数据内容)输出相应渲染图像(例如,图像数据3)时的已渲染资源。以此类推,对于图6所示的资源Z4而言,该资源Z4可以视为云服务器首次加载T4时刻的又一待渲染资源数据(例如,纹理数据4,该纹理数据4的数据内容与纹理数据1的数据内容,纹理数据2的数据内容以及纹理数据3的数据内容均不同)输出相应渲染图像(例如,图像数据4)时的已渲染资源。应当理解,这里的T1时刻、T2时刻、T3时刻以及T4时刻,旨在表征该第一云游戏客户端获取到待渲染资源数据时的获取时间戳。
换言之,在待渲染资源数据为纹理数据1时,该纹理数据所对应的纹理资源(即待渲染资源数据对应的渲染资源)可以为图6所示的资源Z1,此时,写入全局哈希表中的纹理数据1的哈希值可以为图6所示的全局哈希值H1,且由该全局哈希值H1所映射的全局资源地址标识可以图6所示的全局资源地址标识1(比如,资源ID1)。
因此,当某个云游戏客户端(即上述第一云应用客户端)请求二次加载纹理数据1时,云服务器可以基于图6所示的各全局业务数据表之间所存在方向性查找关系(即图6的箭头方向所表征的映射关系)快速查找到对应的全局业务数据表。比如,云服务器在通过GPU驱动计算得到纹理数据1的哈希值的情况下,可以进一步通过该纹理数据1的哈希值,在图6所示的全局哈希表中查找到与该纹理数据1的哈希值相匹配的全局哈希值,此时,查找到的与该纹理数据1的哈希值相匹配的全局哈希值可以为图6所示的全局哈希值H1。进一步的,如图6所示,云服务器可以按照全局哈希表与全局资源地址标识列表之间所存在的方向性查找关系(也可以称之为定向查找关系),在如图6所示的全局资源地址标识列表中快速定位到该全局哈希值H1所映射的资源ID,即该全局哈希值H1所映射的资源ID可以为图6所示的全局资源地址标识1(即资源ID1)。进一步的,如图6所示,云服务器可以按照全局资源地址标识列表与全局共享资源列表之间所存在的方向性查找关系(也可以称之为定向查找关系),在如图6所示的全局共享资源列表中快速定位到该全局资源地址标识1(即资源ID1)所映射的全局共享资源,即该全局资源地址标识1(即资源ID1)所映射的全局共享资源为图6所示的资源Z1。其中,应当理解,如图6所示,这些全局业务数据表之间的方向性查找关系,具体可以参照图6所示的箭头所指向的方向。
同理,当某个云游戏客户端(即上述第一云应用客户端)请求二次加载纹理数据2时,云服务器可以基于图6所示的各全局业务数据表之间所存在的箭头所指示的方向性查找关系相继查找到对应的全局业务数据。即通过GPU驱动在全局哈希表中所快速查找到的与纹理数据2的哈希值相匹配的全局哈希值为图6所示的全局哈希值H2,该全局哈希值H2所映射的全局资源地址标识为图6所示的全局资源地址标识2(即资源ID2),该全局资源地址标识2(即资源ID2)所映射的全局共享资源为图6所示的资源Z2。
以此类推,当某个云游戏客户端(即上述第一云应用客户端)请求二次加载纹理数据3时,云服务器也可以基于图6所示的各全局业务数据表之间所存在的箭头所指示的方向性查找关系相继查找到对应的全局业务数据。即云服务器通过GPU驱动在全局哈希表中所快速查找到的与纹理数据3的哈希值相匹配的全局哈希值为图6所示的全局哈希值H3,该全局哈希值H3所映射的全局资源地址标识为图6所示的全局资源地址标识3(即资源ID3),该全局资源地址标识3(即资源ID3)所映射的全局共享资源为图6所示的资源Z3。同理,当某个云游戏客户端(即上述第一云应用客户端)请求二次加载纹理数据4时,云服务器也可以基于图6所示的各全局业务数据表之间所存在的箭头所指示的方向性查找关系相继查找到对应的全局业务数据。即云服务器通过GPU驱动在全局哈希表中所快速查找到的与纹理数据4的哈希值相匹配的全局哈希值为图6所示的全局哈希值H4,该全局哈希值H4所映射的全局资源地址标识为图6所示的全局资源地址标识4(即资源ID4),该全局资源地址标识4(即资源ID4)所映射的全局共享资源为图6所示的资源Z4。
可选地,在一个或者多个实施例中,云服务器在执行完上述步骤S102之后,还可以进一步执行下述步骤:若哈希查找结果指示在全局哈希表中未查找到与待渲染资源数据的哈希值相同的全局哈希值,则云服务器可以确定哈希查找结果为查找失败结果,进而可以基于查找失败结果确定待渲染资源数据对应的渲染资源尚未被多个云应用客户端中任意一个云应用客户端加载;进一步的,云服务器可以通过内核层的驱动程序确定不存在与待渲染资源数据相关联的全局资源地址标识,且将待渲染资源数据的哈希值所映射的资源地址标识配置为空值,从而可以将空值所对应的资源地址标识返回给用户层的驱动程序,以使用户层的驱动程序通知第一云应用客户端对待渲染资源数据进行加载。其中,第一云应用客户端对待渲染资源数据进行加载的具体过程,可以参见上述图4所对应实施例中对云应用客户端4a首次加载待渲染资源数据(即上述图4所示的资源数据41a和资源数据41b)的具体过程的描述,这里将不再继续进行赘述。
可选地,在一个或者多个实施例中,在第一云应用客户端对待渲染资源数据进行加载(即首次加载)时,还可以具体执行下述步骤:在检查到待渲染资源数据的数据格式为第一数据格式时,云服务器可以将待渲染资源数据的数据格式由第一数据格式转换为第二数据格式,并可以将具备第二数据格式的待渲染资源数据确定为转换资源数据,从而可以通过云服务器中的传输控制组件(即上述DMA)将转换资源数据由内存存储空间传输至云服务器为待渲染资源数据预分配的显存存储空间(即上述目标显存存储空间),以在显存存储空间(即上述目标显存存储空间)中将该待渲染资源数据加载到上述第一资源对象中,应当理解,这里的第一资源对象为在预分配该目标显存存储空间时通过上述第一图形接口所创建的。
其中,可以理解的是,对于待渲染资源数据为纹理数据而言,该GPU驱动所不支持的纹理数据的数据格式为第一数据格式,该第一数据格式可以包括但不限于ASTC以及ETC1,ETC2等纹理数据格式。此外,应当理解该GPU驱动所支持的纹理资源的数据格式为第二数据格式,该第二数据格式可以包括但不限于RGBA和DXT等纹理数据格式。基于此,当GPU驱动遇到不支持的纹理数据的数据格式时,可以通过该GPU驱动中的CPU硬件对具有第一数据格式的纹理数据进行格式转换。可选地,在一个或者多个实施例中,还可以用CPU硬件或者GPU硬件执行格式转换操作,以将具备第一数据格式(比如,ASTC以及ETC1,ETC2)的纹理数据转换为具备第二数据格式(比如,RGBA或者DXT)的纹理数据。应当理解,在本申请实施例中,对于待渲染资源数据为纹理数据而言,待渲染资源数据的哈希值具体是指计算得到格式转换前的具有第一数据格式的纹理数据的哈希值。
在本申请实施例中,当云服务器中运行的某个云应用客户端(例如,前述第一云应用客户端)需要加载该云应用的某种资源数据(即前述待渲染资源数据)时,为便于理解,这里以该待渲染资源数据具体为上述待渲染的纹理资源的纹理数据为例,那么,当第一云应用客户端需要请求加载该待渲染的纹理资源的纹理数据时,就需要首先计算得到待渲染的纹理资源的纹理数据的哈希值(即需要首先计算得到待渲染资源数据的哈希值),进而可以在全局哈希表通过哈希查找的方式快速判断是否存在与该纹理数据的哈希值相匹配的全局哈希值,若存在,则可以判断该云服务器的显存中确实存在该查找到的全局哈希值所映射的全局资源地址标识。此时,云服务器可以进一步利用该全局资源地址标识快速从该云服务器的显存中获取到该纹理数据所对应的全局共享资源,这意味着本申请实施例可以在显存中存在纹理数据所对应的全局共享资源的情况下,直接利用已经查找到的全局哈希值准确定位到用于映射该全局共享资源的全局资源地址标识,进而可以在该云服务器中通过资源共享的方式避免资源数据(即纹理数据)的重复加载。此外,可以理解的是,该云服务器还可以进一步将获取到的全局共享资源映射到该云应用对应的渲染进程,进而可以在无需单独加载且编译待渲染资源数据(例如,纹理数据)的情况下,快速且稳定地生成该第一云应用客户端中所运行的云应用的渲染图像。
进一步的,请参见图7,图7是本申请实施例提供的另一种数据处理方法,该数据处理方法由云服务器执行,该云服务器可以为图1所示的云应用的处理系统中的服务器2000,也可以为上述图2所对应实施例中的云服务器2a。其中,该云服务器可以包含并发运行的多个云应用客户端,这里的多个云应用客户端可以包括第一云应用客户端和图形处理驱动组件,此时,该数据处理方法至少可以包括以下步骤S201至步骤S210:
步骤S201,在第一云应用客户端运行云应用时,获取云应用的待渲染资源数据;
为便于理解,这里以云应用为云游戏业务场景下的云游戏为例,那么,在云游戏业务场景下,本申请实施例可以将运行有该云游戏的云游戏客户端统称为云应用客户端,即在上述云服务器中并行运行的多个云应用客户端具体可以为多个云游戏客户端。这里的待渲染资源数据至少包括:纹理数据、顶点数据、以及着色数据等资源数据的一种或者多种,这里将不对该待渲染资源数据的数据类型进行限定。
其中,需要说明的是,本申请实施例中的某个用户在通过云服务器体验云应用(例如,云游戏)时,该云服务器若需要获取云游戏中的用户的个人报名信息、阵营对局信息(即对象游戏信息)、游戏进度信息以及待渲染资源数据等数据,则需要在用户所持有的终端设备上显示相应的提示界面或者弹窗,该提示界面或者弹窗用于提示用户当前正在搜集个人报名信息、或者阵营对局信息、或者游戏进度信息以及待渲染资源数据等数据,因此,本申请实施例需要在获取到用户对该提示界面或者弹窗发出确认操作后,进一步开始执行数据获取的相关的步骤,否则结束。
为便于对这些并发运行的云游戏客户端进行区分,本申请实施例可以将当前正在运行该云游戏的某个云游戏客户端称之为第一云应用客户端,并可以将当前正在运行该云游戏的其他云游戏客户端称之为第二云应用客户端,以在该云服务器中并发运行有第一云应用客户端和第二云应用客户端的情况下,阐述在不同云应用客户端(即不同云游戏客户端)之间实现资源共享的具体过程。
应当理解,在第一云应用客户端通过图形处理驱动组件请求加载该待渲染资源数据(例如,纹理数据)之前,还需要执行下述步骤S202,即需要预先在该云服务器的显存中为该待渲染资源数据分配相应的显存存储空间(该显存存储空间可以为上述目标显存存储空间,这里的目标显存存储空间可以用于存储待渲染资源数据所对应的渲染资源,例如,纹理数据对应的纹理资源)。应当理解,本申请实施例在通过哈希查找的方式,确定全局哈希表中不存在与该待渲染资源数据的哈希值相同的全局哈希值的情况下,可以快速确定出该待渲染资源数据(例如,纹理数据)为该第一云应用客户端在运行该云游戏时首次加载的资源数据,进而可以在首次加载该待渲染资源数据(例如,纹理数据)得到渲染资源(例如,纹理资源)的情况下,输出该第一云应用客户端在运行该云游戏时的渲染图像。进一步的,云服务器可以通过图形处理驱动组件(即上述GPU驱动)将该纹理数据所对应的纹理资源作为全局共享资源,以将该全局共享资源添加至全局共享资源列表中。
这样,与该第一云应用客户端并发运行的其他云应用客户端(例如,上述第二云应用客户端)在运行该云游戏时,就能够通过哈希查找的方式快速获取到全局资源地址标识所映射的全局共享资源,从而可以在同一云服务器中并发运行同一云游戏的多个云游戏客户端之间实现显存资源的共享。
其中,具体的,云服务器可以为该全局共享资源列表中的每个全局共享资源分别配置一个供GPU硬件访问相应显存存储空间的物理地址(例如,上述图4所示的用于存储渲染资源42a的显存存储空间的物理地址可以为物理地址OFFF),这样,在并发运行有多个云应用客户端(即多个云游戏客户端)的情况下,可以在这些云应用客户端分别调用GPU驱动获取到上述资源数据41a(例如,纹理数据)的全局哈希值所映射的资源ID时,进一步基于获取到的资源ID配置得到用于映射全局共享资源的物理地址的虚拟地址空间(比如,在第一云应用客户端和第二云应用客户端均请求二次加载上述图4所示的资源数据41a(例如,纹理数据)时,为第一云应用客户端分配的虚拟地址空间可以为OX1,为第二云应用客户端分配的虚拟地址空间可以为OX2,这里的OX1和OX2均可以用于映射指向同一物理地址,即上述物理地址OFFF),进而可以通过虚拟地址空间所映射的物理地址,快速获取到前述作为全局共享资源的纹理资源,以实现显存资源的共享。
应当理解,在同一云服务器中并发运行同一云游戏的多个云游戏客户端中,可以将首次加载待渲染资源数据(例如,纹理资源)的云游戏客户端统称为目标云应用客户端,这里的目标云应用客户端可以为第一云应用客户端或者第二云应用客户端,这里将不对其进行限定。此外,本申请实施例还可以将目标云应用客户端在首次加载待渲染资源数据(例如,纹理数据)所得到已渲染资源(例如,纹理资源)统称为全局共享资源,这意味着该全局共享资源为云服务器中的目标云应用客户端首次加载待渲染资源数据输出渲染图像时的已渲染资源。
步骤S202,在图形处理驱动组件接收到第一云应用客户端发送的显存配置指令时,基于显存配置指令为待渲染资源数据配置目标显存存储空间;
其中,图形处理驱动组件包括位于用户层的驱动程序和位于内核层的驱动程序;具体的,在图形处理驱动组件接收到第一云应用客户端发送的显存配置指令时,位于用户层的驱动程序可以基于显存配置指令确定第一图形接口,并可以通过第一图形接口创建待渲染资源数据在用户层的第一用户态对象,且在用户层生成用于向位于内核层的驱动程序发送的用户态分配命令;进一步的,在位于内核层的驱动程序接收到位于用户层的驱动程序下发的用户态分配命令时,基于用户态分配命令创建待渲染资源数据在内核层的第一资源对象,且为第一资源对象配置目标显存存储空间。
其中,位于用户层的驱动程序包括第一用户态驱动程序和第二用户态驱动程序;此外,位于内核层的驱动程序包括第一内核态驱动程序和第二内核态驱动程序;可以理解的是,上述用户态分配命令是由位于用户层的驱动程序中的第二用户态驱动程序所发送的。为便于理解,进一步的,请参见图8,图8是本申请实施例提供的一种分配显存存储空间的流程示意图。该流程示意图至少包括以下步骤S301-步骤S308。
步骤S301,在位于用户层的驱动程序中,通过第一用户态驱动程序对显存配置指令进行解析,得到显存配置指令中携带的第一图形接口;
步骤S302,通过第一图形接口创建待渲染资源数据在用户层的第一用户态对象,且通过第一图形接口生成用于向第二用户态驱动程序发送的接口分配指令;
步骤S303,在第二用户态驱动程序接收到接口分配指令时,响应接口分配指令进行接口分配,以得到用于指向内核层的驱动程序的分配接口;
步骤S304,在用户层生成用于向位于内核层的驱动程序发送的用户态分配命令时,通过分配接口向位于内核层的驱动程序发送用户态分配命令。
步骤S305,在位于内核层的驱动程序中,当第一内核态驱动程序接收到位于第二用户态驱动程序下发的用户态分配命令时,基于用户态分配命令添加与第二用户态驱动程序相关的第一输入输出操作类型;
步骤S306,基于第一输入输出操作类型生成用于派发给第二内核态驱动程序的分配驱动接口调用指令;
步骤S307,在第二内核态驱动程序接收到第一内核态驱动程序派发的分配驱动接口调用指令时,通过分配驱动接口调用指令在第二内核态驱动程序中确定驱动接口;
步骤S308,调用驱动接口,创建待渲染资源数据在内核层的第一资源对象,且为第一资源对象配置目标显存存储空间。
可选地,云服务器还可以执行步骤S308时,一并将第一资源对象的资源计数值配置为第一数值。比如,该第一数值可以为数值1,这里的数值1可以用于表征在内核层所创建的第一资源对象目前被第一云应用客户端这一个云应用客户端所占用。应当理解,在首次加载待渲染资源数据时,可以对加载有待渲染资源数据的第一资源对象进行渲染,以得到该待渲染资源数据对应的渲染资源。这里的资源计数值用于描述在将处于共享状态的已渲染资源(即渲染处理后的第一资源对象)作为全局共享资源时,参与进行资源共享的云应用客户端的累计数量。
由此可见,云服务器可以根据图形处理驱动组件(即GPU驱动)中的各个驱动程序之间的调用关系,由上至下的执行步骤S301-步骤S308,以在第一云应用客户端请求加载待渲染资源数据(例如,纹理数据和着色数据)之前,预先在显存中针对该第一云应用客户端中的待渲染资源数据(例如,纹理数据和着色数据)配置相应的显存存储空间,比如,云服务器可以预先为纹理数据分配一个显存存储空间,并可以预先为着色数据分配另一个显存存储空间。为便于理解,本申请实施例可以将为上述待渲染资源数据(例如,纹理数据和着色数据)所配置的显存存储空间统称为目标显存存储空间。
步骤S203,在第一云应用客户端请求加载待渲染资源数据时,通过图形处理驱动组件将待渲染资源数据从云服务器的磁盘传输至云服务器的内存存储空间;
步骤S204,调用图形处理驱动组件确定内存存储空间中的待渲染资源数据的哈希值。
其中,步骤S201-步骤S204的具体实现方式,可以参见上述图3所对应实施例中对步骤S101的描述,这里将不在继续进行赘述。
步骤S205,在用户层的驱动程序将待渲染资源数据的哈希值下发至内核层时,通过位于内核层的驱动程序调用驱动接口,在云应用对应的全局哈希表中,对与待渲染资源数据的哈希值相同的全局哈希值进行查找;
步骤S206,若在全局哈希表中查找到与待渲染资源数据的哈希值相同的全局哈希值,则将查找到的与待渲染资源数据的哈希值相同的全局哈希值作为查找成功结果;
步骤S207,若在全局哈希表中未查找到与待渲染资源数据的哈希值相同的全局哈希值,则将未查找到的与待渲染资源数据的哈希值相同的全局哈希值作为查找失败结果;
步骤S208,将查找成功结果或者查找失败结果,确定为哈希查找结果。
其中,步骤S205-步骤S208的具体实现方式,可以参见上述图3所对应实施例中对步骤S102的描述,这里将不在继续进行赘述。
步骤S209,若哈希查找结果指示在全局哈希表中查找到与待渲染资源数据的哈希值相同的全局哈希值,则获取全局哈希值所映射的全局资源地址标识;
步骤S210,基于全局资源地址标识获取全局共享资源,将全局共享资源映射到云应用对应的渲染进程,得到第一云应用客户端在运行云应用时的渲染图像;全局共享资源为云服务器首次加载待渲染资源数据输出渲染图像时的已渲染资源。
其中,步骤S209-步骤S210的具体实现方式,可以参见上述图3所对应实施例中对步骤S103-步骤S104的描述,这里将不再继续进行赘述。
为便于理解,进一步的,请参见图9,图9是本申请实施例提供的一种用于描述GPU驱动中的各个驱动程序之间的调用关系的调用时序图。其中,如图9所示的云应用客户端可以为并发运行在该云服务器中的多个云应用客户端中的任意一个云应用客户端。该云服务器中的GPU驱动具体可以包含图9所示的位于用户层的第一用户态驱动程序(比如,GPU用户态驱动)和第二用户态驱动程序(比如,DRM用户态驱动)以及位于内核层的第一内核态驱动程序(比如,DRM内核态驱动)和第二内核态驱动程序(比如,GPU内核态驱动)。
其中,为便于理解,这里以在云服务器中共享2D压缩纹理资源为例,以通过下述步骤S31-步骤S72阐述在云服务器中加载待渲染资源数据的具体过程。其中,这里的待渲染资源数据可以为前述2D压缩纹理资源的纹理数据。如图9所示的云应用客户端在执行步骤S31获取待渲染资源数据时,可以将待渲染的2D压缩纹理资源的资源数据(即纹理数据)作为待渲染资源数据,以进一步执行图9所示的步骤S32。
步骤S32,云应用客户端基于第一图形接口向第一用户态驱动程序发送显存分配指令。
步骤S33,第一用户态驱动程序对接收到的显存分配指令进行解析,以解析得到第一图形接口,进而可以通过第一图形接口在用户层创建第一用户态对象。
其中,应当理解,在云应用客户端加载纹理数据前,可以通过GPU驱动调用glTexStorage2D图形接口,创建相应的用户层的BUF(例如,BUFA,该BUFA即为上述第一用户态对象)以及内核层的资源(例如,资源A,该资源A即为上述第一资源对象),这意味着在图形处理驱动组件(即GPU驱动)接收到第一云应用客户端(即图9所示的云应用客户端)发送的显存配置指令时,可以基于显存配置指令为待渲染资源数据配置目标显存存储空间。
其中,可以理解的是,本申请实施例可以将glTexStorage2D图形接口称之为上述第一图形接口。这里的显存分配指令用于指示GPU驱动中的第一用户态驱动程序通过第一图形接口在该用户层创建第一用户态对象(即前述BUFA)。应当理解,GPU驱动为在基于显存配置指令确定第一图形接口时,可以进一步通过第一图形接口创建待渲染资源数据在用户层的第一用户态对象,且可以进一步在用户层生成用于向位于内核层的驱动程序发送的用户态分配命令。
步骤S34,第一用户态驱动程序向第二用户态驱动程序发送接口分配指令。
应当理解,第一用户态驱动程序还可以通过第一图形接口生成用于向第二用户态驱动程序发送的接口分配指令。这里的接口分配指令用于指示第二用户态驱动程序执行步骤S35,以响应该接口分配指令进行接口分配,从而可以得到用于指向图9所示内核层的驱动程序的分配接口。
步骤S36,第二用户态驱动程序通过分配接口向内核层的第一内核态驱动程序发送用户态分配命令。
其中,应当理解,这里的用户态分配命令可以理解为在用户层所生成的用于发送给第一内核态驱动程序的分配命令。
步骤S37,第一内核态驱动程序在获取由第二用户态驱动程序发送的用户态分配命令时,可以进一步根据该用户态分配命令添加相应的输入输出操作类型,以生成用于派发给第二内核态驱动程序的分配驱动接口调用指令。
其中,可以理解的是,第一内核态驱动程序(即DRM内核态驱动)可以根据接收到的用户态分配命令,添加与用户态驱动程序相应的IO操作类型(即可以添加与DRM用户态驱动相关的第一输入输出操作类型),进而可以根据添加的IO操作类型确定IO操作,以将处理流程进一步分派给GPU内核态驱动中的相应接口进行处理,即第一内核态驱动程序可以根据确定的IO操作,将处理流程进一步派发给第二内核态驱动程序。
步骤S38,第二内核态驱动程序在接收到第一内核态驱动程序派发的分配驱动接口调用指令时,可以在第二内核态驱动程序中确定驱动接口(例如,显存分配驱动接口),以调用驱动接口(例如,显存分配驱动接口),创建第一资源对象,并将第一资源对象的资源计数值初始化为第一数值,与此同时,第二内核态驱动程序还可以为第一资源对象配置目标显存存储空间。
步骤S39,第一内核态驱动程序将第一用户态对象(即BUFA)和第一资源对象(即资源A)进行绑定,进而可以将第一用户态对象(即BUFA)和第一资源对象(即资源A)进行绑定的通知消息返回给云应用客户端。
其中,GPU驱动执行图9所示的步骤S32-步骤S39的具体实现方式,可以参见上述图8所对应实施例中的对步骤S301-步骤S308的描述。这里将不再继续进行赘述。
可以理解的是,云应用客户端在接收到第二内核态驱动程序返回的将第一用户态对象(即BUFA)和第一资源对象(即资源A)进行绑定的通知消息时,可以进一步执行图9所示的步骤S40,以向第一用户态驱动程序发送用于加载待渲染资源数据的加载请求。这样,第一用户态驱动程序在接收到该应用客户端发送的加载请求时,可以执行步骤S41,以解析得到第二图形接口,进而可以通过第二图形接口读取该云服务器的内存中所存储的待渲染资源数据,以计算得到该待渲染资源数据的哈希值。
进一步的,如图9所示,第一用户态驱动程序可以执行步骤S42,以根据计算得到的哈希值生成用于发送给第二用户态驱动程序的全局资源地址标识获取指令。这样,当第二用户态驱动程序接收到该全局资源地址标识获取指令,可以进一步执行步骤S43,以通过在内核层生成的全局资源地址标识查找命令将解析得到的哈希值下发至内核层,这里具体指第二用户态驱动程序可以将该全局资源地址标识查找命令下发给内核层的第一内核态驱动程序,以使该第一内核态驱动程序可以进一步执行步骤S44。
步骤S44,第一内核态驱动程序可以根据该全局资源地址标识查找命令,添加与用户态驱动程序相应的IO操作类型(即可以添加与DRM用户态驱动相关的第二输入输出操作类型),以生成用于派发给第二内核态驱动程序的查找驱动接口调用指令。
步骤S45,第二内核态驱动程序在接收到第一内核态驱动程序派发的查找驱动接口调用指令时,可以确定得到第二输入输出操作类型所指示的IO操作,进而可以调用驱动接口(例如,哈希查找驱动接口)在全局哈希表中查找与哈希值相同的全局哈希值。
步骤S46、第二内核态驱动程序可以在查找成功时,向第一用户态驱动程序返回与哈希值相同的全局哈希值对应的全局资源地址标识。
可选地,步骤S47,第二内核态驱动程序还可以在查找失败时,进一步将待渲染资源数据确定为首次加载的资源数据,以加载该首次加载的资源数据,进而可以在得到该待渲染资源数据对应的渲染资源时,进一步创建待渲染资源数据所表征的渲染资源对应的全局资源地址标识(即创建用于定向映射上述2D压缩纹理资源的资源ID)。
步骤S48,第二内核态驱动程序还可以将该待渲染资源数据的哈希值与步骤S47中创建的资源ID进行映射,以将映射后的哈希值写入全局哈希表。
应当理解,当将待渲染资源数据的哈希值写入全局哈希表之后,则表明该待渲染资源数据所对应的渲染资源,当前为处于共享状态的全局共享资源。
进一步的,第二内核态驱动程序可以执行步骤S49,以将具有空值的全局资源地址标识(即此时,用于定向映射全局共享资源的资源ID的ID值为0)返回给第一用户态驱动程序。应当理解,当查找失败时,说明当前待渲染资源数据的hash值不在全局哈希表中,则需要执行加载待渲染资源数据的加载过程,进而可以在得到待渲染资源数据的渲染资源时,将该渲染资源添加到全局资源列表中,然后可以在资源ID列表(即上述全局资源地址标识列表)中,创建用于映射作为全局共享资源的已渲染资源的资源ID,并将该待渲染资源数据的hash值(即待渲染资源数据的哈希值)放入全局哈希表中。同理,当第二内核态驱动程序通过hash值查找到全局资源地址标识(即资源ID)时,则可以向第一用户态驱动程序返回该资源ID。
应当理解,如图9所示,GPU驱动可以在查找成功时,进一步执行下述步骤S50-步骤S63。其中,步骤S50-步骤S63描述的是如何在GPU驱动中通过资源ID获取到全局共享资源,以在实现资源共享的同时,一并降低显存开销。换言之,若GPU驱动中通过哈希查找的方式确定存在用于映射全局共享资源的资源ID,则可以通过该资源ID创建新的BUF(比如,BUFB)和资源(即资源B,注意,这里所创建的资源B用于与后续通过资源ID所获取到的共享资源B’进行映射,这里的共享资源B’存储有已加载纹理资源的纹理数据,已加载纹理资源即为上述全局共享资源),并分配GPU虚拟地址空间进行映射,然后释放之前创建的BUF,资源以及显存存储空间,最终实现对已加载纹理资源的共享。
具体的,步骤S50,第一用户态驱动程序可以在查找成功时,根据全局资源地址标识创建第二用户态对象(比如,BUFB),并可以向第二用户态驱动程序发送用于替换第一资源对象的对象创建替换指令。
进一步的,步骤S51,第二用户态驱动程序可以在接收到第一用户态驱动程序发送的对象创建替换指令时,解析得到全局资源地址标识,以生成用于下发内第一内核态驱动程序的第一资源对象获取命令。
步骤S52,第一内核态驱动程序可以在获取到第一资源对象获取命令时,根据第一资源对象获取命令添加IO操作类型(即添加第三输入输出操作类型),以生成用于派发给第二内核态驱动程序的对象驱动接口调用指令。
步骤S53,第二内核态驱动程序可以在接收到第一内核态驱动程序派发的对象驱动接口调用指令时,根据第三输入输出操作类型所指示的IO操作,调用驱动接口(比如,资源获取驱动接口),以全局资源地址标识获取第一资源对象,且基于全局资源地址标识创建第二资源对象,用第二资源对象替换第一资源对象,且将第二资源对象所映射的全局共享资源的资源计数值进行递增处理。
然后,第二内核态驱动程序可以执行步骤S54,以将第二用户态对象和全局共享资源进行绑定的通知消息返回给第一用户态驱动程序。可以理解的是,由于该全局共享资源与当前新建的第二资源对象具有映射关系,那么,该第二内核态驱动程序将第二用户态对象和全局共享资源进行绑定,就等效于是将第二用户态对象和该全局共享资源具有映射关系的第二资源对象进行绑定。
步骤S55,第一用户态驱动程序可以向第二用户态驱动程序发送用于将分配的虚拟地址空间与第二用户态对象绑定的全局共享资源进行映射的映射指令。
步骤S56,第二用户态驱动程序在接收到该映射指令时,可以根据解析得到的虚拟地址空间,生成用于向第一内核态驱动程序发送的虚拟地址映射命令。
步骤S57,第一内核态驱动程序在接收到第二用户态驱动程序发送的虚拟地址映射命令时,可以根据虚拟地址映射命令添加相应的IO操作类型(即第四输入输出操作类型),以生成用于向第二内核态驱动程序派发的映射驱动接口调用指令。
步骤S58,第二内核态驱动程序可以根据接收到的映射驱动接口调用指令,调用驱动接口(比如,资源映射驱动接口),将虚拟地址空间与全局共享资源进行映射。
其中,步骤S55-步骤S58的具体实现方式,可以参见上述通过资源ID获取全局共享资源的具体过程的描述,这里将不再继续进行赘述。
可选地,为避免显存资源的浪费,第一用户态驱动程序还可以执行步骤S59,以在云应用客户端通过GPU驱动实现资源共享时,进一步向第二用户态驱动程序发送针对第一用户态对象和第一资源对象的对象释放指令。
步骤S60,第二用户态驱动程序还可以在接收到对象释放指令时,解析得到第一用户态对象和第一资源对象,以生成用于向第一内核态驱动程序下发的对象释放命令。
步骤S61,第一内核态驱动程序在接收到对象释放命令时,可以根据该对象释放命令添加相应的IO操作类型(即第五输入输出操作类型),以生成用于派发给第二内核态驱动程序的释放驱动接口调用指令。这样,第二内核态驱动程序在接收到释放驱动接口调用指令时,可以执行步骤S62,以调用驱动接口(比如,对象释放驱动接口),释放第一用户态对象和第一资源对象。应当理解,当GPU驱动中的这些驱动程序协作完成对第一用户态对象和第一资源对象的释放时,该GPU驱动还可以执行步骤S63,以向云应用客户端返回对象释放成功通知消息。
应当理解,在本申请实施例中,在云服务器并发运行有多个云应用客户端的情况下,当某个云应用客户端调用GPU驱动释放自己当前参与进行资源共享的全局共享资源时,可以将全局共享资源的资源计数值进行递减处理(比如,可以将资源计算值进行减1处理)。基于此,当这些云应用客户端中的每个云应用客户端均调用GPU驱动释放自己参与进行资源共享的全局共享资源时,可以根据这些云应用客户端的调用顺序,依次对全局共享资源的资源计数值进行减一处理,进而可以在全局共享资源的资源计数值完全为0时,将资源计数值为0的全局共享资源从全局资源列表中移除,并在全局资源地址标识列表中释放与该全局共享资源具有映射关系的资源ID, 与此同时,也可以将该全局共享资源所对应的资源数据的hash值从全局哈希表中进行移除,以最后完成释放全局共享资源,应当理解,云服务器在显存中释放该全局共享资源时,还可以一并删除该全局共享资源所占用的显存存储空间,以降低显存开销。具体的,请参见图9所对应实施例中的步骤S70-步骤S75。应当理解,云服务器在完成对全局共享资源(例如,上述纹理数据对应的纹理资源)的释放时,一旦云服务器中的某个云应用客户端在下次需要加载该纹理数据时,则可以按照上述首次加载纹理数据的具体过程对该纹理数据进行加载。
步骤S70,云应用客户端可以向第一用户态驱动程序发送资源释放删除指令,所以,当第一用户态驱动程序接收到该资源释放删除指令时,可以执行步骤S71,以解析得到当前的全局共享资源和与当前全局共享资源绑定的用户态对象(例如,上述第二用户态对象)。步骤S72,第二用户态驱动程序在接收到第一内核态驱动程序下发的全局共享资源和与当前全局共享资源绑定的用户态对象(例如,上述第二用户态对象时,可以生成用于下发给第一内核态驱动程序的资源释放命令。进一步的,第一内核态驱动程序在执行步骤S73时,可以根据资源释放命令添加相应的IO操作类型(即第六输入输出操作类型),以生成用于向第二内核态驱动程序下发的释放驱动接口调用指令。然后,第二内核态驱动程序可以在执行步骤S74时,调用驱动接口(资源释放驱动接口),释放当前全局共享资源(例如,上述资源B’)和与当前全局共享资源绑定的用户态对象(例如,上述BUFB),进而可以将该全局共享资源的资源计数值进行递减处理。若资源计数值不为0,则可以直接返回(比如,可以向云应用客户端返回当前递减处理后的资源计算值),即此时仍有其他云应用客户端在对当前全局共享资源进行资源共享。反之,则可以获取全局共享资源的全局哈希值,以在全局哈希表中删除该全局哈希值,再在全局资源列表中对该全局共享资源进行删除,以实现对该全局共享资源的释放。
可选地,可以理解的是,GPU驱动还可以在查找失败时,进一步执行图9所示的步骤S64-步骤S69,以实现在首次加载该待渲染资源数据时的数据传输。比如,如图9所示,第一用户态驱动程序可以在查找失败时,对待渲染资源数据的数据格式进行检测,进而可以在检测到待渲染资源数据的数据格式为上述第一数据格式时,执行步骤S64,以对待渲染资源数据进行格式转换(即可以将待渲染资源数据的数据格式由第一数据格式转换为第二数据格式),得到转换资源数据(这里的转换资源数据为具有第二数据格式的待渲染资源数据)。
可选地,应当理解,第一用户态驱动程序还可以在检测到该渲染资源数据的数据格式为上述第二数据格式时,直接跳转执行步骤S65-步骤S69,以根据GPU驱动中各个驱动程序之间的调用关系,将具有第二数据格式的待渲染资源数据传输至GPU可访问的目标显存存储空间。
步骤S65,第一用户态驱动程序可以向第二用户态驱动程序发送用于将转换资源数据传输至显存的传输指令。这样,第二用户态驱动程序在接收待该传输指令时,可以执行步骤S66,以根据解析得到的转换资源数据,生成用于向第一内核态驱动程序发送的资源数据传输命令。
步骤S67,第一内核态驱动程序在接收到第二用户态驱动程序发送的资源数据传输命令时,可以根据该资源数据传输命令添加相应的IO操作类型(即第七输入输出操作类型),以生成用于向第二内核态驱动程序下发的传输驱动接口调用指令。然后,第二内核态驱动程序可以在执行步骤S68时,调用驱动接口(资源传输驱动接口),将转换资源数据传输至目标显存存储空间。应当理解,当GPU驱动中的这些驱动程序协作完成对转换资源数据的数据传输时,该GPU驱动还可以执行步骤S69,以向云应用客户端返回资源传输成功通知消息。
其中,步骤S64-步骤S69的具体实现方式,可以参见上述图4所对应实施例中对首次加载待渲染资源数据的具体过程的描述,这里将不再继续进行赘述。
应当理解,由于云服务器的显卡对硬件不支持的待渲染资源数据,需做相应的格式转换处理,所以在多个云应用客户端并发运行同一云游戏,且在资源非共享方式下,在游戏过程中加载待渲染资源数据会有过多的性能开销。比如,对于资源数据量为1K的纹理数据而言,每个云应用客户端独立进行加载,则分别需要消耗3ms的纹理加载时长。那么,每个云应用客户端在所需要输出的一帧渲染图像内存在较大资源数据量的纹理数据需要加载时,势必会影响各云应用客户端在运行该云游戏时得到渲染图像的帧率(比如,在游戏过程中,若云服务器中有大量且重复的纹理数据需要进行格式转换,则会出现明显的掉帧甚至卡顿现象),进而影响用户对该云游戏的体验。
基于此,发明人在实践中发现,可以通过资源共享的方式对显存中由某个云应用客户端首次加载了的纹理数据所对应的纹理资源进行资源共享,以将显存中所存储的纹理资源作为上述全局共享资源。这样,对于并发运行的多个云应用客户端而言,一旦需要二次加载该纹理数据,则无需对当前所需要加载的纹理数据进行格式转换以及数据传输,这意味着本申请实施例可以在无需额外占用服务器硬件且无需额外占用传输带宽的情况下,快速获取到作为全局共享资源的纹理资源,这样,对于这些需要二次加载纹理数据的云应用客户端而言,纹理加载时长均为0ms。显然,当将通过资源共享方式所获取到的全局共享资源映射到该云游戏对应的渲染进程时,可以快速输出渲染图像,进而可以从根源上维持游戏帧率的稳定性,以提升用户的云游戏体验。
为便于理解,进一步的,请参见图10,图10是本申请实施例提供的加载待渲染资源数据输出渲染图像的场景示意图。对于如图10所示的终端设备1和终端设备2而言,均可以通过云服务器2a实现显存资源的共享。即终端设备1中的用户客户端在与云应用客户端21a进行数据交互时,可以通过图9所示的图形处理驱动组件23a对待渲染资源数据进行加载。同理,终端设备2中的用户客户端在与云应用客户端22a进行数据交互时,也可以通过图9所示的图形处理驱动组件23a对待渲染资源数据进行加载。如图9所示,在资源共享方式下,应用客户端21a和云应用客户端22a均可以通过图形处理驱动组件23a获取到在显存中处于共享状态的全局共享资源,进而可以将获取到的全局共享资源映射到各自云游戏客户端所对应的渲染进程,以输出各自云游戏客户端在运行云游戏时的渲染图像。这里的渲染图像可以为图9所示的显示在终端设备1和终端设备2中的渲染图像。显示在终端设备1和终端设备2中的渲染图像具有相同画质(例如,720P)。
例如,对于图10所示的云应用客户端21a和云应用客户端22a而言,在非资源共享的情况下,加载1K的纹理数据均需耗时3ms,若在这一帧内存在较多需要加载的资源数据,则势必会对云游戏的游戏帧率(例如,每秒30帧)和体验会有一定的影响。
又比如,对于图9所示的渲染图像而言,若并发运行同一云游戏的游戏终端的并发路数为五路,那么,每路游戏终端所对应的云应用客户端在加载纹理数据时所使用的显存开销都在195M左右,五路将会导致总的显存开销在2.48G左右(注意,这里的总的显存开销不仅会包含加载纹理数据所使用的显存开销,还包括加载其他资源数据所使用的显存开销,例如顶点数据,着色数据等)。因此,发明人在实践中发现,通过资源共享的方式,除了首路终端设备(即首次请求加载待渲染资源数据的云应用客户端所对应的游戏终端)的资源数据加载需占用195M左右的纹理显存,其他4路在资源共享的方式下,再分配的纹理数据的显存占用只有5M(比如,对于图10所示的云应用客户端21a和云应用客户端22a而言,在通过资源共享方式对纹理数据进行加载时,仅消耗5M的纹理显存),即 5路总的显存开销在1.83G左右。相较本技术优化前的方案,可以节省650M左右的显存存储空间。这在存在显存瓶颈的云游戏并发场景下,可以将节省下的显存,用于并发运行新的游戏设备,从而提升云游戏的并发路数。
由此可见,在本申请实施例中,当云服务器中运行的某个云应用客户端(例如,前述第一云应用客户端)通过GPU驱动加载该云应用的某种资源数据(即前述待渲染资源数据,比如,该待渲染资源数据可以为待渲染纹理资源的纹理数据)时,可以通过该待渲染资源数据(即待渲染纹理资源的纹理数据)的哈希值,查找全局哈希表,以在该全局哈希表中判断该哈希值所映射的全局哈希值是否存在,如果存在,则可以间接说明该全局哈希值所映射的全局资源地址标识存在,从而可以进一步利用该全局资源地址标识,快速为该第一云应用客户端获取由该云服务器共享的已渲染资源(即全局共享资源),从而可以在该云服务器中通过资源共享的方式避免资源数据的重复加载。反之,如果在该全局哈希表中判断该哈希值所映射的全局哈希值不存在,则可以间接说明该全局哈希值所映射的全局资源地址标识不存在,进而可以在资源ID不存在的情况下,将该待渲染资源数据作为首次加载的资源数据,以触发执行该待渲染资源数据的加载过程。此外,可以理解的是,该云服务器还可以进一步将获取到的渲染资源映射到该云应用对应的渲染进程,进而可以在无需单独加载且编译待渲染资源数据的情况下,快速且稳定地生成该第一云应用客户端中所运行的云应用的渲染图像。
进一步的,请参见图11,图11是本申请实施例提供的一种数据处理装置的结构示意图。如图11所示,数据处理装置1可以运行在云服务器(例如,上述图1所对应实施例中的云服务器2000)中。其中,数据处理装置1可以包含哈希确定模块11、哈希查找模块12、地址标识获取模块13和共享资源获取模块14;
哈希确定模块11,用于在第一云应用客户端获取到云应用的待渲染资源数据时,确定待渲染资源数据的哈希值;
哈希查找模块12,用于基于待渲染资源数据的哈希值查找云应用对应的全局哈希表,得到哈希查找结果;
地址标识获取模块13,用于若哈希查找结果指示在全局哈希表中查找到与待渲染资源数据的哈希值相同的全局哈希值,则获取全局哈希值所映射的全局资源地址标识;
共享资源获取模块14,用于基于全局资源地址标识获取全局共享资源,将全局共享资源映射到云应用对应的渲染进程,得到第一云应用客户端在运行云应用时的渲染图像;全局共享资源为云服务器首次加载待渲染资源数据输出渲染图像时的已渲染资源。
其中,哈希确定模块11、哈希查找模块12、地址标识获取模块13和共享资源获取模块14的具体实现方式,可以参见上述图3所对应实施例中对步骤S101-步骤S104的描述,这里将不再继续进行赘述。
在一个或者多个实施例中,云服务器包含图形处理驱动组件;
哈希确定模块11包括:资源数据获取单元111,资源数据传输单元112和哈希值确定单元113;
资源数据获取单111,用于在第一云应用客户端运行云应用时,获取云应用的待渲染资源数据;
资源数据传输单元112,用于在第一云应用客户端请求加载待渲染资源数据时,通过图形处理驱动组件将待渲染资源数据从云服务器的磁盘传输至云服务器的内存存储空间;
哈希值确定单元113,用于调用图形处理驱动组件确定内存存储空间中的待渲染资源数据的哈希值。
其中,资源数据获取单元111,资源数据传输单元112和哈希值确定单元113的具体实现方式,可以参见上述图3所对应实施例中对步骤S101的描述,这里将不再继续进行赘述。
在一个或者多个实施例中,云服务器包含图形处理驱动组件,图形处理驱动组件包含位于用户层的驱动程序和位于内核层的驱动程序;待渲染资源数据的哈希值是由第一云应用客户端调用图形处理驱动组件所得到的;用户层的驱动程序用于对存储在云服务器的内存存储空间中的待渲染资源数据进行哈希计算;
哈希查找模块12包括:全局哈希查找单元121,查找成功单元122,查找失败单元123和查找结果确定单元124;
全局哈希查找单元121,用于在用户层的驱动程序将待渲染资源数据的哈希值下发至内核层时,通过位于内核层的驱动程序调用驱动接口,在云应用对应的全局哈希表中,对与待渲染资源数据的哈希值相同的全局哈希值进行查找;
查找成功单元122,用于若在全局哈希表中查找到与待渲染资源数据的哈希值相同的全局哈希值,则将查找到的与待渲染资源数据的哈希值相同的全局哈希值作为查找成功结果;
查找失败单元123,用于若在全局哈希表中未查找到与待渲染资源数据的哈希值相同的全局哈希值,则将未查找到的与待渲染资源数据的哈希值相同的全局哈希值作为查找失败结果;
查找结果确定单元124,用于将查找成功结果或者查找失败结果,确定为哈希查找结果。
其中,全局哈希查找单元121,查找成功单元122,查找失败单元123和查找结果确定单元124的具体实现方式,可以参见上述图3所对应实施例中对步骤S102的描述,这里将不再继续进行赘述。
其中,地址标识获取模块13包括:哈希查找成功单元131,资源加载确定单元132和地址标识获取单元133;
哈希查找成功单元131,用于若哈希查找结果指示在全局哈希表中查找到与待渲染资源数据的哈希值相同的全局哈希值,则确定哈希查找结果为查找成功结果;
资源加载确定单元132,基于查找成功结果确定待渲染资源数据对应的渲染资源已被云服务器中的目标云应用客户端加载;目标云应用客户端为并发运行的多个云应用客户端中的云应用客户端;
地址标识获取单元133,用于在目标云应用客户端已加载待渲染资源数据对应的渲染资源的情况下,获取全局哈希值所映射的全局资源地址标识。
其中,哈希查找成功单元131,资源加载确定单元132和地址标识获取单元133的具体实现方式可以参见上述图3所对应实施例中对步骤S103的描述,这里将不再继续进行赘述。
在一个或者多个实施例中,地址标识获取单元133包括:地址标识确定子单元1331和地址标识返回子单元1332;
地址标识确定子单元1331,用于在目标云应用客户端已加载待渲染资源数据对应的渲染资源的情况下,通过内核层的驱动程序确定存在与待渲染资源数据相关联的全局资源地址标识,且通过内核层的驱动程序在云应用对应的全局资源地址标识列表中获取与待渲染资源数据相关联的全局哈希值所映射的全局资源地址标识;
地址标识返回子单元1332,用于将全局资源地址标识返回给用户层的驱动程序,以使用户层的驱动程序通知第一云应用客户端执行基于全局资源地址标识获取全局共享资源的步骤。
其中,地址标识确定子单元1331和地址标识返回子单元1332的具体实现方式,可以参见上述图3所对应实施例中对获取全局资源地址标识的具体过程的描述,这里将不再继续进行赘述。
可选地,在一个或者多个实施例中,哈希查找模块12还包括:资源未加载单元125和地址标识配置单元126;
资源未加载单元125,用于若哈希查找结果指示在全局哈希表中未查找到与待渲染资源数据的哈希值相同的全局哈希值,则确定哈希查找结果为查找失败结果,基于查找失败结果确定待渲染资源数据对应的渲染资源尚未被多个云应用客户端中任意一个云应用客户端加载;
地址标识配置单元126,用于通过内核层的驱动程序确定不存在与待渲染资源数据相关联的全局资源地址标识,且将待渲染资源数据的哈希值所映射的资源地址标识配置为空值,将空值所对应的资源地址标识返回给用户层的驱动程序,以使用户层的驱动程序通知第一云应用客户端对待渲染资源数据进行加载。
其中,资源未加载单元125和地址标识配置单元126的具体实现方式,可以参见上述图3所对应实施例中对首次加载待渲染资源数据的具体过程的描述,这里将不再继续进行赘述。
可选地,在一个或者多个实施例中,在第一云应用客户端对待渲染资源数据进行加载时,哈希查找模块12还包括:格式转换单元127;
格式转换单元127,用于在检查到待渲染资源数据的数据格式为第一数据格式时,将待渲染资源数据的数据格式由第一数据格式转换为第二数据格式,将具备第二数据格式的待渲染资源数据确定为转换资源数据,通过云服务器中的传输控制组件将转换资源数据由内存存储空间传输至云服务器为待渲染资源数据预分配的显存存储空间。
其中,格式转换单元127的具体实现方式,可以参见上述图3所对应实施例中对数据格式进行转换的具体过程的描述,这里将不再继续进行赘述。
可选地,在一个或者多个实施例中,在第一云应用客户端请求加载待渲染资源数据之前,装置1还包括:目标显存配置模块15;
目标显存配置模块15,用于在图形处理驱动组件接收到第一云应用客户端发送的显存配置指令时,基于显存配置指令为待渲染资源数据配置目标显存存储空间。
其中,目标显存配置模块15的具体实现方式可以参见上述图7所对应实施例中对步骤S201的描述,这里将不再继续进行赘述。
在一个或者多个实施例中,图形处理驱动组件包括位于用户层的驱动程序和位于内核层的驱动程序;
目标显存配置模块15包括:分配命令生成单元151和分配命令接受单元152;
分配命令生成单元151,用于位于用户层的驱动程序基于显存配置指令确定第一图形接口,通过第一图形接口创建待渲染资源数据在用户层的第一用户态对象,且在用户层生成用于向位于内核层的驱动程序发送的用户态分配命令;
分配命令接受单元152,用于在位于内核层的驱动程序接收到位于用户层的驱动程序下发的用户态分配命令时,基于用户态分配命令创建待渲染资源数据在内核层的第一资源对象,且为第一资源对象配置目标显存存储空间。
其中,分配命令生成单元151和分配命令接受单元152的具体实现方式,可以参见上述图7所对应实施例中对配置目标显示存储空间的具体过程的描述,这里将不再继续进行赘述。
在一种或者多种实施例中,位于用户层的驱动程序包括第一用户态驱动程序和第二用户态驱动程序;
分配命令生成单元151包括:图形接口确定子单元1511,用户对象创建子单元1512,接口分配子单元1513和分配命令生成子单元1514;
图形接口确定子单元1511,用于在位于用户层的驱动程序中,通过第一用户态驱动程序对显存配置指令进行解析,得到显存配置指令中携带的第一图形接口;
用户对象创建子单元1512,用于通过第一图形接口创建待渲染资源数据在用户层的第一用户态对象,且通过第一图形接口生成用于向第二用户态驱动程序发送的接口分配指令;
接口分配子单元1513,用于在第二用户态驱动程序接收到接口分配指令时,响应接口分配指令进行接口分配,以得到用于指向内核层的驱动程序的分配接口;
分配命令生成子单元1514,用于在用户层生成用于向位于内核层的驱动程序发送的用户态分配命令时,通过分配接口向位于内核层的驱动程序发送用户态分配命令。
其中,图形接口确定子单元1511,用户对象创建子单元1512,接口分配子单元1513和分配命令生成子单元1514的具体实现方式,可以参见上述图7所对应实施例中在用户层中生成用户态分配命令的具体过程的描述,这里将不再继续进行赘述。
在一个或者多个实施例中,位于内核层的驱动程序包括第一内核态驱动程序和第二内核态驱动程序;用户态分配命令是由位于用户层的驱动程序中的第二用户态驱动程序所发送的;
分配命令接受单元152包括:分配命令接收子单元1521,调用指令生成子单元1522,驱动接口确定子单元1523和显存配置子单元1524;
分配命令接收子单元1521,用于在位于内核层的驱动程序中,当第一内核态驱动程序接收到位于第二用户态驱动程序下发的用户态分配命令时,基于用户态分配命令添加与第二用户态驱动程序相关的第一输入输出操作类型;
调用指令生成子单元1522,用于基于第一输入输出操作类型生成用于派发给第二内核态驱动程序的分配驱动接口调用指令;
驱动接口确定子单元1523,用于在第二内核态驱动程序接收到第一内核态驱动程序派发的分配驱动接口调用指令时,通过分配驱动接口调用指令在第二内核态驱动程序中确定驱动接口;
显存配置子单元1524,用于调用驱动接口,创建待渲染资源数据在内核层的第一资源对象,且为第一资源对象配置目标显存存储空间。
其中,分配命令接收子单元1521,调用指令生成子单元1522,驱动接口确定子单元1523和显存配置子单元1524的具体实现方式,可以参见上述图7所对应实施例中对在内核层配置目标显存存储空间的具体过程的描述,这里将不再继续进行赘述。
可选地,在一个或者多个实施例中,分配命令接受单元152还包括:计数值配置子单元1525;
计数值配置子单元1525,用于在调用驱动接口,创建待渲染资源数据在内核层的第一资源对象时,将第一资源对象的资源计数值配置为第一数值。
其中,计数值配置子单元1525的具体实现方式,可以参见上述图7所对应实施例中对资源计数值的描述,这里将不再继续进行赘述。
在一个或者多个实施例中,云服务器包含图形处理驱动组件;图形处理驱动组件用于在通过第二图形接口加载待渲染资源数据之前,通过第一图形接口创建待渲染资源数据在用户层的第一用户态对象,图形处理驱动组件还用于在内核层创建与第一用户态对象绑定的第一资源对象;
共享资源获取模块14包括:对象资源绑定单元141,资源对象替换单元142和全局资源获取单元143;
对象资源绑定单元141,用于图形处理驱动组件基于全局资源地址标识在用户层创建第二用户态对象,并在内核层创建与第二用户态对象绑定的第二资源对象;
资源对象替换单元142,用于在图形处理驱动组件基于全局资源地址标识获取到第一资源对象时,用第二资源对象替换第一资源对象;
全局资源获取单元143,用于通过图形处理驱动组件在内核层中为第二资源对象配置用于映射全局共享资源的物理地址的虚拟地址空间,通过虚拟地址空间所映射的物理地址获取全局共享资源。
其中,对象资源绑定单元141,资源对象替换单元142和全局资源获取单元143的具体实现方式,可以参见上述图3所对应实施例中对步骤S104的描述,这里将不再继续进行赘述。
可选地,在一个或者多个实施例中,共享资源获取模块14还包括:计数值递增单元144和资源释放单元145;
计数值递增单元144,用于在基于全局资源地址标识获取全局共享资源时,通过图形处理驱动组件将与全局资源地址标识相关联的全局共享资源的资源计数值进行递增处理;
资源释放单元145,用于通过图形处理驱动组件释放在用户层创建的第一用户态对象、在内核层创建的第一资源对象、以及为第一资源对象配置的目标显存存储空间。
其中,计数值递增单元144和资源释放单元145的具体实现方式,可以参见上述图3所对应实施例中对资源释放的具体过程的描述,这里将不再继续进行描述。
在本申请实施例中,数据处理装置1可以集成运行在云服务器中,此时,云服务器中运行的某个云应用客户端(例如,前述第一云应用客户端)需要加载该云应用的某种资源数据(即前述待渲染资源数据)时,可以通过该待渲染资源数据的哈希值,快速对全局哈希表进行查找,以判断该哈希值所映射的全局资源地址标识是否存在,如果存在,则可以进一步利用该全局资源地址标识,快速为该第一云应用客户端获取由该云服务器共享的已渲染资源(即全局共享资源),从而可以在该云服务器中通过资源共享的方式避免资源数据的重复加载。此外,可以理解的是,该云服务器还可以进一步将获取到的渲染资源映射到该云应用对应的渲染进程,进而可以在无需单独加载且编译待渲染资源数据的情况下,快速且稳定地生成该第一云应用客户端中所运行的云应用的渲染图像。
进一步地,请参见图12,图12是本申请实施例提供的一种计算机设备的结构示意图。如图12所示,该计算机设备1000可以为服务器,例如,这里的服务器可以为上述图1所对应实施例中的云服务器2000,还可以为上述图2所对应实施例中的云服务器2a。该计算机设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,该计算机设备1000还可以包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图12所示,作为一种计算机可读存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
其中,该计算机设备1000中的网络接口1004还可以提供网络通讯功能。在图12所示的计算机设备1000中,网络接口1004可提供网络通讯功能;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现:
在第一云应用客户端获取到云应用的待渲染资源数据时,确定待渲染资源数据的哈希值;
基于待渲染资源数据的哈希值查找云应用对应的全局哈希表,得到哈希查找结果;
若哈希查找结果指示在全局哈希表中查找到与待渲染资源数据的哈希值相同的全局哈希值,则获取全局哈希值所映射的全局资源地址标识;
基于全局资源地址标识获取全局共享资源,将全局共享资源映射到云应用对应的渲染进程,得到第一云应用客户端在运行云应用时的渲染图像;全局共享资源为云服务器首次加载待渲染资源数据输出渲染图像时的已渲染资源。
应当理解,本申请实施例中所描述的计算机设备1000可执行前文图3所对应实施例中对数据处理方法的描述,也可执行前文图7所对应实施例中对数据处理装置1的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且计算机可读存储介质中存储有前文提及的数据处理装置1所执行的计算机程序,且计算机程序包括计算机指令,当处理器执行计算机指令时,能够执行前文图3或者图7所对应实施例中对数据处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。作为示例,计算机指令可被部署在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行,分布在多个地点且通过通信网络互连的多个计算设备可以组成区块链系统。
此外,需要说明的是:本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或者计算机程序可以包括计算机指令,该计算机指令可以存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器可以执行该计算机指令,使得该计算机设备执行前文图3或者图7所对应实施例中对数据处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机程序产品或者计算机程序实施例中未披露的技术细节,请参照本申请方法实施例的描述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储器(Read-Only Memory,ROM)或随机存储器(Random Access Memory,RAM)等。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。

Claims (16)

1.一种数据处理方法,其特征在于,所述方法由云服务器执行,所述云服务器包含并发运行的多个云应用客户端,所述多个云应用客户端包括第一云应用客户端;所述方法包括:
在所述第一云应用客户端获取到云应用的待渲染资源数据时,确定所述待渲染资源数据的哈希值;
基于所述待渲染资源数据的哈希值查找所述云应用对应的全局哈希表,得到哈希查找结果;
若所述哈希查找结果指示在所述全局哈希表中查找到与所述待渲染资源数据的哈希值相同的全局哈希值,则获取所述全局哈希值所映射的全局资源地址标识;
基于所述全局资源地址标识获取全局共享资源,将所述全局共享资源映射到所述云应用对应的渲染进程,得到所述第一云应用客户端在运行所述云应用时的渲染图像;所述全局共享资源为所述云服务器首次加载所述待渲染资源数据输出所述渲染图像时的已渲染资源;
其中,所述云服务器包含图形处理驱动组件,所述图形处理驱动组件包含位于用户层的驱动程序和位于内核层的驱动程序;所述待渲染资源数据的哈希值是由所述第一云应用客户端调用所述图形处理驱动组件所得到的;所述用户层的驱动程序用于对存储在所述云服务器的内存存储空间中的所述待渲染资源数据进行哈希计算;
所述基于所述待渲染资源数据的哈希值查找所述云应用对应的全局哈希表,得到哈希查找结果,包括:
在所述用户层的驱动程序将所述待渲染资源数据的哈希值下发至所述内核层时,通过位于所述内核层的驱动程序调用驱动接口,在所述云应用对应的全局哈希表中,对与所述待渲染资源数据的哈希值相同的全局哈希值进行查找;
若在所述全局哈希表中查找到与所述待渲染资源数据的哈希值相同的全局哈希值,则将查找到的与所述待渲染资源数据的哈希值相同的全局哈希值作为查找成功结果;
若在所述全局哈希表中未查找到与所述待渲染资源数据的哈希值相同的全局哈希值,则将未查找到的与所述待渲染资源数据的哈希值相同的全局哈希值作为查找失败结果;
将所述查找成功结果或者所述查找失败结果,确定为所述哈希查找结果。
2.根据权利要求1所述的方法,其特征在于,所述在所述第一云应用客户端获取到云应用的待渲染资源数据时,确定所述待渲染资源数据的哈希值,包括:
在所述第一云应用客户端运行所述云应用时,获取所述云应用的待渲染资源数据;
在所述第一云应用客户端请求加载所述待渲染资源数据时,通过所述图形处理驱动组件将所述待渲染资源数据从所述云服务器的磁盘传输至所述云服务器的内存存储空间;
调用所述图形处理驱动组件确定所述内存存储空间中的所述待渲染资源数据的哈希值。
3.根据权利要求1所述的方法,其特征在于,所述若所述哈希查找结果指示在所述全局哈希表中查找到与所述待渲染资源数据的哈希值相同的全局哈希值,则获取所述全局哈希值所映射的全局资源地址标识,包括:
若所述哈希查找结果指示在所述全局哈希表中查找到与所述待渲染资源数据的哈希值相同的全局哈希值,则确定所述哈希查找结果为所述查找成功结果;
基于所述查找成功结果确定所述待渲染资源数据对应的渲染资源已被所述云服务器中的目标云应用客户端加载;所述目标云应用客户端为并发运行的所述多个云应用客户端中的云应用客户端;
在所述目标云应用客户端已加载所述待渲染资源数据对应的渲染资源的情况下,获取所述全局哈希值所映射的全局资源地址标识。
4.根据权利要求3所述的方法,其特征在于,所述在所述目标云应用客户端已加载所述待渲染资源数据对应的渲染资源的情况下,获取所述全局哈希值所映射的全局资源地址标识,包括:
在所述目标云应用客户端已加载所述待渲染资源数据对应的渲染资源的情况下,通过所述内核层的驱动程序确定存在与所述待渲染资源数据相关联的全局资源地址标识,且通过所述内核层的驱动程序在所述云应用对应的全局资源地址标识列表中获取与所述待渲染资源数据相关联的所述全局哈希值所映射的全局资源地址标识;
将所述全局资源地址标识返回给所述用户层的驱动程序,以使所述用户层的驱动程序通知所述第一云应用客户端执行所述基于所述全局资源地址标识获取全局共享资源的步骤。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若所述哈希查找结果指示在所述全局哈希表中未查找到与所述待渲染资源数据的哈希值相同的全局哈希值,则确定所述哈希查找结果为所述查找失败结果,基于所述查找失败结果确定所述待渲染资源数据对应的渲染资源尚未被所述多个云应用客户端中任意一个云应用客户端加载;
通过所述内核层的驱动程序确定不存在与所述待渲染资源数据相关联的全局资源地址标识,且将所述待渲染资源数据的哈希值所映射的资源地址标识配置为空值,将所述空值所对应的资源地址标识返回给所述用户层的驱动程序,以使所述用户层的驱动程序通知所述第一云应用客户端对所述待渲染资源数据进行加载。
6.根据权利要求5所述的方法,其特征在于,在所述第一云应用客户端对所述待渲染资源数据进行加载时,所述方法还包括:
在检查到所述待渲染资源数据的数据格式为第一数据格式时,将所述待渲染资源数据的数据格式由所述第一数据格式转换为第二数据格式,将具备所述第二数据格式的待渲染资源数据确定为转换资源数据,通过所述云服务器中的传输控制组件将所述转换资源数据由所述内存存储空间传输至所述云服务器为所述待渲染资源数据预分配的显存存储空间。
7.根据权利要求2所述的方法,其特征在于,在所述第一云应用客户端请求加载所述待渲染资源数据之前,所述方法还包括:
在所述图形处理驱动组件接收到所述第一云应用客户端发送的显存配置指令时,基于所述显存配置指令为所述待渲染资源数据配置目标显存存储空间。
8.根据权利要求7所述的方法,其特征在于,所述基于所述显存配置指令为所述待渲染资源数据配置目标显存存储空间,包括:
位于所述用户层的驱动程序基于所述显存配置指令确定第一图形接口,通过所述第一图形接口创建所述待渲染资源数据在所述用户层的第一用户态对象,且在所述用户层生成用于向位于所述内核层的驱动程序发送的用户态分配命令;
在位于所述内核层的驱动程序接收到位于所述用户层的驱动程序下发的所述用户态分配命令时,基于所述用户态分配命令创建所述待渲染资源数据在所述内核层的第一资源对象,且为所述第一资源对象配置所述目标显存存储空间。
9.根据权利要求8所述的方法,其特征在于,所述位于用户层的驱动程序包括第一用户态驱动程序和第二用户态驱动程序;
所述位于所述用户层的驱动程序基于所述显存配置指令确定第一图形接口,通过所述第一图形接口创建所述待渲染资源数据在所述用户层的第一用户态对象,且在所述用户层生成用于向位于所述内核层的驱动程序发送的用户态分配命令,包括:
在位于所述用户层的驱动程序中,通过所述第一用户态驱动程序对所述显存配置指令进行解析,得到所述显存配置指令中携带的第一图形接口;
通过所述第一图形接口创建所述待渲染资源数据在所述用户层的第一用户态对象,且通过所述第一图形接口生成用于向所述第二用户态驱动程序发送的接口分配指令;
在所述第二用户态驱动程序接收到所述接口分配指令时,响应所述接口分配指令进行接口分配,以得到用于指向所述内核层的驱动程序的分配接口;
在所述用户层生成用于向位于所述内核层的驱动程序发送的用户态分配命令时,通过所述分配接口向位于所述内核层的驱动程序发送用户态分配命令。
10.根据权利要求8所述的方法,其特征在于,所述位于内核层的驱动程序包括第一内核态驱动程序和第二内核态驱动程序;所述用户态分配命令是由位于所述用户层的驱动程序中的第二用户态驱动程序所发送的;
所述在位于所述内核层的驱动程序接收到位于所述用户层的驱动程序下发的所述用户态分配命令时,基于所述用户态分配命令创建所述待渲染资源数据在所述内核层的第一资源对象,且为所述第一资源对象配置所述目标显存存储空间,包括:
在位于所述内核层的驱动程序中,当所述第一内核态驱动程序接收到位于所述第二用户态驱动程序下发的所述用户态分配命令时,基于所述用户态分配命令添加与所述第二用户态驱动程序相关的第一输入输出操作类型;
基于所述第一输入输出操作类型生成用于派发给所述第二内核态驱动程序的分配驱动接口调用指令;
在所述第二内核态驱动程序接收到所述第一内核态驱动程序派发的所述分配驱动接口调用指令时,通过所述分配驱动接口调用指令在所述第二内核态驱动程序中确定驱动接口;
调用所述驱动接口,创建所述待渲染资源数据在所述内核层的第一资源对象,且为所述第一资源对象配置所述目标显存存储空间。
11.根据权利要求10所述的方法,其特征在于,所述方法还包括:
在调用所述驱动接口,创建所述待渲染资源数据在所述内核层的第一资源对象时,将所述第一资源对象的资源计数值配置为第一数值。
12.根据权利要求1所述的方法,其特征在于,所述图形处理驱动组件用于在通过第二图形接口加载所述待渲染资源数据之前,通过第一图形接口创建所述待渲染资源数据在用户层的第一用户态对象,所述图形处理驱动组件还用于在内核层创建与所述第一用户态对象绑定的第一资源对象;
所述基于所述全局资源地址标识获取全局共享资源,包括:
所述图形处理驱动组件基于所述全局资源地址标识在所述用户层创建第二用户态对象,并在所述内核层创建与所述第二用户态对象绑定的第二资源对象;
在所述图形处理驱动组件基于所述全局资源地址标识获取到所述第一资源对象时,用所述第二资源对象替换所述第一资源对象;
通过所述图形处理驱动组件在内核层中为所述第二资源对象配置用于映射所述全局共享资源的物理地址的虚拟地址空间,通过所述虚拟地址空间所映射的物理地址获取所述全局共享资源。
13.根据权利要求12所述的方法,其特征在于,所述方法还包括:
在基于所述全局资源地址标识获取全局共享资源时,通过所述图形处理驱动组件将与所述全局资源地址标识相关联的所述全局共享资源的资源计数值进行递增处理;
通过所述图形处理驱动组件释放在所述用户层创建的所述第一用户态对象、在所述内核层创建的所述第一资源对象、以及为所述第一资源对象配置的目标显存存储空间。
14.一种数据处理装置,其特征在于,所述装置运行在云服务器中,所述云服务器包含并发运行的多个云应用客户端,所述多个云应用客户端包括第一云应用客户端;所述装置包括:
哈希确定模块,用于在所述第一云应用客户端获取到云应用的待渲染资源数据时,确定所述待渲染资源数据的哈希值;
哈希查找模块,用于基于所述待渲染资源数据的哈希值查找所述云应用对应的全局哈希表,得到哈希查找结果;
地址标识获取模块,用于若所述哈希查找结果指示在所述全局哈希表中查找到与所述待渲染资源数据的哈希值相同的全局哈希值,则获取所述全局哈希值所映射的全局资源地址标识;
共享资源获取模块,用于基于所述全局资源地址标识获取全局共享资源,将所述全局共享资源映射到所述云应用对应的渲染进程,得到所述第一云应用客户端在运行所述云应用时的渲染图像;所述全局共享资源为所述云服务器首次加载所述待渲染资源数据输出所述渲染图像时的已渲染资源;
其中,所述云服务器包含图形处理驱动组件,所述图形处理驱动组件包含位于用户层的驱动程序和位于内核层的驱动程序;所述待渲染资源数据的哈希值是由所述第一云应用客户端调用所述图形处理驱动组件所得到的;所述用户层的驱动程序用于对存储在所述云服务器的内存存储空间中的所述待渲染资源数据进行哈希计算;
所述哈希查找模块包括:
全局哈希查找单元,用于在所述用户层的驱动程序将所述待渲染资源数据的哈希值下发至所述内核层时,通过位于所述内核层的驱动程序调用驱动接口,在所述云应用对应的全局哈希表中,对与所述待渲染资源数据的哈希值相同的全局哈希值进行查找;
查找成功单元,用于若在所述全局哈希表中查找到与所述待渲染资源数据的哈希值相同的全局哈希值,则将查找到的与所述待渲染资源数据的哈希值相同的全局哈希值作为查找成功结果;
查找失败单元,用于若在所述全局哈希表中未查找到与所述待渲染资源数据的哈希值相同的全局哈希值,则将未查找到的与所述待渲染资源数据的哈希值相同的全局哈希值作为查找失败结果;
查找结果确定单元,用于将所述查找成功结果或者所述查找失败结果,确定为所述哈希查找结果。
15.一种计算机设备,其特征在于,包括存储器和处理器;
所述存储器与所述处理器相连,所述存储器用于存储计算机程序,所述处理器用于调用所述计算机程序,以使得所述计算机设备执行权利要求1-13任一项所述的方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序适于由处理器加载并执行,以使得具有所述处理器的计算机设备执行权利要求1-13任一项所述的方法。
CN202211171432.XA 2022-09-26 2022-09-26 一种数据处理方法、装置、设备以及介质 Active CN115292020B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202211171432.XA CN115292020B (zh) 2022-09-26 2022-09-26 一种数据处理方法、装置、设备以及介质
PCT/CN2023/114656 WO2024066828A1 (zh) 2022-09-26 2023-08-24 一种数据处理方法、装置、设备、计算机可读存储介质及计算机程序产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211171432.XA CN115292020B (zh) 2022-09-26 2022-09-26 一种数据处理方法、装置、设备以及介质

Publications (2)

Publication Number Publication Date
CN115292020A CN115292020A (zh) 2022-11-04
CN115292020B true CN115292020B (zh) 2022-12-20

Family

ID=83833904

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211171432.XA Active CN115292020B (zh) 2022-09-26 2022-09-26 一种数据处理方法、装置、设备以及介质

Country Status (2)

Country Link
CN (1) CN115292020B (zh)
WO (1) WO2024066828A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105765559B (zh) * 2013-09-09 2019-03-05 尤奈特戴克斯公司 交互式案件管理系统
CN115292020B (zh) * 2022-09-26 2022-12-20 腾讯科技(深圳)有限公司 一种数据处理方法、装置、设备以及介质
CN117170883B (zh) * 2023-11-02 2024-01-30 西安芯云半导体技术有限公司 渲染显示的方法、装置、设备及存储介质

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014186858A1 (en) * 2013-05-23 2014-11-27 KABUSHIKI KAISHA SQUARE ENlX HOLDINGS (ALSO TRADING AS SQUARE ENIX HOLDINGS CO., LTD.) Dynamic allocation of rendering resources in a cloud gaming system
JP6310073B2 (ja) * 2013-12-26 2018-04-11 株式会社スクウェア・エニックス・ホールディングス 描画システム、制御方法、及び記憶媒体
CN104765742B (zh) * 2014-01-06 2019-06-18 阿里巴巴集团控股有限公司 一种信息展示的方法及装置
CN104991827A (zh) * 2015-06-26 2015-10-21 季锦诚 云游戏中gpu资源共享的方法
CN105760199B (zh) * 2016-02-23 2019-07-16 腾讯科技(深圳)有限公司 一种应用资源加载方法及其设备
CN111729293B (zh) * 2020-08-28 2020-12-22 腾讯科技(深圳)有限公司 一种数据处理方法、装置及存储介质
CN112929740B (zh) * 2021-01-20 2023-06-27 广州虎牙科技有限公司 一种渲染视频流的方法、装置、存储介质及设备
CN114377394B (zh) * 2022-01-17 2023-05-05 吉林省磨铁互娱手游研发有限公司 一种云游戏画面渲染方法及装置
CN115065684B (zh) * 2022-08-17 2022-12-02 腾讯科技(深圳)有限公司 数据处理方法、装置、设备以及介质
CN115292020B (zh) * 2022-09-26 2022-12-20 腾讯科技(深圳)有限公司 一种数据处理方法、装置、设备以及介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于虚拟化云计算的3D图形渲染系统架构与性能研究;朴钦浩等;《长春师范大学学报》;20190420(第04期);第56-62页 *

Also Published As

Publication number Publication date
WO2024066828A1 (zh) 2024-04-04
CN115292020A (zh) 2022-11-04

Similar Documents

Publication Publication Date Title
CN115292020B (zh) 一种数据处理方法、装置、设备以及介质
EP4122568A1 (en) Data processing method and device and storage medium
CN103270492A (zh) 用于网络使能应用的硬件加速图形
WO2022257699A1 (zh) 图像画面显示方法、装置、设备、存储介质及程序产品
CN103518189A (zh) 流媒体在虚拟化的桌面环境中的集成呈现
WO2022242358A1 (zh) 图像处理方法、装置、计算机设备及存储介质
CN113467958B (zh) 一种数据处理方法、装置、设备以及可读存储介质
CN108449633A (zh) 基于nfv的机顶盒云化框架及业务实现方法
CN113542757A (zh) 云应用的图像传输方法、装置、服务器及存储介质
CN115065684B (zh) 数据处理方法、装置、设备以及介质
CN102196033A (zh) 远程内容分类以及使用多个传输信道的传输
US20230405455A1 (en) Method and apparatus for processing cloud gaming resource data, computer device, and storage medium
CN112698838B (zh) 多云容器部署系统及其容器部署方法
US20230336841A1 (en) System and method for streaming in metaverse space
CN113926185A (zh) 一种数据处理方法、装置、设备及存储介质
US10740273B2 (en) Schema to ensure payload validity for communications on an asynchronous channel based bus
CN113327303B (zh) 图像处理方法、装置、计算机设备及存储介质
CN115437810A (zh) 渲染任务处理方法、装置、设备和介质
CN115396500A (zh) 基于专网的服务平台切换方法、系统及电子设备
Bentele et al. Towards a GPU-Accelerated open source VDI for OpenStack
US20230161603A1 (en) Handling the running of software
CN116048792A (zh) 云渲染方法、装置、设备、存储介质及程序产品
KR20240019966A (ko) 메타버스 상영 시스템
CN116661790A (zh) 跨平台渲染方法、装置以及电子设备
CN116932140A (zh) 基于跨主机资源的数据处理方法及相关产品

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40076045

Country of ref document: HK