详解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应用程序,其作用包括:
此外,客户端驱动在第一个API调用到来之前,首先到管理端索取GPU资源。每一个独立的调用过程都必须到宿主管理端驱动申请资源,以实现对GPU资源和任务的实时调度。 此外,客户端驱动同时设置了vGPU用来维护与显卡相关的软硬件状态。vGPU本身实质上仅仅是一个键值对的数据结构,在其中存储了当前使用的地址空间、显存对象、内存对象等,同时记录了API的调用次序。当计算结果返回时,客户端驱动会根据结果更新vGPU。 2.3.2、服务器端 服务端组件位于特权虚拟机(XenServer术语:特权域)中的应用层。特权虚拟机可以直接与硬件交互,因此服务端组件可以直接操纵物理GPU来完成通用计算任务。 (编辑:西安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |