一种虚拟机应用主机GPU设备的方法及系统与流程

文档序号:17287435发布日期:2019-04-03 03:40阅读:305来源:国知局

本发明涉及虚拟机技术,特别涉及一种虚拟机应用主机gpu(graphicsprocessingunit,图形处理器)设备的方法及系统。



背景技术:

随着虚拟化技术日趋成熟,虚拟化技术和gpu计算的结合越来越受到高性能计算的青睐,因此将gpu设备提供给虚拟机使用便成为一个越来越热门的需求。

gpu一般用于执行复杂的数学和几何计算,包括浮点运算、并行计算等,gpu可以提供数十倍乃至于上百倍于cpu的性能。



技术实现要素:

本发明公开了一种虚拟机应用主机gpu设备的方法及系统,可以解决gpu设备直通虚拟机的问题。

本发明公开了一种虚拟机应用主机gpu设备的方法,包括:

获取所述虚拟机所在的主机中的gpu设备的外设互联标准(pci)地址;

若根据所获取的gpu设备的pci地址确定所述gpu设备为显卡类gpu设备,查询所获取的gpu设备的pci地址所在的输入/输出内存管理单元(iommu)组(group)号,根据所查询到的iommugroup查询iommugroup上与所述gpu设备对应的显示设备对应的pci地址;

将查询到的iommu上与所述gpu设备对应的显示设备对应的pci地址以及所述gpu设备的pci地址添加到虚拟机中。

可选地,上述方法还包括:

对直通虚拟机的显卡类的gpu设备进行cpu预留配置;

在直通虚拟机的gpu设备的利用率达到或超过第一设定阈值时,按照所述cpu预留配置将除预定计算任务以外的其他任务分派给cpu处理。

可选地,上述方法中,所述预定计算任务包括:

任务进程占用gpu设备的使用率达到或超过第二设定阈值的任务。

可选地,上述方法中,所述将查询到的iommu上与所述gpu设备对应的显示设备对应的pci地址添加到虚拟机中,包括:

按照虚拟机xml中的配置方式将查询到的iommu上与所述gpu设备对应的显示设备对应的pci地址添加到虚拟机中。

可选地,上述方法还包括:

若根据所获取的gpu设备的pci地址确定所述gpu设备为计算卡类gpu设备;

将所获取的gpu设备的pci地址添加到虚拟机中。

本文还公开了一种虚拟机应用主机gpu设备的系统,包括存储器和处理器,其中:

所述存储器,用于保存虚拟机应用主机gpu的程序;

所述处理器,用于读取执行所述虚拟机应用主机gpu的程序,执行如下操作:

获取所述虚拟机所在的主机中的gpu设备的pci地址;

若根据所获取的gpu设备的pci地址确定所述gpu设备为显卡类gpu设备,查询所获取的gpu设备的pci地址所在的iommu组号,根据所查询到的iommu组号查询iommu组上与所述gpu设备对应的显示设备对应的pci地址;

将查询到的iommu上与所述gpu设备对应的显示设备对应的pci地址以及所述gpu设备的pci地址全部添加到虚拟机中。

可选地,上述系统中,所述处理器还执行如下操作:

对直通虚拟机的显卡类的gpu设备进行cpu预留配置;

在直通虚拟机的gpu设备的利用率达到或超过第一设定阈值时,按照所述cpu预留配置,将除预定计算任务以外的其他任务分派给cpu处理。

可选地,上述系统中,所述预定计算任务包括:

任务进程占用gpu设备的使用率达到或超过第二设定阈值的任务。

可选地,上述系统中,所述将查询到的iommu上与所述gpu设备对应的显示设备对应的pci地址添加到虚拟机中,包括:

按照虚拟机xml中的配置方式将查询到的iommu上与所述gpu设备对应的显示设备对应的pci地址添加到虚拟机中。

可选地,上述系统中,所述处理器还执行如下操作:

若根据所获取的gpu设备的pci地址确定所述gpu设备为计算卡类gpu设备;

将所获取的gpu设备的pci地址添加到虚拟机中。

本申请技术方案提供虚拟机应用主机gpu设备的方案,将gpu设备成功直通给虚拟机使用。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下文将结合具体实施方式对本发明技术方案作进一步详细说明。需要说明的是,在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。

实施例1

本申请发明人提出,可以通过主机中gpu的类型来将对应的gpu设备直通给虚拟机使用。还可以给虚拟机预留一定的cpu资源,以保证在虚拟机内部计算任务压力较大时,用户能通过任务调度来将不同的任务分配给cpu或是gpu,以提高系统利用率。

基于上述思想,本实施例提供一种虚拟机应用主机gpu设备的方法,主要包括如下操作:

获取主机的gpu设备的pci地址,根据获取的主机的gpu设备的pci地址确定gpu设备的类型,

若根据所获取的gpu设备的pci地址确定所述gpu设备为显卡类gpu设备,查询该pci地址所在的iommu组号,根据所查询到的iommu组号查询iommu组上gpu设备对应的显示设备对应的pci地址;

将查询到的iommu上gpu设备对应的显示设备对应的pci地址和gpu设备的pci地址全部添加到虚拟机中。

其中,可以按照虚拟机xml中的配置方式将查询到的iommu上其他设备对应的pci地址全部添加到虚拟机中。

另外,对于直通虚拟机的显卡类的gpu设备,还可以进行cpu预留配置。例如,在虚拟机配置文件中写入一个虚拟机cpu资源预留的字段,给虚拟机设定一个至少可用的cpu资源值,即无论主机cpu资源如何紧张,虚拟机都至少会有预留的那部分cpu资源可以利用,防止与其他进程互相竞争cpu资源导致内部进程无法正常运行的情况。这样,当虚拟机内部的计算任务的负载达到设定阈值(即可认为虚拟机内部的计算任务压力过大)时,可以将计算任务分派给虚拟机直通的gpu,将其他任务分派给cpu。例如,可以根据gpu的利用率判断计算任务压力是否比较大,如果gpu利用率已经达到第一设定阈值(例如100%)说明gpu在满负荷运行,此时就可以通过cpu-gpu作业调度来减缓gpu的使用率,使比较重要的计算任务能更好的使用gpu资源。其中,可以根据进程占用gpu的使用率判断出哪此是比较重要的计算任务(也可以称为是预定计算任务),例如进程占用gpu的使用率达到或超过第二设定阈值(如,10%)就可以认定为预定计算任务即比较重要的计算任务,需要分派给gpu处理。

还有,根据所查询到的iommu组号查询iommu组上与显卡类的gpu设备对应的显示设备对应的pci地址。这是由于主机内部gpu设备是显卡类的gpu设备时,需要查询此gpu设备的pci地址所在iommugroup,再确定iommugroup上gpu设备对应的的显示设备对应的pci地址,需要将主机上的gpu的pci地址和确定的显示设备对应的pci地址全部添加到虚拟机中,才可以实现普通显卡直通到虚拟机上。

下面以一种示例性实例,介绍上述方法的一种实施方式。

虚拟机应用主机gpu设备的方法包括如下三个步骤:

第一步,查询主机内部gpu设备的pci(peripheralcomponentinterconnect,外设互联标准)地址,根据查询的gpu设备的pci地址,确定gpu设备的类型是显卡类gpu还是计算卡类gpu。若是显卡类gpu,以此地址查询该pci地址所在的iommu(input/outputmemorymanagementunit,输入/输出内存管理单元)group号,根据该group号查询上面与gpu设备对应的显示设备对应的pci地址。

其中,主机内部gpu设备的pci地址为单一独立地址,可以确定gpu设备是计算卡类gpu。若主机内部gpu设备的pci地址为两个连续的pci地址中的一个,则可以确定gpu类型是显卡类gpu。例如:若gpu为单纯的计算类型的,则通过pci地址查询的地址类似:0000:3b:00.0;若gpu带有显示模式,则会有两个pci地址,类似于:0000:3b:00.0;0000:3b:00.1,其中第一个pci地址指向的是gpu的计算模块,第二个pci地址指向的是gpu的显示模块,且两个地址会在同一个iommu组里面,需要将两个pci设备同时直通给虚拟机才可以正常使用该gpu。

若根据所获取的gpu设备的pci地址确定所述gpu设备为计算卡类gpu设备,将所获取的gpu设备的pci地址添加到虚拟机中即可。

第二步,将上述步骤中查询出的所有pci地址按照虚拟机xml中的配置方式添加到虚拟机中。该步骤是为了防止普通显卡gpu(非计算卡gpu)直通虚拟机失败的问题,因为普通显卡会占用主机两个pci地址,一个是计算设备gpu一个是显示设备,且位于同一个iommugroup里面,需要同时直通给虚拟机才能正常使用。

第三步,对直通显卡gpu的虚拟机进行cpu预留配置的操作,当虚拟机内部的计算任务压力较大(例如,虚拟机内部的计算任务负载达到设定阈值)时,将不同类型的任务分配给cpu或是gpu设备。例如,可以将一些需要强劲计算能力的作业留给gpu,而其他一些作业则分配给cpu来处理,从而减少gpu上作业的等待时间,发挥出gpu应有的效果。

本实施例中,对于直通虚拟机的显卡类的gpu设备,进行的cpu预留配置可以包括,在虚拟机配置文件中写入一个虚拟机cpu资源预留的字段,给虚拟机设定一个至少可用的cpu资源值,即无论主机cpu资源如何紧张,虚拟机都至少会有预留的那部分cpu资源可以利用,防止与其他进程互相竞争cpu资源导致内部进程无法正常运行的情况。例如,可以根据gpu的利用率判断计算任务压力是否比较大,如果gpu利用率已经达到第一设定阈值(例如100%)说明gpu在满负荷运行,此时就可以通过cpu-gpu作业调度来减缓gpu的使用率,即按照cpu预留配置,将比较重要的计算任务分派给gpu设备(即保证比较重要的计算任务能更好的使用gpu资源),而除比较重要的计算任务以外的其他任务分派给cpu即可。其中,可以根据进程占用gpu的使用率判断出哪此是比较重要的计算任务(也可称为预定计算任务),例如进程占用gpu的使用率达到或超过第二设定阈值(如,10%)就可以认定为比较重要的计算任务,需要分派给gpu处理。

实施例2

本实施例提供一种虚拟机应用主机gpu设备的系统,包括存储器和处理器。

存储器,用于保存虚拟机应用主机gpu的程序;

处理器,用于读取执行存储器中的虚拟机应用主机gpu的程序,执行如下操作:

获取所述虚拟机所在的主机中的gpu设备的外设互联标准pci地址;

若根据所获取的gpu设备的pci地址确定所述gpu设备为显卡类gpu设备,查询所获取的gpu设备的pci地址所在的输入/输出内存管理单元iommu组号,根据所查询到的iommu组号查询iommu组上与所述gpu设备对应的显示设备对应的pci地址;

将查询到的iommu上与所述gpu设备对应的显示设备对应的pci地址以及所述gpu设备的pci地址全部添加到虚拟机中。

其中,若根据所获取的gpu设备的pci地址确定所述gpu设备为计算卡类gpu设备时,处理器将所获取的gpu设备的pci地址添加到虚拟机中即可。

上述处理器将查询到的iommu上与gpu设备对应的显示设备对应的pci地址添加到虚拟机中的一种实施方式可以是按照虚拟机xml中的配置方式将查询到的iommu上与所述gpu设备对应的显示设备对应的pci地址添加到虚拟机中。

另外,为了发挥出gpu应有的效果,以减小cpu的负载,在一种示例性实例中,处理器还可以对直通虚拟机的显卡类的gpu设备进行cpu预留配置。这样,当虚拟机内部的计算任务的负载达到设定阈值时,处理器将计算任务分派给虚拟机直通的gpu,将其他任务分派给cpu。本实施例中,对于直通虚拟机的显卡类的gpu设备,进行的cpu预留配置可以包括,在虚拟机配置文件中写入一个虚拟机cpu资源预留的字段,给虚拟机设定一个至少可用的cpu资源值,即无论主机cpu资源如何紧张,虚拟机都至少会有预留的那部分cpu资源可以利用,防止与其他进程互相竞争cpu资源导致内部进程无法正常运行的情况。例如,可以根据gpu的利用率判断计算任务压力是否比较大,如果gpu利用率已经达到第一设定阈值(例如100%)说明gpu在满负荷运行,此时就可以通过cpu-gpu作业调度来减缓gpu的使用率,使比较重要的计算任务能更好的使用gpu资源。其中,可以根据进程占用gpu的使用率判断出哪此是比较重要的计算任务(也可以称为预定计算任务),例如进程占用gpu的使用率达到或超过第二设定阈值(如,10%)就可以认定为比较重要的计算任务,需要分派给gpu处理。此时,按照cpu预留配置,将除了所确定的预定计算任务以外的其他任务分派给cpu,将所确定的预定计算任务(也就是比较重要的计算任务)分派给gpu设备即可。

从上述实施例可以看出,本申请技术方案通过查询主机iommugroup设备中的pci地址,区分gpu中的计算卡和普通显卡,来解决相应直通给虚拟机的问题,并且对虚拟机进行cpu预留,有利于用户通过cpu-gpu作业调度来最大化利用gpu设备。

本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请不限制于任何特定形式的硬件和软件的结合。

以上所述,仅为本发明的较佳实例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1