GPU不支持虚拟化,gpu不支持虚拟化怎么办
虚拟机中不支持GPU虚拟化
尝试在虚拟机的linux系统中用intel cpu中itegrated gpu的hevc_qsv的功能,提示如下:
原因是: 虚拟机中不支持GPU的虚拟化 。
所以应该在直接装liunx的机器上运行hevc_qsv的功能。
成功时显示信息如下:
GPU支持虚拟化吗?云主机只有CPU/mem/存储指标,无gpu
vmware有gpu虚拟化技术,ctrix也有一套类似的技术,这个技术主要针对桌面虚拟化,常见的虚拟化是针对服务器的,并不需要3D性能。
GPU虚拟化
上一篇文章,讲解了计算虚拟化之CPU虚拟化和内存虚拟化。而GPU从某种意义上来讲,其作用也是用于计算,只不过同CPU应用用于通用计算相比,GPU则主要用于对图形和图像要求较高的场景,比如高清视频编解码、3D游戏、物理仿真等。本篇带领大家了解一下GPU虚拟化技术。
GPU技术在芯片行业中也如同CPU技术一样快速发展,而且越来越多的用户开始部署虚拟桌面方案。因此将GPU技术与虚拟化技术融合,是近年来虚拟化行业中比较热门的技术课题,通过此种方式,将大大降低图形图像用户的使用成本以及提高数据的处理效率和数据安全性。所谓GPU虚拟化,就是将一块GPU卡的计算能力进行切片,分成多个逻辑上虚拟的GPU,即vGPU,以vGPU为单位分配GPU的计算能力。以vGPU为单位可以将单块GPU卡分配给多台虚拟机使用,使得虚拟机能够运行3D软件、播放高清视频等,极大地提升了用户体验。
目前GPU虚拟化主要有如下几种技术:
Device Simulation
API Forwarding
GPU Pass-Through
Full GPU Visualization
设备模拟直接将设备分配给指定的虚拟机。采用类似于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转发引起大量的上下文切换,性能损失较大。
显卡穿透(pass-through)也叫显卡直通,是指绕过虚拟机管理系统,将GPU单独分配给某一虚拟机,只有该虚拟机拥有使用GPU的权限,这种独占设备的方法分配方式保存了GPU的完整性和独立性,在性能方面与非虚拟化条件下接近,且可以用来进行通用计算。但是显卡直通需要利用显卡的一些特殊细节,同时兼容性差,仅在部分GPU中设备可以使用。同时GPU透传只能将GPU分配给一台虚拟机使用,无法在多台虚拟机间共享,其他虚拟机无法使用到GPU提供的计算能力。由于显卡直通实际上是由客户操作系统使用原生驱动和硬件,缺少必要的中间层来跟踪和维护GPU状态,它不支持实时迁移等虚拟机高级特性。
显卡虚拟化就是将显卡进行切片,并将这些显卡时间片分配给虚拟机使用的过程。由于支持显卡虚拟化的显卡一般可以根据需要切分成不同的规格的时间片,因此可以分配给多台虚拟机使用。GPU全虚拟化允许虚拟机直接访问对性能敏感的资源(如GPU访问显存),基本解决直通和共享的矛盾。比如类似于IO虚拟化的SR-IOV技术,通过影子页表隔离每个虚拟GPU的访问空间,从而大多数的命令执行会不受虚拟机监控器的干预,因此虚拟GPU就可以获得接近非虚拟化情况下的性能。
不同的显卡厂商,其全虚拟化的实现方式不同。比如AMD在其最新的GPU上采用了SR-IOV(单根虚拟化)技术来实现;Intel则采用KVMGT技术来实现,Nvidia采用了GPUvm/GRID技术来实现。
cpu不支持虚拟化技术该怎么办?
如果CPU不支持虚拟化技术的话,可以尝试以下方法:
1、CPU不支持虚拟化技术的电脑系统也是可以安装虚拟机的,因为虚拟机并不完全依赖虚拟化技术,但是在性能上会弱一些。
2、通常来说,虚拟机的性能受到限制,其中CPU性能只在其次,关键是要看磁盘性能和内存大小。可以通过改善安装虚拟机的主机其它部件性能(如内存加大,配置SSD固态硬盘)。
3、直接更换一个支持虚拟化技术的CPU。
CPU发展过程中不可不提到的就是虚拟化技术。CPU虚拟化技术也与目前VMware?Workstation等同样能达到虚拟效果的软件不同,是一个巨大的技术进步,具体表现在减少软件虚拟机相关开销和支持更广泛的操作系统方面。纯软件虚拟化解决方案存在很多限制。“客户”操作系统很多情况下是通过VMM(Virtual Machine Monitor,虚拟机监视器)来与硬件进行通信,由VMM来决定其对系统上所有虚拟机的访问。(注意,大多数处理器和内存访问独立于VMM,只在发生特定事件时才会涉及VMM,如页面错误。)在纯软件虚拟化解决方案中,VMM在软件套件中的位置是传统意义上操作系统所处的位置,而操作系统的位置是传统意义上应用程序所处的位置。这一额外的通信层需要进行二进制转换,以通过提供到物理资源(如处理器、内存、存储、显卡和网卡等)的接口,模拟硬件环境。这种转换必然会增加系统的复杂性。此外,客户操作系统的支持受到虚拟机环境的能力限制,这会阻碍特定技术的部署,如64位客户操作系统。在纯软件解决方案中,软件堆栈增加的复杂性意味着,这些环境难于管理,因而会加大确保系统可靠性和安全性的困难。
而CPU虚拟化技术是一种硬件方案,支持虚拟技术的CPU带有特别优化过的指令集来控制虚拟过程,通过这些指令集,VMM会很容易提高性能,相比软件的虚拟实现方式会很大程度上提高性能。CPU虚拟化技术可提供基于芯片的功能,借助兼容VMM软件能够改进纯软件解决方案。由于虚拟化硬件可提供全新的架构,支持操作系统直接在上面运行,从而无需进行二进制转换,减少了相关的性能开销,极大简化了VMM设计,进而使VMM能够按通用标准进行编写,性能更加强大。另外,在纯软件VMM中,目前缺少对64位客户操作系统的支持,而随着64位处理器的不断普及,这一严重缺点也日益突出。而CPU虚拟化技术除支持广泛的传统操作系统之外,还支持64位客户操作系统。
虚拟化技术是一套解决方案。完整的情况需要CPU、主板芯片组、BIOS和软件的支持,例如VMM软件或者某些操作系统本身。即使只是CPU虚拟化技术,在配合VMM的软件情况下,也会比完全不支持虚拟化技术的系统有更好的性能。