一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种面向云计算的GPU虚拟化系统和方法与流程

2022-02-22 04:02:05 来源:中国专利 TAG:

一种面向云计算的gpu虚拟化系统和方法
技术领域
1.本发明属于计算机领域,具体涉及一种面向云计算的gpu虚拟化系统和方法。


背景技术:

2.gpu即图形处理器,是相对于cpu提出的处理器概念。随着桌面虚拟技术和云计算技术的发展,gpu虚拟化技术成为了研究的重点。在虚拟机系统中使用gpu的方式主要包括gpu直通和gpu虚拟化。
3.gpu直通模式是最成熟的方案,可以直接将物理gpu分配个某一虚拟机,只有该虚拟机拥有对物理gpu访问的权限,该方式称为独占设备。这种方式保存了虚拟机访问gpu的功能完整性和独立性,因为绕过了虚拟机监视器,所以执行效率很高;缺点就是独占设备使其他虚拟机无法共享使用gpu,失去了复用的功能。
4.gpu虚拟化能够将gpu进行切片,包括在资源维度上切片和在时间维度上切片,并分配给多台虚拟机使用。当前gpu虚拟化技术还存在许多难点,技术实现上也存在多种技术路线。
5.gpu设备构造复杂,gpu硬件研发是各厂家的核心技术,gpu驱动开发也基本上属于闭源状态。因此,针对gpu虚拟化的二次开发一直是技术难点和痛点,在具体实现上也有多种技术路线。


技术实现要素:

6.(一)要解决的技术问题
7.本发明要解决的技术问题是如何提供一种面向云计算的gpu虚拟化系统和方法,以解决针对gpu虚拟化的二次开发的问题。
8.(二)技术方案
9.为了解决上述技术问题,本发明提出一种面向云计算的gpu虚拟化系统,该系统采用xen虚拟化架构,包括三个模块:vcuda客户端、vcuda服务端和vgpu,xen虚拟化架构中包括一个主虚拟机和若干个客户虚拟机;
10.主虚拟机运行在xen中的特权域,安装vcuda服务端以及gpu原生驱动;vcuda服务端包括原生cuda库和远程调用模块,其中原生cuda库能够通过原生驱动使用物理gpu,远程调用模块是主虚拟机与客户虚拟机进行通信的特殊通道;主虚拟机是唯一可以直接访问到物理gpu的虚拟机;
11.客户虚拟机运行在xen中的非特权域,客户虚拟机是供用户使用的虚拟机,安装cuda应用程序、vcuda客户端和vgpu;vcuda客户端包括vcuda库和远程调用模块;远程调用模块用于与主虚拟机通信,vcuda库是面向gpu虚拟化定制的伪库,通过重定向库函数,将cuda应用的请求转发到vcuda服务端执行;客户虚拟机无法直接访问物理gpu,必须通过主虚拟机来使用gpu;vgpu用来维护与gpu相关的软硬件状态。
12.进一步地,所述特权域为domain 0,所述非特权域为domain u。
13.进一步地,vgpu是客户虚拟机中维护的一个字典数据结构,其中存储了当前使用物理gpu的地址空间、内存对象和纹理结构,同时记录了cuda库的调用次序。
14.进一步地,当主虚拟机的计算结果返回时,vcuda客户端会根据结果及时更新vgpu。
15.进一步地,vcuda客户端中的vcuda库改写了原生cuda库的接口代码,使得来自cuda应用程序的调用请求会被vcuda库捕获。
16.进一步地,vcuda客户端还对cuda调用的接口和参数重新进行封装、编码,编写成可在远程调用模块中传递的数据格式,传递到vcuda服务端。
17.进一步地,所述vcuda服务端通过远程调用接口接收来自vcuda客户端的数据,并解析出调用和参数;分配给服务端的来自不同客户端的不同应用的作业将经统一格式编码后按照用户请求的先后的顺序分发给gpu,并等待资源分配和执行。
18.进一步地,vcuda服务端将作业结果编码,通过远程调用接口返回给vcuda客户端,vcuda客户端还对vcuda服务端返回的数据进行解码,将作业结果返回给cuda应用程序。
19.进一步地,所述vcuda服务端得到了计算结果之后,将状态同步请求和gpu状态信息发送给vcuda客户端,vcuda客户端完成vgpu状态同步后返回成功确认信号;然后vcuda服务端才能将计算结果发送给vcuda客户端。
20.本发明还提供一种面向云计算的gpu虚拟化方法,该方法包括如下步骤:
21.s1、vcuda客户端拦截客户虚拟机中cuda应用程序发送的cuda调用请求;
22.s2、vcuda客户端对cuda调用请求进行编码,将编码后的请求通过远程调用模块发送到安装在主虚拟机中的vcuda服务端的远程调用模块;vcuda服务端的远程调用模块接收来自vcuda客户端的信息,进行解码后获取cuda调用请求;
23.s3、vcuda服务端利用原生cuda库生成计算作业,通过原生驱动将计算作业发送到物理gpu完成计算作业;
24.s4、物理gpu将计算结果返回给vcuda服务端;
25.s5、vcuda服务端通过远程调用模块将gpu状态更新和运行结果返回给vcuda客户端,vcuda服务端先将编码后的状态同步请求和gpu状态信息发送给vcuda客户端,vcuda客户端解码并完成vgpu状态同步后返回成功确认信号,然后vcuda服务端才能将编码后的计算结果发送给vcuda客户端;
26.s6、vcuda客户端将解码后的计算结果返还给cuda应用程序。
27.(三)有益效果
28.本发明提出一种面向云计算的gpu虚拟化系统和方法,本发明设计vcuda在云计算平台虚拟机上的实现方式,满足不同用户对gpu资源的复用,在虚拟机上实现通用并行计算。本发明通过用户层拦截和重定向cuda api,不改变虚拟机和gpu自身内核,对原装软件和硬件无侵入。对于客户虚拟机上部署的cuda应用程序而言,所有的操作都像发生在本地。可使云计算平台成为一个虚拟化gpu资源可用复用、可进行并行计算任务分发、调度可行有效率的计算平台。
附图说明
29.图1为本发明gpu虚拟化原理图;
30.图2为本发明vcuda客户端工作流程图;
31.图3为本发明vcuda服务端工作流程图。
具体实施方式
32.为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
33.本发明在单机环境下英伟达gpu的cuda解决方案基础上,提出适用于多虚拟机使用的gpu虚拟化解决方案。为了使gpu虚拟化具备通用并行计算的应用功能,将cuda改造成为适用于多虚拟机系统的vcuda(virtual cuda)。通过vcuda多模块设计解决多虚拟机间资源通信和调度、在用户层拦截和重定向cuda api、使用远程过程调用作为特殊的域间通信机制等方式,实现本发明gpu虚拟化技术。
34.本发明gpu虚拟化系统采用xen虚拟化架构,包括三个模块:vcuda客户端、vcuda服务端和vgpu,如图1所示。xen虚拟化架构中包括一个主虚拟机和若干个客户虚拟机。
35.主虚拟机运行在xen中的特权域(domain 0),安装vcuda服务端以及gpu原生驱动。vcuda服务端包括原生cuda库和远程调用模块,其中原生cuda库能够通过原生驱动使用物理gpu,远程调用模块是主虚拟机与客户虚拟机进行通信的特殊通道。主虚拟机是唯一可以直接访问到物理gpu的虚拟机。
36.其它的虚拟机为客户虚拟机,运行在xen中的非特权域(domain u)。客户虚拟机是供用户使用的虚拟机,安装cuda应用程序、vcuda客户端和vgpu。vcuda客户端包括vcuda库和远程调用模块。远程调用模块用于与主虚拟机通信,vcuda库是面向gpu虚拟化定制的伪库,它通过重定向库函数,将cuda应用的请求转发到vcuda服务端执行。因此客户虚拟机无法直接访问物理gpu,必须通过主虚拟机来使用gpu。
37.客户虚拟机无法直接访问物理gpu,因此客户虚拟机设置了vgpu用来维护与gpu相关的软硬件状态。vgpu实质上是客户虚拟机中维护的一个字典数据结构,在其中存储了当前使用物理gpu的地址空间、内存对象、纹理结构等,同时记录了cuda库的调用次序。当主虚拟机的计算结果返回时,vcuda客户端会根据结果及时更新vgpu。
38.本发明gpu虚拟化核心是通过vcuda客户端和vcuda服务端交互实现的,整体工作流程主要分为以下几步:
39.s1、vcuda客户端拦截客户虚拟机中cuda应用程序发送的cuda调用请求;
40.s2、vcuda客户端对cuda调用请求进行编码,将编码后的请求通过远程调用模块发送到安装在主虚拟机中的vcuda服务端的远程调用模块;vcuda服务端的远程调用模块接收来自vcuda客户端的信息,进行解码后获取cuda调用请求。
41.s3、vcuda服务端利用原生cuda库生成计算作业,通过原生驱动将计算作业发送到物理gpu完成计算作业;
42.s4、物理gpu将计算结果返回给vcuda服务端;
43.s5、vcuda服务端通过远程调用模块将gpu状态更新和运行结果返回给vcuda客户端。vcuda服务端先将编码后的状态同步请求和gpu状态信息发送给vcuda客户端,vcuda客户端解码并完成vgpu状态同步后返回成功确认信号,然后vcuda服务端才能将编码后的计算结果发送给vcuda客户端;
44.s6、vcuda客户端将解码后的计算结果返还给cuda应用程序。
45.对于vcuda客户端和vcuda服务端,它们工作的具体流程如下:
46.vcuda客户端位于客户虚拟机应用层,主要功能是将来自客户虚拟机内的cuda计算请求截获并转化为对vcuda服务端(位于主虚拟机)中对应功能的远程调用。vcuda客户端的工作流程如图2所示,包括以下四步:
47.(1)cuda应用程序调用捕获:vcuda客户端中的vcuda库是原生cuda库的伪库,其改写了原生cuda库的接口代码,使得来自cuda应用程序的调用请求会被vcuda库捕获。
48.(2)状态封装:对cuda调用的接口和参数重新进行封装、编码,将它们编写成可在远程调用模块中传递的数据格式,传递到vcuda服务端,保证cuda内部运行环境的完整性和一致性。
49.(3)远程调用:是vcuda客户端与vcuda服务端通信的接口。封装后的信息通过远程调用模块发送到vcuda服务端;来自vcuda服务端的计算结果同样通过远程调用模块返回到vcuda客户端。
50.(4)本地返回:远程过程调用完成后,vcuda客户端对vcuda服务端返回的数据进行解码,将作业结果返回给cuda应用程序。
51.vcuda服务端位于主虚拟机中的应用层。主虚拟机可以直接与硬件交互,因此服务端可以直接操纵物理gpu来完成通用计算作业。vcuda服务端的工作流程如图3所示,包括以下四步:
52.(1)参数本地化:通过远程调用接口接收来自vcuda客户端的数据,并解析出调用和参数。分配给服务端的作业可能来自不同客户端的不同应用,这些作业将经统一格式编码后按照用户请求的先后的顺序分发给gpu,并等待资源分配和执行。
53.(2)代理执行:vcuda服务端使用物理gpu完成计算作业,该过程中,vcuda服务端是计算作业的代理角色,物理gpu是直接执行角色。
54.(3)状态更新:vcuda服务端得到了计算结果之后,不能马上将计算结果返回给vcuda客户端。因为计算作业后vcuda服务端的gpu内存上下文、cuda核函数、cuda纹理等状态信息发生变化,可能导致与客户虚拟机的vgpu状态不一致,必须进行状态同步更新处理。vcuda服务端将状态同步请求和gpu状态信息发送给vcuda客户端,vcuda客户端完成vgpu状态同步后返回成功确认信号。该握手信号可通过虚拟串口或其他虚拟端口发送,握手完成后,vcuda服务端才能将计算结果发送给vcuda客户端。
55.(4)远程调用返回:vcuda服务端将作业结果编码,通过远程调用接口返回给vcuda客户端。
56.以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献