当前位置:首页 > 虚拟化 > 正文

如何实现gpu虚拟化(cpu虚拟化已禁用是好还是坏)


一、GPU虚拟化上一篇文章讲解了计算虚拟化的CPU虚拟化和内存虚拟化。从某种意义上来说,GPU也是用来计算的。不过,与一般计算的CPU应用相比,GPU主要用于图形图像要求较高的场景,例如高清视频编解码、3D游戏、物理模拟等。本文将带您了解GPU虚拟化技术。
GPU技术在芯片行业的发展与CPU技术一样迅速,越来越多的用户开始部署虚拟桌面解决方案。因此,GPU技术与虚拟化技术的融合成为近年来虚拟化行业的热门技术话题。这样,将大大降低图形图像用户的成本,提高数据处理效率和数据安全性。所谓GPU虚拟化,就是将GPU卡的算力切片为多个逻辑上虚拟的GPU,即vGPU,并以vGPU为单位分配GPU的算力。单张GPU卡可以以vGPU为单位分配给多个虚拟机,让虚拟机运行3D软件、播放高清视频等,极大提升用户体验。
目前GPU虚拟化主要有以下技术:
DeviceSimulation
APIForwarding
GPUPass-Through
FullGPUVisualization
设备模拟直接将设备分配给指定的虚拟机。使用类似于CPU虚拟化中使用的二进制转换方法来执行模拟。然而,与CPU相比,GPU具有复杂的特性,并且不同设备提供商之间的GPU规格差异很大。GPU资源难以分割,仿真效率低。因此,典型的QEMU软件仅模拟VGA设备的基本功能。它通过半虚拟化图像缓区来加速特定的2D图像访问,这不能满足高效和共享虚拟化的要求。由于设备模拟没有一定的机制使虚拟机能够访问图形硬件,这些虚拟显示设备通过使用CPU和内存来相应地处理图形数据。
API转发将OpenGL等图形指令从客户虚拟机转发到虚拟机监视器VMM,实现虚拟化环境中的GPU共享。这种方法目前广泛应用于VMWare、VirutalBox等软件中。基于Chromium的VMGL和Oracle的VirtualBox,使用定制的OpenGL库替换原来的OpenGL库,将虚拟机中的OpenGL指令转发到虚拟机监视器执行。针对GPU在通用计算中的应用,rCUDA、vCUDA和gVirtuS都采用转发CUDA和OpenGL指令来解决在虚拟化环境中运行GPU通用计算程序的问题。但是API转发受到平台的限制。例如,Windows使用的接口是DirectX,它与OpenGL或CUDA不兼容。因此,Linux主机无法执行从Windows客户端转发的DirectX命令。同时,API转发会导致大量的上下文切换,造成较大的性能损失。
显卡透传,也叫显卡透传,是指绕过虚拟机管理系统,将GPU分配给某个虚拟机。只有虚拟机才有使用GPU的权限。这种独有的设备分配方法保留了GPU的完整性和独立性,接近非虚拟化条件下的性能,可用于通用计算。但显卡透传需要利用显卡的一些特殊细节,兼容性较差。它只能在某些GPU设备上使用。同时GPU透传只能将GPU分配给一台虚拟机,不能在多台虚拟机之间共享。其他虚拟机无法使用GPU提供的计算能力。由于图形直通实际上是由客户操作系统使用本机驱动程序和硬件,因此它缺乏必要的中间层来跟踪和维护GPU状态,并且不支持实时迁移等高级虚拟机功能。
显卡虚拟化就是对显卡进行切片,并将这些显卡时间片分配给虚拟机使用的过程。由于支持显卡虚拟化的显卡一般可以根据需要划分为不同规格的时间片,从而可以分配给多个虚拟机使用。GPU全虚拟化允许虚拟机直接访问性能敏感资源(例如GPU访问显存),基本解决了透传与共享之间的矛盾。例如,类似于IO虚拟化的SR-IOV技术,通过影子页表隔离每个虚拟GPU的访问空间,使得大多数命令执行不会受到虚拟机监视器的干扰,因此虚拟GPU可以获得接近非虚拟表演。优化条件下的性能。
不同的显卡厂商实现全虚拟化的方式不同。例如,AMD使用SR-IOV(单根虚拟化)技术在其最新的GPU上实现;Intel采用KVMGT技术来实现,Nvidia采用GPUvm/GRID技术来实现。