加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 综合聚焦 > 资源网站 > 空间 > 正文

详解GPU虚拟化技术

发布时间:2019-04-18 06:37:40 所属栏目:空间 来源:陶菘
导读:副标题#e# GPU英文名称为Graphic Processing Unit,GPU中文全称为计算机图形处理器,1999年由NVIDIA公司提出。 一、GPU概述 GPU这一概念也是相对于计算机系统中的CPU而言的,由于人们对图形的需求越来越大,尤其是在家用系统和游戏发烧友,而传统的CPU不能

XEN虚拟帧缓存是指XEN提供的一个虚拟的显示设备。该虚拟显示设备采用特权域的VNC服务器,因此该虚拟显示设备具有相似的VNC接口。客户机在XEN虚拟帧缓存中写入数据,然后通过VNC 协议来传输已修改的图片,最后通知前端进行相应区域的更新。这个虚拟帧缓存设备的源码是来自开源的Qemu。我们在XenServer上看见虚拟机的操作系统桌面界面,即是这种技术的显示。

虚拟网络计算机VNC 和XEN 虚拟帧缓存这两种模式至今在虚拟机中仍未提供一定的硬件图形加速能力。由于目前仍没有一个机制能使虚拟机进行访问图形硬件的能力,因此这些虚拟的显示设备都是通过使用CPU以及内存的方式对图形数据进行相应处理。并没有采用物理显示设备的功能。

然而VMGL这种模式已经实现了这种机制,这个机制通常被称为前端-后端虚拟化机制(Front-end virtualization)。VMGL这种模式采用这个机制将需要图形处理的数据发送到一个拥有硬件图形加速功能的虚拟监控机上进行相应的图形数据处理。目前存在的比较主流可用于GPU应用程序开发的图形处理接口有两类:OpenGL和Direct3D。

在这两类图形处理接口中,OpenGL是唯一一类能够在主流操作系统中跨平台操作的图形API接口。在虚拟机平台中,VMGL是首个针对OpenGL API进行虚拟化的项目。VMGL的工作原理是,它在客户端操作系统中部署了一个伪库(Fake Library)用来取代标准的OpenGL 库,伪库(Fake Library)拥有与标准的OpenGL库相同的接口,在客户端操作系统中的伪库也实现了指向远程服务器的宿主机操作系统的远程调用。

这样一来,所有的本地OPENGL调用都将被解释为对远程服务器的一次服务请求,远程服务器的宿主机操作系统拥有真正的OPENGL库、显卡驱动和物理硬件GPU,它负责完成OPENGL请求并将执行结果显示到屏幕上。由于VMGL在整个过程操作中都是完全透明的,因此调用OPENGL的应用程序不需要修改源代码也不需要进行二进制改写,无需为虚拟机平台作任何改动。

2.2、显卡直通

显卡直通也叫做显卡穿透(Pass-Through),是指绕过虚拟机管理系统,将GPU 单独分配给某一虚拟机,只有该虚拟机拥有使用GPU的权限,这种独占设备的方法分配方式保存了GPU的完整性和独立性,在性能方面与非虚拟化条件下接近,且可以用来进行通用计算。但是显卡直通需要利用显卡的一些特殊细节,同时兼容性差,仅在部分GPU 中设备可以使用。

Xen 4.0增加了VGA Passthrough技术,因此XenServer也拥有了该技术,XenServer的Passthrough 就是利用英特尔设备虚拟化(Intel VT-d)技术将显示设备暴露给某一个客户虚拟机,不仅其它客户虚拟机不能访问,就连宿主虚拟机也失去了使用该GPU的能力。它在客户虚拟机中实现了显卡的一些特殊细节,如VGA BIOS、文本模式、IO 端口、内存映射、VESA模式等,以支持直接访问。使用Xen Server的 VGA Pass-Through 技术的GPU执行效率高,功能全,但只能被单一系统独占使用,失去了设备复用的功能。VMware ESXi 中包括一个VM Direct Path I/O框架,使用该技术也可以将我们的显卡设备直通给某一虚拟机进行使用。

XenServer和VMware使用的是不同的技术但是实现的效果都是一样的,即将物理显卡设备直通给其中的某一虚拟机使用,以达到虚拟机进行3D显示和渲染的效果。

由于显卡直通实际上是由客户操作系统使用原生驱动和硬件,缺少必要的中间层来跟踪和维护GPU 状态,它不支持实时迁移等虚拟机高级特性。如XenServer Passthrough禁止执行Save/Restore/Migration 等操作。VMware的虚拟机中,一旦开启VMDirectPath I/O功能,其对应的虚拟机将失去执行挂起/恢复、实时迁移的能力。

2.3、显卡虚拟化(GPU虚拟化)

显卡虚拟化就是将显卡进行切片,并将这些显卡时间片分配给虚拟机使用的过程。由于支持显卡虚拟化的显卡一般可以根据需要切分成不同的规格的时间片,因此可以分配给多台虚拟机使用。其实现原理其实就是利用应用层接口虚拟化(API remoting),API重定向是指在应用层进行拦截与GPU相关的应用程序编程接口(API),通过重定向(仍然使用GPU)的方式完成相应功能,再将执行结果返回应用程序。

我们现在使用Citrix的3D桌面虚拟化解决方案中,大部分是使用NVIDIA公司提供的显卡虚拟化技术,即是vCUDA(virtual CUDA)技术,前面我们说过了CUDA框架,再此不在说明。vCUDA采用在用户层拦截和重定向CUDA API的方法,在虚拟机中建立物理GPU的逻辑映像——虚拟GPU,实现GPU资源的细粒度划分、重组和再利用,支持多机并发、挂起恢复等虚拟机高级特性。

其vCUDA的实现原理大概包括三个模块:CUDA客户端、CUDA服务端和CUDA管理端。以XenServer为例,在物理硬件资源上运行着一个VMM用于向上提供硬件映像,在VMM上运行着若干个虚拟机。其中一个虚拟机为特权虚拟机(Host VM),即为XenServer中的Domain 0,在虚拟机中运行的操作系统称为Host OS。

Host OS能够直接控制硬件,系统内安装着原生的CUDA库以及GPU驱动,使得Host OS可以直接访问GPU和使用CUDA。其它的虚拟机属于非特权虚拟机(Guest VM),其上运行的操作系统(Guest OS)不能直接操纵GPU。在这里我们将CUDA客户端称之为客户端驱动,CUDA服务端称之为宿主机的驱动,CUDA管理端称之为GPU管理器。

2.3.1、客户端

客户端驱动其实质就是我们安装在虚拟机比如Windows 7上的显卡驱动程序。主要的功能是在用户层提供针对CUDA API的库以及一个维护CUDA相关软硬件状态的虚拟GPU(vGPU)。客户端驱动直接面向CUDA应用程序,其作用包括:

  • 1)拦截应用程序中CUDA API调用;
  • 2)选择通信策略,为虚拟化提供更高层语义的支持;
  • 3)对调用的接口和参数进行封装、编码;
  • 4)对服务端返回的数据进行解码,并返回给应用。

此外,客户端驱动在第一个API调用到来之前,首先到管理端索取GPU资源。每一个独立的调用过程都必须到宿主管理端驱动申请资源,以实现对GPU资源和任务的实时调度。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读