一种图形处理器的虚拟化方法、装置、电子设备及介质与流程

文档序号:33631197发布日期:2023-03-28 23:00阅读:26来源:国知局
一种图形处理器的虚拟化方法、装置、电子设备及介质与流程

1.本发明实施例涉及计算机技术领域,尤其涉一种图形处理器的虚拟化方法、装置、电子设备及介质。


背景技术:

2.图形处理器(graphics processing unit,gpu),是相对于中央处理器(central processing unit,cpu)提出的处理器概念。随着桌面虚拟技术和云计算技术的发展,gpu虚拟化技术成为了研究重点。
3.当前工业界的gpu虚拟化技术大多基于统一计算设备架构(compute unified device architecture,cuda)应用程序接口(application programming interface,api)截获实现。但是,上述方案存在如下问题:
4.一是需要指定cuda的版本,但cuda的版本变动频繁,这对用户十分不友好;二是与物理gpu相比,在性能方面有不少损失。


技术实现要素:

5.本发明实施例提供一种图形处理器的虚拟化方法、装置、电子设备及介质,解决了对用户不友好以及性能有损失的问题。
6.根据本发明的一方面,提供了一种图形处理器的虚拟化方法,该方法应用于与虚拟图形处理器适配的虚拟图形处理器内核驱动,该方法可以包括:
7.拦截经由用户驱动发送的与物理图形处理器相关的系统调用请求,其中,物理图形处理器与虚拟图形处理器对应;
8.确定系统调用请求的请求内容,并在根据请求内容确定需将系统调用请求转发给原生图形处理器内核驱动的情况下,将系统调用请求转发给原生图形处理器内核驱动,其中,原生图形处理器内核驱动与物理图形处理器适配;
9.拦截原生图形处理器内核驱动针对系统调用请求返回的响应结果,并将响应结果返回给用户驱动。
10.根据本发明的另一方面,提供了一种图形处理器的虚拟化装置,配置于与虚拟图形处理器适配的虚拟图形处理器内核驱动,该装置可以包括:
11.系统调用请求拦截模块,用于拦截经由用户驱动发送的与物理图形处理器相关的系统调用请求,物理图形处理器与虚拟图形处理器对应;
12.系统调用请求转发模块,用于确定系统调用请求的请求内容,在根据请求内容确定需将系统调用请求转发给原生图形处理器内核驱动的情况下,将系统调用请求转发给原生图形处理器内核驱动,其中,原生图形处理器内核驱动与物理图形处理器适配;
13.响应结果返回模块,用于拦截原生图形处理器内核驱动针对系统调用请求返回的响应结果,并将响应结果返回给用户驱动。
14.根据本发明的另一方面,提供了一种电子设备,可以包括:
15.至少一个处理器;以及
16.与至少一个处理器通信连接的存储器;其中,
17.存储器存储有可被至少一个处理器执行的计算机程序,计算机程序被至少一个处理器执行,以使至少一个处理器执行时实现本发明任意实施例所提供的图形处理器的虚拟化方法。
18.根据本发明的另一方面,提供了一种计算机可读存储介质,其上存储有计算机指令,该计算机指令用于使处理器执行时实现本发明任意实施例所提供的图形处理器的虚拟化方法。
19.本发明实施例的技术方案,vgpu内核驱动通过拦截经由用户驱动发送的与物理gpu相关的系统调用请求,其中,物理gpu与vgpu对应,vgpu与vgpu内核驱动适配;确定系统调用请求的请求内容,并在根据请求内容确定需将系统调用请求转发给原生gpu内核驱动的情况下,将系统调用请求转发给原生gpu内核驱动,其中,原生gpu内核驱动与物理gpu适配;拦截原生gpu内核驱动针对系统调用请求返回的响应结果,然后将响应结果返回给用户驱动。上述技术方案,是一种基于内核态的gpu虚拟化方案,其在实现gpu虚拟化的过程中,无需指定任何版本,对用户较友好;而且vgpu内核驱动只负责转发系统调用请求,无需进行过多操作,因此不会影响到物理gpu的处理速度,即相对物理gpu无性能上的损失。
20.应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或是重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。
附图说明
21.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
22.图1是根据本发明实施例提供的一种图形处理器的虚拟化方法的流程图;
23.图2是根据本发明实施例提供的另一种图形处理器的虚拟化方法的流程图;
24.图3是根据本发明实施例提供的另一种图形处理器的虚拟化方法的流程图;
25.图4是根据本发明实施例提供的另一种图形处理器的虚拟化方法的流程图;
26.图5a是根据本发明实施例提供的另一种图形处理器的虚拟化方法中的可选示例的第一的示意图;
27.图5b是根据本发明实施例提供的另一种图形处理器的虚拟化方法中可选示例的第二的示意图;
28.图5c是根据本发明实施例提供的另一种图形处理器的虚拟化方法中的可选示例的第三的示意图;
29.图6是根据本发明实施例提供的一种图形处理器的虚拟化装置的结构框图;
30.图7是实现本发明实施例中的图形处理器的虚拟化方法的电子设备的结构示意图。
具体实施方式
31.为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
32.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。“目标”、“原始”等的情况类似,在此不再赘述。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
33.在介绍本发明实施例之前,先对本发明实施例的应用场景进行示例性说明:通过将一块物理gpu切分成至少两块虚拟gpu(virtual gpu,vgpu)使用,与该至少两块vgpu中的每块vgpu分别适配的虚拟图形处理器内核驱动(即vgpu内核驱动)可以相同或是不同,在此未做具体限定。在此基础上,站在该至少两块vgpu中的任意一块vgpu的角度,基于与该vgpu适配的vgpu内核驱动执行下述实施例中的各个步骤,由此实现了gpu虚拟化。
34.图1是本发明实施例中所提供的一种图形处理器的虚拟化方法的流程图。本实施例可适用于gpu虚拟化的情况,尤其是适用于通过vgpu内核驱动转发与物理gpu相关的系统调用请求来实现gpu虚拟化的情况。该方法可以由本发明实施例所提供的图形处理器的虚拟化装置来执行,该装置可以由软件和/或硬件的方式实现,该装置可以配置于vgpu内核驱动,该vgpu内核驱动可以集成在电子设备上。
35.参见图1,本发明实施例的方法具体包括如下步骤:
36.s110、拦截经由用户驱动发送的与物理图形处理器相关的系统调用请求,其中,物理图形处理器与虚拟图形处理器对应。
37.其中,用户驱动也可称为用户态驱动,其可以是与用户态应用对应的驱动。在实际应用中,可选的,用户驱动可以是cuda用户驱动。系统调用请求可以理解为与物理gpu相关的调用请求,例如可以包括用于调用物理gpu相关的资源的请求。物理gpu与vgpu对应,即如上文所述,vgpu可以理解为通过切分物理gpu得到。
38.拦截经由用户驱动发送的系统调用请求,即用户驱动发送的系统调用请求不会直接给到原生gpu内核驱动,而是先被vgpu内核驱动拦截住,该原生gpu内核驱动可以理解为与物理gpu适配的内核驱动,即官方内核驱动。
39.s120、确定系统调用请求的请求内容,并在根据请求内容确定需将系统调用请求转发给原生图形处理器内核驱动的情况下,将系统调用请求转发给原生图形处理器内核驱动,其中,原生图形处理器内核驱动与物理图形处理器适配。
40.其中,请求内容可以理解为系统调用请求所请求的具体内容,例如与显示内存(即显存,显示卡专用内存)有关的内容,示例性的,查询显示内存或是申请显示内存等;再如与多媒体数据有关的内容,示例性的,展示多媒体数据或是处理多媒体数据等;等等,在此未
做具体限定。
41.在实际应用中,有些系统调用请求需要转发给原生gpu内核驱动进行处理,而有些系统调用请求无需转发给原生gpu内核驱动进行处理,因此在得到系统调用请求的请求内容之后,可以先根据请求内容确定是否需要将系统调用请求转发给原生gpu内核驱动进行处理。
42.在否的情况下,可以直接由vgpu内核驱动处理系统调用请求,并且在是的情况下,可以将系统调用请求转发给原生gpu内核驱动,从而通过原生gpu内核驱动处理系统调用请求。
43.s130、拦截原生图形处理器内核驱动针对系统调用请求返回的响应结果,并将响应结果返回给用户驱动。
44.其中,原生gpu内核驱动在处理系统调用请求后,可以将由此得到的响应结果进行返回。至此,vgpu内核驱动可以拦截原生gpu内核驱动返回的响应结果,并将该响应结果返回给用户驱动,从而完成vgpu本次的使用过程。
45.本发明实施例的技术方案,vgpu内核驱动通过拦截经由用户驱动发送的与物理gpu相关的系统调用请求,其中,物理gpu与vgpu对应,vgpu与vgpu内核驱动适配;确定系统调用请求的请求内容,并在根据请求内容确定需将系统调用请求转发给原生gpu内核驱动的情况下,将系统调用请求转发给原生gpu内核驱动,其中,原生gpu内核驱动与物理gpu适配;拦截原生gpu内核驱动针对系统调用请求返回的响应结果,然后将响应结果返回给用户驱动。上述技术方案,是一种基于内核态的gpu虚拟化方案,其在实现gpu虚拟化的过程中,无需指定任何版本,对用户较友好;而且vgpu内核驱动只负责转发系统调用请求,无需进行过多操作,因此不会影响到物理gpu的处理速度,即相对物理gpu无性能上的损失。
46.在此基础上,一种可选的技术方案,上述的图形处理器的虚拟化方法,还包括:
47.在创建虚拟图形处理器的情况下,记录与虚拟图形处理器对应的物理图形处理器所对应的文件操作接口;
48.将系统调用请求转发给原生图形处理器内核驱动,包括:
49.将系统调用请求转发给原生图形处理器内核驱动的文件操作接口;
50.拦截原生图形处理器内核驱动针对系统调用请求返回的响应结果,包括:
51.拦截原生图形处理器内核驱动通过文件操作接口返回的针对系统调用请求的响应结果。
52.也就是说,在创建vgpu时,可以同步记录vgpu绑定的物理gpu所对应的文件操作(file_operations)接口,例如可以是open接口、poll接口、mmap接口、unlock_ioctl接口、compat_ioctl接口以及release接口等,这些文件操作接口均是标准接口,各种驱动均是通过这些标准接口进行对接。在此基础上,针对在创建vgpu时记录的其对应的物理gpu所对应的文件操作接口,vgpu内核驱动可以将系统调用请求通过该文件操作接口转发给原生gpu内核驱动,并在原生gpu内核驱动处理系统调用请求之后,将原生gpu内核驱动通过该文件操作接口返回的响应结果进行拦截,实现了系统调用请求的响应过程。
53.图2是本发明实施例中提供的另一种图形处理器的虚拟化方法的流程图。本实施例以上述各技术方案为基础进行优化。在本实施例中,可选的,请求内容包括查询显示内存,响应结果包括总显示内存和剩余显示内存;在拦截原生图形处理器内核驱动针对系统
调用请求返回的响应结果之后,上述图形处理器的虚拟化方法,还包括:获取预先针对虚拟图形处理器配置的显示内存上限,以及获取虚拟图形处理器的已用显示内存;将显示内存上限更新为总显示内存;对显示内存上限和已用显示内存进行处理,得到处理显示内存,并将处理显示内存更新为剩余显示内存;将响应结果返回给用户驱动,包括:将总显示内存和剩余显示内存,返回给用户驱动。其中,与上述各实施例相同或相应的术语的解释在此不再赘述。
54.参见图2,本实施例的方法具体可以包括如下步骤:
55.s210、拦截经由用户驱动发送的与物理图形处理器相关的系统调用请求,其中,物理图形处理器与虚拟图形处理器对应。
56.s220、确定系统调用请求的请求内容,并在根据请求内容确定需将系统调用请求转发给原生图形处理器内核驱动的情况下,将系统调用请求转发给原生图形处理器内核驱动,其中,原生图形处理器内核驱动与物理图形处理器适配。
57.s230、拦截原生图形处理器内核驱动针对系统调用请求返回的响应结果。
58.s240、在请求内容包括查询显示内存,且响应结果包括总显示内存和剩余显示内存的情况下,获取预先针对虚拟图形处理器配置的显示内存上限,以及,获取虚拟图形处理器的已用显示内存。
59.其中,请求内容为查询显示内存的系统调用请求用于查询用户态应用当前应用的vgpu的显示内存。原生gpu内核驱动在处理该系统调用请求后返回的总显示内存(total memory)和剩余显示内存(free memory)是针对物理gpu而言,并非针对用户态应用当前应用的vgpu而言,因此vgpu内核驱动可以对返回的总显示内存和剩余显示内存进行处理,以得到与用户态应用当前应用的vgpu匹配的总显示内存和剩余显示内存。
60.具体的,获取预先针对vgpu配置的显示内存上限(used define memory limit),以及,获取vgpu的已用显示内存(used memory)。
61.s250、将显示内存上限更新为总显示内存,以及,对显示内存上限和已用显示内存进行处理,得到处理显示内存,将处理显示内存更新为剩余显示内存。
62.其中,将显示内存上限更新为总显示内存,即total memory=used define memory limit;以及,对显示内存上限和已用显示内存进行处理,得到处理显示内存,并将处理显示内存更新为剩余显示内存,示例性的,可以将显示内存上限与已用显示内存之间的差值,作为处理显示内存,即free memory=used define memory limit

used memory。
63.s260、将总显示内存和剩余显示内存,返回给用户驱动。
64.其中,将更新后(即与用户态应用当前应用的vgpu匹配)总显示内存和剩余显示内存,返回给用户驱动。
65.本发明实施例的技术方案,在请求内容包括查询显示内存,并且响应结果包括总显示内存和剩余显示内存的情况下,vgpu内核驱动通过获取预先针对vgpu配置的显示内存上限以及vgpu的已用显示内存,然后将显示内存上限更新为总显示内存,并且对显示内存上限和已用显示内存进行处理,将得到的处理显示内存更新为剩余显示内存,并将更新后的总显示内存和剩余显示内存返回给用户驱动,由此实现了用户态应用当前应用的vgpu的显示内存的正确查询,即支持不同vgpu的显示内存的分别查询。
66.图3是本发明实施例中提供的另一种图形处理器的虚拟化方法的流程图。本实施
例以上述各技术方案为基础进行优化。本实施例中,可选的,根据请求内容确定需将系统调用请求转发给原生图形处理器内核驱动的情况下,将系统调用请求转发给原生图形处理器内核驱动,包括:在请求内容包括申请显示内存的情况下,获取系统调用请求所表征的需申请显示内存;获取预先针对虚拟图形处理器配置的显示内存上限,以及,已分配给虚拟图形处理器的已分配显示内存;在根据需申请显示内存、显示内存上限和已分配显示内存,确定需将系统调用请求转发给原生图形处理器内核驱动的情况下,将系统调用请求转发给原生图形处理器内核驱动。其中,与上述各实施例相同或相应的术语的解释在此不再赘述。
67.参见图3,本实施例的方法具体可以包括如下步骤:
68.s310、拦截经由用户驱动发送的与物理图形处理器相关的系统调用请求,其中,物理图形处理器与虚拟图形处理器对应。
69.s320、确定系统调用请求的请求内容,并在请求内容包括申请显示内存的情况下,获取系统调用请求所表征的需申请显示内存。
70.其中,请求内容为申请显示内存的系统调用请求,用于为用户态应用当前应用的vgpu申请显示内存。需申请显示内存(request memory)可以理解为系统调用请求所请求申请的显示内存的具体数值。
71.s330、获取预先针对虚拟图形处理器配置的显示内存上限,以及,已分配给虚拟图形处理器的已分配显示内存。
72.其中,显示内存上限(used define memory limit)可以理解为预先针对vgpu配置的最多可分配给该vgpu的显示内存的具体数值。在实际应用中,可选的,显示内存上限可通过用户驱动对目标目录中的文件执行读写操作进行配置,即该目标目录被预先暴露给用户态,用户可以通过对目标目录中的文件读写来对vgpu的配置进行设置,例如可以是显存资源的分配以及获取vgpu任务的状态。在此基础上,可选的,上述目标目录可以包括procfs目录。当然,在未存在目标目录的情况下,可以直接将vgpu的显存份额(即显示内存上限)写定,例如3090 24gb的显存用于划分成3份,每份8gb。
73.已分配显示内存(allocated memory)可以理解为当前已分配给该vgpu的显示内存的具体数值。
74.s340、在根据需申请显示内存、显示内存上限和已分配显示内存,确定需将系统调用请求转发给原生图形处理器内核驱动的情况下,将系统调用请求转发给原生图形处理器内核驱动,其中,原生图形处理器内核驱动与物理图形处理器适配。
75.其中,可以根据需申请显示内存、显示内存上限和已分配显示内存,确定是否需将系统调用请求转发给原生gpu内核驱动,例如在根据显示内存上限和已分配显示内存确定可为用户态应用当前应用的vgpu分配需申请显示内存的情况下,确定需要将系统调用请求转发给原生gpu内核驱动,从而通过原生gpu内核驱动为用户态应用当前应用的vgpu分配需申请显示内存;否则无需将系统调用请求转发给原生gpu内核驱动,可直接拒绝系统调用请求。
76.s350、拦截原生图形处理器内核驱动针对系统调用请求返回的响应结果,并将响应结果返回给用户驱动。
77.本发明实施例的技术方案,在请求内容包括申请显示内存的情况下,通过获取系统调用请求所表征的需申请显示内存、预先针对vgpu配置的显示内存上限以及已分配给
vgpu的已分配显示内存,从而可以在根据需申请显示内存、显示内存上限和已分配显示内存,确定需将系统调用请求转发给原生gpu内核驱动的情况下,将系统调用请求转发给原生gpu内核驱动,从而实现了为不同vgpu分别申请显示内存的效果,即支持不同vgpu的显存隔离。
78.在此基础上,一种可选的技术方案,在根据需申请显示内存、显示内存上限和已分配显示内存,确定需将系统调用请求转发给原生图形处理器内核驱动的情况下,将系统调用请求转发给原生图形处理器内核驱动,包括:
79.确定需申请显示内存和已分配显示内存之间的加和结果;
80.在基于加和结果与显示内存上限之间的数值关系,确定需将系统调用请求转发给原生图形处理器内核驱动的情况下,将系统调用请求转发给原生图形处理器内核驱动。
81.换言之,可以确定需申请显示内存和已分配显示内存之间的加和结果(request memory+allocated memory),并根据加和结果与显示内存上限(used define memory limit)之间的数值关系确定是否需将系统调用请求转发给原生gpu内核驱动,例如可以在request memory+allocated memory<used define memory limit的情况下,确定需要将系统调用请求转发给原生gpu内核驱动,否则(即request memory+allocated memory》=used define memory limit),无需将系统调用请求转发给原生gpu内核驱动。
82.另一种可选的技术方案,上述的图形处理器的虚拟化方法,还可包括:在确定需将系统调用请求转发给原生图形处理器内核驱动的情况下,确定需申请显示内存和已分配显示内存之间的加和结果,并基于加和结果更新已分配显示内存。换言之,在确定需将系统调用请求转发给原生gpu内核驱动的情况下,原生gpu内核驱动可以为用户态应用当前应用的vgpu分配需申请显示内存,那么此时分配给该vgpu的已分配内存也相应发生变化,因此为了保证已分配内存的准确性,可以确定需申请显示内存和已分配显示内存之间的加和结果,并基于加和结果更新已分配显示内存,例如allocated memory=allocated memory+request memory,从而记录下最新的已分配显示内存。
83.在上述任意技术方案的基础上,可选的,确定系统调用请求的请求内容,包括:在系统调用请求用于调用虚拟图形处理器内核驱动中的管理函数的情况下,确定系统调用请求的请求内容,其中,管理函数用于管理虚拟图形处理器的输入通道和输出通道。其中,考虑到显存隔离可以依赖对管理函数(ioctl)调用的拦截实现,因此可以在系统调用请求用于调用vgpu内核驱动中的ioctl的情况下,这说明此时的系统调用请求与显存隔离有关,那么可以确定系统调用请求的请求内容,从而根据请求内容确定是否需将系统调用请求转发给原生gpu内核驱动,从而基于原生gpu内核驱动实现显存隔离的相关操作。
84.图4是本发明实施例中提供的另一种图形处理器的虚拟化方法的流程图。本实施例以上述各技术方案为基础进行优化。在本实施例中,可选的,上述的图形处理器的虚拟化方法,还包括:针对基于虚拟图形处理器内核驱动创建的虚拟字符设备,将虚拟字符设备挂载到任务容器中,并对挂载到任务容器中的虚拟字符设备进行重命名,得到与原生图形处理器内核驱动对应的原生字符设备一致的设备名称,以基于设备名称拦截系统调用请求。其中,与上述各实施例相同或相应的术语的解释在此不再赘述。
85.参见图4,本实施例的方法具体可以包括如下步骤:
86.s410、针对基于虚拟图形处理器内核驱动创建的虚拟字符设备,将虚拟字符设备
挂载到任务容器中,并对挂载到任务容器中的虚拟字符设备进行重命名,得到与原生图形处理器内核驱动对应的原生字符设备一致的设备名称,其中,原生图形处理器内核驱动与物理图形处理器适配,并且物理图形处理器与虚拟图形处理器对应。
87.其中,虚拟字符设备可以理解为基于vgpu内核驱动创建的字符设备,其的数量可以是一个、两个或是多个,在此未做具体限定。在实际应用中,可选的,可以在用户态基于vgpu内核驱动创建至少两个虚拟字符设备,例如可以是/dev/wegpu0,/dev/wegpuctl等。
88.将这些虚拟字符设备挂载到任务容器中,并且在挂载过程中,可以对这些虚拟字符设备进行重命名,例如重命名为/dev/nvidia0以及/dev/nvidiactl,从而得到与原生gpu内核驱动对应的原生字符设备一致的设备名称。
89.s420、基于设备名称,拦截经由用户驱动发送的与物理图形处理器相关的系统调用请求。
90.其中,由于用户驱动直接通过设备路径对字符设备寻址,而且挂载在任务容器中的虚拟字符设备对应的内核驱动是vgpu内核驱动,因此经由用户驱动发送的系统调用请求会被截获至vgpu内核驱动进行处理,即vgpu内核驱动可以基于设备名称拦截住系统调用请求。具体的,用户态应用基于设备名称对接挂载在任务容器中的虚拟字符设备,由此系统调用请求被打到虚拟字符设备上,从而转发至vgpu内核驱动,即被vgpu内核驱动截获。
91.由上可知,一个物理gpu可以对应多个vgpu,换言之,同一个物理gpu可以给多个任务使用,从而实现了gpu的虚拟化。
92.s430、确定系统调用请求的请求内容,并在根据请求内容确定需将系统调用请求转发给原生图形处理器内核驱动的情况下,将系统调用请求转发给原生图形处理器内核驱动。
93.s440、拦截原生图形处理器内核驱动针对系统调用请求返回的响应结果,并将响应结果返回给用户驱动。
94.本发明实施例的技术方案,针对基于vgpu内核驱动创建的虚拟字符设备,通过将虚拟字符设备挂载到任务容器中,并对挂载到任务容器中的虚拟字符设备进行重命名,得到与原生gpu内核驱动对应的原生字符设备一致的设备名称,从而vgpu内核驱动可以基于设备名称成功拦截系统调用请求。
95.在此基础上,一种可选的技术方案,拦截经由用户驱动发送的与物理图形处理器相关的系统调用请求,包括:
96.在检测到虚拟字符设备接收到经由用户驱动发送的与物理图形处理器相关的系统调用请求的情况下,拦截系统调用请求;
97.其中,用户驱动通过设备名称定位虚拟字符设备,并将系统调用请求发送给定位到的虚拟字符设备。
98.换言之,如上文所述,用户驱动直接通过设备路径(即设备名称)对字符设备寻址,因此用户驱动可以通过设备名称定位到虚拟字符设备,然后将系统调用请求发送给所定位的虚拟字符设备。这样一来,vgpu内核驱动可以通过虚拟字符设备成功拦截系统调用请求。
99.为了从整体上更好地理解上述的各个技术方案,下面结合具体示例,对其进行示例性说明。示例性的,本示例主要依赖vgpu内核驱动实现,参见图5a,用户对gpu的系统调用请求的请求路径从:
100.cuda用户驱动

原生gpu内核驱动
101.变为:
102.cuda用户驱动

vgpu内核驱动

原生gpu内核驱动。
103.图5a中的s1、s2和s3是本示例实现过程中的三个关键步骤,接下来对这三个步骤分别进行详细说明。
104.s1、在用户态暴露vgpu字符设备(即虚拟字符设备)和procfs目录。
105.参见图5b,本示例在用户态基于vgpu内核驱动创建若干个虚拟字符设备,例如/dev/wegpu0,/dev/wegpuctl等。在将这些虚拟字符设备挂载到任务容器中时,可以将它们重命名为/dev/nvidia0以及/dev/nvidiactl,从而与nvidia官方驱动(即原生gpu内核驱动)的设备名称相一致。在此基础上,由于用户驱动直接通过设备名称对字符设备寻址,因此经由用户驱动发送的系统调用请求会被截获至vgpu内核驱动进行处理。
106.需要注意的是,一个物理gpu可以对应多个vgpu。换言之,同一个物理gpu可以给多个任务使用,从而实现了gpu的虚拟化。
107.另外,本示例还会在用户态暴露一个procfs目录,从而用户可以通过对procfs目录中的文件读写来对vgpu的配置进行设置,例如可以是显存资源的分配以及获取vgpu任务的状态。
108.基于上述,实现vgpu内核驱动与用户态应用的交互。
109.s2、对gpu相关的系统调用请求(后文简称为请求)进行拦截以及转发。如图5c所示,显存隔离主要依赖对ioctl调用的拦截实现,主要策略为:
110.1)所有与申请显示内存的请求都进行拦截,如果所申请的需申请显示内存超过了用户设置的显示内存上限,即:
111.request memory+allocated memory》=used define memory limit
112.则直接拒绝请求,反之则将请求转发给原生gpu内核驱动,并记录本次所申请的需申请显示内存的具体数值,即:
113.allocated memory=allocated memory+request memory;
114.2)所有与查询显示内存相关的请求,先将请求转发给原生gpu内核驱动,再拦截并修改原生gpu内核驱动返回的数据,即:
115.total memory=used define memory limit
116.free memory=used define memory limit

used memory
117.3)其他请求直接转发,不作处理。
118.s3、将系统调用请求转发给原生gpu内核驱动。
119.在创建vgpu的时候,同步记录vgpu绑定的物理gpu所对应的file_operations接口,将以下operation转发给原生gpu内核驱动的相应的接口:
120.open
121.poll
122.mmap
123.unlock_ioctl
124.compat_ioctl
125.release
126.然后,再将原生gpu内核驱动的各接口返回的响应结果依照原路径返回。
127.上述示例提供的gpu虚拟化方案,可以稳定高效地将一块物理gpu切分成多块vgpu进行使用,性能优异而且对用户友好;除此外,支持精确的显存隔离,保证不同vgpu上的任务互不影响。
128.图6为本发明实施例中提供的图形处理器的虚拟化装置的结构框图,该装置用于执行上述任意实施例所提供的图形处理器的虚拟化方法。该装置与上述各实施例的图形处理器的虚拟化方法属于同一个发明构思,在图形处理器的虚拟化装置的实施例中未详尽描述的细节内容,可以参考上述图形处理器的虚拟化方法的实施例。参见图6,该装置配置于与虚拟图形处理器适配的虚拟图形处理器内核驱动,该装置可包括:系统调用请求拦截模块510、系统调用请求转发模块520和响应结果返回模块530。其中,
129.系统调用请求拦截模块510,用于拦截经由用户驱动发送的与物理图形处理器相关的系统调用请求,其中,物理图形处理器与虚拟图形处理器对应;
130.系统调用请求转发模块520,用于确定系统调用请求的请求内容,在根据请求内容确定需将系统调用请求转发给原生图形处理器内核驱动的情况下,将系统调用请求转发给原生图形处理器内核驱动,其中,原生图形处理器内核驱动与物理图形处理器适配;
131.响应结果返回模块530,用于拦截原生图形处理器内核驱动针对系统调用请求返回的响应结果,并将响应结果返回给用户驱动。
132.可选的,请求内容包括查询显示内存,且响应结果包括总显示内存和剩余显示内存;
133.上述图形处理器的虚拟化装置,还包括:
134.已用显示内存获取模块,用于在拦截原生图形处理器内核驱动针对系统调用请求返回的响应结果后,获取预先针对虚拟图形处理器配置的显示内存上限,以及,获取虚拟图形处理器的已用显示内存;
135.总显示内存更新模块,用于将显示内存上限更新为总显示内存;
136.剩余显示内存更新模块,用于对显示内存上限和已用显示内存进行处理,得到处理显示内存,并将处理显示内存更新为剩余显示内存;
137.响应结果返回模块530,包括:
138.响应结果返回单元,用于将总显示内存和剩余显示内存,返回给用户驱动。
139.在此基础上,可选的,剩余显示内存更新模块,包括:
140.处理显示内存得到单元,用于将显示内存上限与已用显示内存之间的差值,作为处理显示内存。
141.可选的,系统调用请求转发模块520,包括:
142.需申请显示内存获取单元,用于在请求内容包括申请显示内存的情况下,获取系统调用请求所表征的需申请显示内存;
143.已分配显示内存获取单元,用于获取预先针对虚拟图形处理器配置的显示内存上限,以及,已分配给虚拟图形处理器的已分配显示内存;
144.系统调用请求第一转发单元,用于在根据需申请显示内存、显示内存上限和已分配显示内存,确定需将系统调用请求转发给原生图形处理器内核驱动的情况下,将系统调用请求转发给原生图形处理器内核驱动。
145.在此基础上,一可选的,系统调用请求第一转发单元,具体用于:
146.确定需申请显示内存和已分配显示内存之间的加和结果;
147.在基于加和结果与显示内存上限之间的数值关系,确定需将系统调用请求转发给原生图形处理器内核驱动的情况下,将系统调用请求转发给原生图形处理器内核驱动。
148.另一可选的,上述图形处理器的虚拟化装置,还包括:
149.已分配显示内存更新模块,用于在确定需将系统调用请求转发给原生图形处理器内核驱动的情况下,确定需申请显示内存和已分配显示内存之间的加和结果,并基于加和结果更新已分配显示内存。
150.再一可选的,显示内存上限通过用户驱动对目标目录中的文件执行读写操作进行配置。
151.在上述任意装置的基础上,可选的,系统调用请求转发模块520,包括:
152.请求内容确定单元,用于在系统调用请求用于调用虚拟图形处理器内核驱动中的管理函数的情况下,确定系统调用请求的请求内容,其中,管理函数用于管理虚拟图形处理器的输入通道和输出通道。
153.可选的,上述图形处理器的虚拟化装置,还包括:
154.设备名称得到模块,用于针对基于虚拟图形处理器内核驱动创建的虚拟字符设备,将虚拟字符设备挂载到任务容器中,并对挂载到任务容器中的虚拟字符设备进行重命名,得到与原生图形处理器内核驱动对应的原生字符设备一致的设备名称,以基于设备名称拦截系统调用请求。
155.在此基础上,可选的,系统调用请求拦截模块510,具体用于:
156.在检测到虚拟字符设备接收到经由用户驱动发送的与物理图形处理器相关的系统调用请求的情况下,拦截系统调用请求;
157.其中,用户驱动通过设备名称定位虚拟字符设备,并将系统调用请求发送给定位到的虚拟字符设备。
158.可选的,上述图形处理器的虚拟化装置,还包括:
159.文件操作接口记录模块,用于在创建虚拟图形处理器的情况下,记录与虚拟图形处理器对应的物理图形处理器所对应的文件操作接口;
160.系统调用请求转发模块520,包括:
161.系统调用请求第二转发单元,用于将系统调用请求转发给原生图形处理器内核驱动的文件操作接口;
162.响应结果返回模块530,包括:
163.响应结果拦截单元,用于拦截原生图形处理器内核驱动通过文件操作接口返回的针对系统调用请求的响应结果。
164.本发明实施例提供的图形处理器的虚拟化装置,vgpu内核驱动通过系统调用请求拦截模块拦截经由用户驱动发送的与物理gpu相关的系统调用请求,其中,物理gpu与vgpu对应,vgpu与vgpu内核驱动适配;通过系统调用请求转发模块确定系统调用请求的请求内容,并在根据请求内容确定需将系统调用请求转发给原生gpu内核驱动的情况下,将系统调用请求转发给原生gpu内核驱动,其中,原生gpu内核驱动与物理gpu适配;进而,通过响应结果返回模块拦截原生gpu内核驱动针对系统调用请求返回的响应结果,并将响应结果返回
给用户驱动。上述装置,是一种基于内核态的gpu虚拟化方案,其在实现gpu虚拟化的过程中,无需指定任何版本,对用户友好;而且vgpu内核驱动只负责转发系统调用请求,无需进行过多操作,因此不会影响到物理gpu的处理速度,即相对物理gpu无性能上的损失。
165.本发明实施例所提供的图形处理器的虚拟化装置可执行本发明任意实施例所提供的图形处理器的虚拟化方法,具备执行方法相应的功能模块和有益效果。
166.值得注意的是,上述图形处理器的虚拟化装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
167.图7示出了可以用来实施本发明的实施例的电子设备10的结构示意图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备(如头盔、眼镜、手表等)和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。
168.如图7所示,电子设备10包括至少一个处理器11,以及与至少一个处理器11通信连接的存储器,如只读存储器(rom)12、随机访问存储器(ram)13等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器11可以根据存储在只读存储器(rom)12中的计算机程序或从存储单元18加载到随机访问存储器(ram)13中的计算机程序,来执行各种适当的动作和处理。在ram 13中,还可存储电子设备10操作所需的各种程序和数据。处理器11、rom 12以及ram 13通过总线14彼此相连。输入/输出(i/o)接口15也连接至总线14。
169.电子设备10中的多个部件连接至i/o接口15,包括:输入单元16,例如键盘、鼠标等;输出单元17,例如各种类型的显示器、扬声器等;存储单元18,如磁盘、光盘等;以及通信单元19,例如网卡、调制解调器、无线通信收发机等。通信单元19允许电子设备10通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
170.处理器11可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器11的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。处理器11执行上文所描述的各个方法和处理,例如图形处理器的虚拟化方法。
171.在一些实施例中,图形处理器的虚拟化方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元18。在一些实施例中,计算机程序的部分或者全部可以经由rom 12和/或通信单元19而被载入和/或安装到电子设备10上。当计算机程序加载到ram 13并由处理器11执行时,可以执行上文描述的图形处理器的虚拟化方法的一个或多个步骤。备选地,在其他实施例中,处理器11可通过其他任何适当的方式(例如,借助于固件)而被配置为执行图形处理器的虚拟化方法。
172.本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实
现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、以及至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、以及该至少一个输出装置。
173.用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或是其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行并且部分地在远程机器上执行或完全在远程机器或服务器上执行。
174.在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
175.为了提供与用户的交互,可以在电子设备上实施此处描述的系统和技术,该电子设备具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给电子设备。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
176.可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)、区块链网络和互联网。
177.计算系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与vps服务中,存在的管理难度大,业务扩展性弱的缺陷。
178.应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。
179.上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1