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

GPU直通和虚拟化(cpu虚拟化要不要开)


一、GPU虚拟化上一篇文章讲解了计算机虚拟化的CPU虚拟化和内存虚拟化。在某种程度上,GPU也用于计算。不过,相比于一般计算的CPU应用,GPU主要用于图形图像需求较高的场景,例如高清视频编解码、3D游戏等。物理模拟等本文将带您了解GPU虚拟化技术。
在芯片行业,GPU技术的发展速度与CPU技术一样快,越来越多的用户开始部署虚拟桌面解决方案。因此,GPU技术与虚拟化技术的融合成为近年来虚拟化行业的热门技术话题,这样将大大降低图形图像用户的成本,并提高数据处理效率和数据的安全性。改善了。。所谓GPU虚拟化,就是将一块GPU卡的算力划分为多个逻辑上虚拟的GPU,即vGPU,并将GPU算力划分为vGPU单元。单个GPU卡可以以vGPU单元拆分为多个虚拟机,允许虚拟机运行3D软件、播放高清视频等,显着提升用户体验。
目前GPU虚拟化主要有以下技术:
DeviceSimulation
APIFforwarding
GPUPass-Through
FullGPUVisualization
设备模拟直接将设备分配给指定的虚拟机。模拟是使用类似于CPU虚拟化中使用的二进制转换方法来执行的。然而,与CPU相比,不同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对显存的访问),从本质上解决了吞吐量和分配之间的冲突。例如,类似于IO虚拟化的SR-IOV技术,通过影子页表隔离每个虚拟GPU的访问空间,因此大部分命令执行不会受到虚拟机监视器的干扰,因此虚拟GPU可以获得邻近非优化条件下的虚拟性能。
不同的显卡厂商实现全虚拟化的方式不同。例如,AMD在其最新的GPU中使用SR-IOV(单根虚拟化)技术来实现,Intel使用KVMGT技术来实现,Nvidia则使用GPUvm/GRID技术来实现;
二、gpu虚拟化的几种实现方式包括

实现GPU虚拟化的方法有很多种。下面我列出几种常用的方法:


1.**基于GPU的硬件虚拟化**:这是一种通过在GPU硬件级别实现虚拟化来配置多个虚拟GPU的方法。这种方法需要硬件支持,同时还需要操作系统和驱动程序的支持。其优点是性能损失小,但实现起来比较困难,需要硬件厂商的支持。


2.**基于GPU流量**:该方式允许直接从物理GPU获取资源,并将一部分GPU资源分配给每个VM。这种方法不需要任何额外的虚拟化软件,但确实需要BIOS级别的设置以及对底层硬件和操作系统的深入了解。


3.使用容器技术:Docker、Kubernetes等容器技术可用于GPU虚拟化。它提供了一种隔离和分配资源的方法,以便每个容器都可以拥有自己的GPU资源份额。这种方法对于深度学习等需要大量GPU资源的场景非常有用。


4.使用NVIDIA容器引擎:NVIDIA提供了一种称为NVIDIA容器引擎(NCE)的自定义容器技术。它通过使用NVIDIA软件套件将GPU资源与容器中运行的应用程序解耦,实现高效可靠的GPU资源分配。


5.使用GPU加速的云提供商:许多云提供商提供GPU加速的云服务,例如AWS的GravitonGPU云服务器、GCP的NVIDIAV100等。用户只需购买这些服务即可享受云端的高性能GPU资源。


以上是GPU虚拟化的几种常见实现方法。每种方法都有其优点和缺点,您选择的方法取决于您的需求、预算、技术能力和其他因素。同时请注意,每种方法都需要一定的学习和实践才能掌握。建议根据具体情况选择适合自己的方法。