公开/公告号CN112967171A
专利类型发明专利
公开/公告日2021-06-15
原文格式PDF
申请/专利权人 深圳市瑞驰信息技术有限公司;
申请/专利号CN202110278706.4
申请日2021-03-15
分类号G06T1/20(20060101);G06T15/00(20110101);
代理机构44384 深圳市中科创为专利代理有限公司;
代理人彭西洋;宋鹏跃
地址 518000 广东省深圳市前海深港合作区前湾一路1号A栋201(入驻深圳市前海商务秘书有限公司)
入库时间 2023-06-19 11:26:00
技术领域
本发明涉及Andriod系统技术领域,具体涉及一种基于ARM架构实现GPU虚拟化的系统及方法。
背景技术
虚拟化在以x86 CPU为基础的系统中已经发展的非常成熟,无论是公有云还是私有云的应用都非常成熟和丰富。而随着以ARM架构CPU为核心的智能手机的发展,无论其CPU性能、GPU性能、还是内存都越来越强大,因此也产生了在ARM架构上做虚拟化业务的需求,同一套硬件可同时运行多套虚拟化Android系统,提高资源利用率,节省成本。
ARM架构下的系统做虚拟化,可以采用和x86架构下相同的模式。x86下通用的虚拟化方式是kvm+qemu,而ARM架构CPU也支持kvm功能,也可以采用kvm+qemu的方式来进行虚拟化,而唯一的不同点就在GPU的虚拟化上。
在x86架构下,GPU一般为Nvida,AMD或Intel的GPU,厂家提供的驱动原生已经支持了GPU虚拟化,方式是将物理GPU划分为更多的vGPU单元,然后分配给不同的虚拟机进行使用。而ARM架构下的GPU通常都是Mali架构的GPU,一是这个GPU是专门应用于Android系统的,从没有考虑过虚拟化的需求,二是这个GPU的驱动是闭源的,厂家只提供二进制的so动态共享库,在这种方式下,做ARM架构的GPU虚拟化会存在如下问题:
(1)、ARM架构的GPU不提供vGPU的方式,需要在驱动上层进行GPU的虚拟化操作;
(2)、ARM架构GPU厂家众多,很多厂家的驱动本身不支持通用linux系统,如ubuntu,而kvm+qemu的虚拟化方案需要运行在此类系统上;
(3)、ARM架构下的GPU驱动都为闭源,只提供动态库,为GPU的调试与再次开发带来困难。
发明内容
本发明正是针对上述问题,本发明提供一种基于ARM架构实现GPU虚拟化的系统及方法。
为实现上述目的,首先本发明提供一种基于ARM架构实现GPU虚拟化的系统,包括:虚拟机配置的第一软件模块,及宿主机配置的第二软件模块;所述第一软件模块包含各类应用程序App,所述第二软件模块具备3D渲染功能,可将第一软件模块中的App进行3D渲染。
较佳地,所述第一软件模块包括:
Kvm+QEMU,用于实现底层系统;
Android Kernel,在上面运行独立的Android Kernel内核,为Android系统提供服务;
Libraries,为Android系统中的共享库,与普通Android系统中的一致;
Android Runtime,为Android的运行时库,与普通Android系统中的一致;
vGPU Library,为虚拟机中模拟GPU的模块,实现一个软GPU的功能,为上层App提供3D渲染服务;
Application Framework,为Android系统框架,与普通Android系统的一致;
App,为在Android虚拟机中运行的各类应用。
较佳地,所述第二软件模块包括:
3D Render模块,3D渲染模块,运行于宿主机上,与虚拟机中的vGPU Library进行通讯,负责3D图形的整体渲染调用;
OpenGL ES Translator模块,运行于宿主机中,接收3D Render的渲染指令,并转换为本机的OpenGL接口;本地因为运行不同的GPU硬件和驱动,可能提供不同的OpenGL版本和接口,OpenGL ES Translator则根据情况进行适配和转换;
GPU Library模块,本机GPU的API接口库,由GPU厂家提供,与内核中的GPU Driver通讯,共同来实现GPU渲染功能;
GPU Driver内核模块,GPU厂家提供的GPU驱动,与GPU Library一同提供GPU功能。
本发明另一目的在于提供一种基于ARM架构实现GPU虚拟化的方法,包括步骤:
(1)App进行窗体等初始化后,如果要在窗体上进行3D图形绘制,先将3D渲染指令发送给vGPU Library;这一步是由Android系统来实现的,对于App来说则是透明的;
(2)vGPU库会与外部宿主机上的3D Render建立高速通道,因为都运行于同一套系统内部,可采用共享内存的传输方式,减少渲染指令及数据在内存中的复制次数;
(3)接下来,3D Render与本机的OpenGL ES Translator模块通讯,将指令再次转发给Translator模块;
(4)OpenGL ES Translator模块根据当前的主机系统和GPU配置,将渲染指令转换为不同的版本和格式要求,再次发送给本机上的物理GPU Library共享库;
(5)由GPU Library与内核中的GPU Driver共同来完成渲染指令的执行;
(6)渲染指令执行完成后,再按照上面的反顺序,将结果返回给App程序,完成一条渲染指令的执行。
采用上述方案,可以在Android系统中实现GPU的虚拟化,不需要GPU厂家的特殊支持,即可在多个Android虚拟系统中共享使用本机的GPU,提高用户的操作体验,充分利用GPU资源,节省成本。同时,这种方式不限于某个具体的GPU型号,通常的ARM架构中的GPU都可以使用上面的方式。
附图说明
图1是本发明系统中第一软件模块的框架图;
图2是本发明系统中第二软件模块的框架图;
图3是本发明虚拟化的方法流出图。
具体实施方式
为了便于本领域的普通技术人员能够理解并实施本发明,下面将结合附图对本发明实施例作进一步说明。
参考图1与图2,本发明提供一种基于ARM架构实现GPU虚拟化的系统,包括:两个部分,一部分是虚拟机中的软件架构,称之为第一软件模块,另一个部分是宿主机中的软件架构,称之为第二软件模块。
其中,所述第一软件模块包括:
Kvm+QEMU,底层系统由KVM+QEMU实现,与x86的虚拟化架构类似;
Android Kernel,在上面运行独立的Android Kernel内核,为Android系统提供服务;
Libraries,为Android系统中的共享库,与普通Android系统中的一致;
Android Runtime,为Android的运行时库,与普通Android系统中的一致;
vGPU Library,为虚拟机中模拟GPU的模块,实现一个软GPU的功能,为上层App提供3D渲染服务;
Application Framework,为Android系统框架,与普通Android系统的一致;
App,为在Android虚拟机中运行的各类应用。
其中,所述第二软件模块包括:
3D Render模块,3D渲染模块,运行于宿主机上,与虚拟机中的vGPU Library进行通讯,负责3D图形的整体渲染调用;
OpenGL ES Translator模块,运行于宿主机中,接收3D Render的渲染指令,并转换为本机的OpenGL接口;本地因为运行不同的GPU硬件和驱动,可能提供不同的OpenGL版本和接口,OpenGL ES Translator则根据情况进行适配和转换;
GPU Library模块,本机GPU的API接口库,由GPU厂家提供,与内核中的GPU Driver通讯,共同来实现GPU渲染功能;
GPU Driver内核模块,GPU厂家提供的GPU驱动,与GPU Library一同提供GPU功能。
参考图3,当虚拟机中的一个App需要进行3D渲染时,流程如下:
(1)、App进行窗体等初始化后,如果要在窗体上进行3D图形绘制,先将3D渲染指令发送给vGPU Library。这一步是由Android系统来实现的,对于App来说则是透明的;
(2)、vGPU库会与外部宿主机上的3D Render建立高速通道,因为都运行于同一套系统内部,可采用共享内存的传输方式,减少渲染指令及数据在内存中的复制次数;
(3)、接下来,3D Render与本机的OpenGL ES Translator模块通讯,将指令再次转发给Translator模块;
(4)、OpenGL ES Translator模块根据当前的主机系统和GPU配置,将渲染指令转换为不同的版本和格式要求,再次发送给本机上的物理GPU Library共享库;
(5)、最后,由GPU Library与内核中的GPU Driver共同来完成渲染指令的执行;
(6)、渲染指令执行完成后,再按照上面的反顺序,将结果返回给App程序,完成一条渲染指令的执行。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
机译: 在基于容器的虚拟化环境中管理和调度GPU内存资源的GPU方法和系统
机译: 在基于容器的虚拟化环境中管理和调度GPU内存资源的GPU方法和系统
机译: 实现GPU虚拟化的方法及相关装置和系统