基于半虚拟化的通用计算方法及系统与流程

文档序号:12063450阅读:347来源:国知局
基于半虚拟化的通用计算方法及系统与流程

本发明涉及虚拟机技术领域,尤其涉及一种基于半虚拟化的通用计算方法及系统。



背景技术:

在大数据背景下,对于计算机的通用计算能力有越来越多的要求,通用计算是由GPU提供,主要有OPENCL和CUDA两种实现,目前的虚拟化方案没有高效的通用计算模块的虚拟化方案。目前比较成熟的两种实现:一是XEN使用GRID卡,GRID卡是NVIDIA的专用显卡,价格昂贵,虚拟化成本很高;二是将单个普通GPU passthrough,这样每一个VM都要独占一个GPU进行通用计算,虚拟化成本也很高。

所谓通用计算,general purpose computing,是相对于图形计算而言的。由于图形处理器在历史上是专门为图形应用而设计的,因而只能作图形计算,在软件层只拥有图形接口,如OPENGL、DIRECT3D。但随着GPU处理能力的增强,工业界和学术界发现它可以处理图形之外的计算,这种计算形式由于相对图形这一单一应用而言显得更加一般、通用,所以被称为通用计算,相应的接口被称为通用计算接口,目前的代表有CUDA、OPENCL等。

最好的方法是可以多个VM共用一个GPU并提供通用计算能力。如果按照目前全虚拟化方向,需要模拟完整GPU设备,使用GPU厂家提供的驱动,但是有两个局限性:一是全虚拟化效率低;二是GPU实现复杂,还需要有对应的GPU设计手册可参考。另一种可用的思路是使用半虚拟化,使用自定义的驱动模拟GPU设备,将用户态发送到内核态的通用计算指令截获,在宿主机中进行相应操作。



技术实现要素:

鉴于此,本发明提供的一种基于半虚拟化的通用计算方法及系统,在多个虚拟机中配置多个虚拟GPU,生成通用计算命令,并在内核中截获通用计算命令发送到物理机中,在物理机中实现实际通用计算后将结果返回虚拟机,实现虚拟机通用计算。

为了达到上述目的,本发明是通过以下技术方案实现的:

本发明提供一种基于半虚拟化的通用计算方法,包括:

将多个虚拟机对应于一个物理机;

配置多个虚拟GPU分别对应多个虚拟机;

将虚拟GPU的通用计算命令发送给物理机的物理GPU;

物理GPU将通用计算结果返回给虚拟机。

进一步地,配置多个虚拟GPU分别对应多个虚拟机,包括:

在每个虚拟机中,使用前端驱动创建虚拟GPU。

优选地,所述前端驱动为virtio驱动。

进一步地,将虚拟GPU的通用计算命令发送给物理机的物理GPU,包括:

在虚拟机内核态中截获通用计算命令;

通过virtio queue将所截获的通用计算命令发送到物理机的虚拟化程序;

虚拟化程序调用物理GPU接收通用计算命令。

进一步地,在虚拟机内核态中截获通用计算命令,包括:通过驱动接口在虚拟机内核态中截获通用计算命令。

进一步地,物理GPU将通用计算结果返回给虚拟机,包括:物理GPU将通用计算结果通过virtio queue返回给虚拟机。

本发明还提供一种基于半虚拟化的通用计算系统,包括一个物理机,在物理机下配置多个虚拟机,虚拟机中设有对应的前端驱动模块和驱动接口,其中:

前端驱动模块用于创建虚拟GPU;

虚拟GPU用于生成通用计算命令;

驱动接口用于在虚拟机内核态中截获通用计算命令;

进一步地,所述物理机包括虚拟化程序模块和一个物理GPU,虚拟化程序模块用于接收虚拟机传来的通用计算命令,并调用物理机中的物理GPU处理通用计算命令;物理GPU用于实现虚拟机发送来的通用计算命令,并输出计算结果。

优选地,所述前端驱动模块通过virtio驱动创建虚拟GPU。

优选地,所述虚拟机通过virtio queue将通用计算命令发送到物理机,所述物理机通过virtio queue将通用计算结果返回给虚拟机。

本发明提供一种基于半虚拟化的通用计算方法,有益效果如下:

提供了一种半虚拟化方案,在多个虚拟机中配置多个虚拟GPU,生成通用计算命令,并在内核中截获通用计算命令发送到物理机中,在物理机中实现实际通用计算后将结果返回虚拟机,实现虚拟机通用计算的方法。同时,将多个虚拟机共用同一个物理GPU,相当于多个进程操作同一个物理GPU,降低虚拟化成本,使用半虚拟化的方式提高虚拟机的性能。

本发明还提供一种基于半虚拟化的通用计算系统,其有益效果与基于半虚拟化的通用计算方法类似,不再赘述。

附图说明:

图1为本发明实施例所提供的基于半虚拟化的通用计算方法流程示意图;

图2为本发明实施例所提供的基于半虚拟化的通用计算系统框架示意图;

具体实施方式:

为了便于理解,对本发明中出现的部分名词作以下解释说明:

虚拟机:即VM,是指一种特殊的软件,可以在计算机平台和终端用户之间创建一种环境,而终端用户则是基于这个软件所创建的环境来操作软件。在计算机科学中,虚拟机是指可以像真实机器一样运行程序的计算机的软件实现。

物理机:在本发明中,物理机与虚拟机对应,作为虚拟机的宿主机,一般指实体计算机。

virtio :是指半虚拟化 hypervisor 中位于设备之上的抽象层。

virtio queue:virtio是通过使用virtqueue来实现其I/O机制的,每个 virtio queue就是一个承载大量数据的queue。

依照附图详细说明关于本发明的示例性实施例。

本实施例提供一种基于半虚拟化的通用计算方法,通过半虚拟化方法在虚拟机中创建虚拟GPU设备,将对应的通用计算命令截获转发到宿主机的物理GPU中,在虚拟机中实现通用计算,包括以下步骤:

将多个虚拟机对应于一个物理机;

配置多个虚拟GPU分别对应多个虚拟机;

将虚拟GPU的通用计算命令发送给物理机的物理GPU;

物理GPU将通用计算结果返回给虚拟机。

请参考图1,图1为本发明实施例所提供的基于半虚拟化的通用计算方法流程示意图;本实施例提供一种基于半虚拟化的通用计算方法,包括:

步骤S101、将多个虚拟机对应于一个物理机;

步骤S102、在每个虚拟机中,使用前端驱动创建虚拟GPU;

其中,在每个虚拟机中均使用前端驱动创建一个虚拟GPU,虚拟机在运算的过程中,通过虚拟GPU生成通用计算命令,因为一个物理机下设有多个虚拟机,通过调用物理机中的物理GPU,形成了一个物理GPU对应多个虚拟GPU的整体框架,多个虚拟GPU在运行时生成多个通用计算命令,这些通用计算命令可能为一种,也可能为多种。

在本实施例中,前端驱动为virtio驱动,即前端驱动是基于virtio的驱动,由此创建的虚拟GPU可表示为virtio GPU。

作为一种可实施方式,前端驱动可选取基于xen或VMware的驱动程序或工具。

步骤S103、在虚拟机内核态中截获通用计算命令;

多个虚拟机的虚拟GPU生成通用计算命令,通过驱动接口在虚拟机内核态中截获这些通用计算命令,内核态的接口较少,只要实现内核态对应的几个接口就可以截获全部通用计算命令。

步骤S104、通过virtio queue将所截获的通用计算命令发送到物理机的虚拟化程序;在本实施例中,虚拟GPU是基于virtio的驱动创建出来的,之后将通用计算命令通过virtio queue传递到物理机的虚拟化程序,物理机中的虚拟化程序将处理这些通用计算命令,virtio queue中可以包括大量的数据,因此保证了通用计算命令的传输能力;同时virtio queue作为一种连接虚拟机和物理机的通道,传输通用计算命令。

步骤S105、虚拟化程序调用物理GPU接收通用计算命令;

步骤S106、物理GPU将通用计算结果通过virtio queue返回给虚拟机;

在物理机中可以直接操作物理GPU设备,在虚拟机中的操作虚拟GPU的命令都可以对应到物理机的物理GPU上,将对应的通用计算命令在物理GPU上实现后将结果反馈给虚拟机,多个虚拟机可共用同一个物理GPU,相当于多个进程操作同一个物理GPU,实现通用计算。

本实施例提供一种基于半虚拟化的通用计算系统,包括一个物理机,在物理机下配置多个虚拟机,虚拟机中设有对应的前端驱动模块和驱动接口,其中:

前端驱动模块用于创建虚拟GPU;

虚拟GPU用于生成通用计算命令;

驱动接口用于在虚拟机内核态中截获通用计算命令;

请参考图2,图2为本发明实施例所提供的基于半虚拟化的通用计算系统框架示意图;本实施例提供一种基于半虚拟化的通用计算系统,包括一个物理机,在物理机下配置多个虚拟机,虚拟机中设有对应的前端驱动模块和驱动接口,其中:

前端驱动模块用于创建虚拟GPU;

虚拟GPU用于生成通用计算命令;

驱动接口用于在虚拟机内核态中截获通用计算命令;

进一步地,所述物理机包括虚拟化程序模块和一个物理GPU,虚拟化程序模块用于接收虚拟机传来的通用计算命令,并调用物理机中的物理GPU处理通用计算命令;物理GPU用于实现虚拟机发送来的通用计算命令,并输出计算结果。

优选地,所述前端驱动模块通过virtio驱动创建虚拟GPU。

优选地,所述虚拟机通过virtio queue将通用计算命令发送到物理机,所述物理机通过virtio queue将通用计算结果返回给虚拟机。

以上所述仅为本发明示意性的具体实施方式,并非用以限定本发明的范围,任何本领域的技术人员在不脱离本发明构思和原则的前提下所做出的等同变化与修改,均应属于本发明保护的范围。

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