摘要
VDI桌面虚拟化中需要硬件GPU的运算能力增强图像运算处理能力,在普通VDI场景下,QXL显卡使用CPU模拟GPU,在图像指令处理性能上难以满足各类用户的需求。VDI技术支持硬件GPU行业中主要有GPU直通、共享GPU、vGPU三种方案,现在需要软件赋予VDI图像IP化传输的能力,本篇文章是要解决在VDI的GPU直通和vGPU两种场景下如何让spice协议正常工作问题。
本文通过实现win7、win10下的WDDM过滤驱动,以及将原先的虚机显卡设备驱动qxl驱动改装成PCI驱动,成功解决了spice对GPU直通、vGPU场景的支持问题,且支持不同厂商类型的GPU,不再过度依赖显卡厂商的支持,例如虚拟显示器、高效截屏。
概述
该技术产生的背景
随着我们同NVIDIA合作,产品正式支持了3D场景,然而我们的3D方案在市场上并没有取得很好的反响,主要原因是成本过于高昂,客户基本都无法接受,成本过高主要原因在于NVIDIA的昂贵授权及显卡费用,他们从中获取了绝大部分利润,所以研究低成本3D方案,增加产品利润是我们目前需要研究的重中之重。为摆脱对NVIDIA公司vGPU显卡的依赖,我们可以采用诸如:
- AMD的MxGPU方案
- AMD的消费级显卡直通方案
- NVIDIA的消费级显卡直通方案
- Intel的kvmgt方案
目前我们正在测试的MxGPU不支持硬件编码,这就造成我们无法像使用NVIDIA vGPU一样采用全屏硬件编码的方式实现协议,所以只能通过走我们的2D协议来实现。
为了做到在显示协议层面摆脱对显卡厂商的依赖,我们需要自行研究一些技术的实现来替代显卡厂商的上实现,我们需要解决spice无法显示问题、虚机分辨率过低且无法设置问题,同时需要达到高效显示性能和同物理机无差显示效果。
spice显示问题
在普通VDI场景下,spice协议是同虚拟显卡QXL设备对接,由装在QXL设备上的qxl驱动截获图形指令,然后封装成qxl指令发送到spiceserver进行压缩并传输到spiceclient进行显示,整个框架如图2.1所示,但是在vGPU和GPU直通场景的VDI下,有实际的GPU作为虚机的显卡驱动,由于需要用到物理GPU的渲染能力,qxl设备就无法充当显卡来使用了,造成了spice协议没了图片数据源头,其显示功能也就无法正常工作,解决这个问题的根本就是如何让qxl设备正常工作,且通过QXL设备的图片是经由物理GPU渲染的。
虚机分辨率无法设置问题
我们目前考虑两种方案,一种是自带显示器的显卡,比如MXGPU,还有一种消费级显卡,它本身是不带GPU的,在GPU直通场景下,VDI服务器上会插多张显卡,每张显卡透传到一个虚机上,在该场景下显卡上是不会插显示器的,部分厂商显卡驱动(例如AMD的消费级显卡)在显卡没有插显示器的情况下,会呈现出虚机支持的分辨率特别低,几乎不能使用,且无法自由切换显示器分辨率,在此场景下,若想要让虚机支持正常的显示分辨率,且可以对这些分辨率自由切换,则需要开发出“插”在物理GPU上的虚拟显示器,如果虚拟的显示器不是“插”在物理GPU上则该虚拟显示器上的图片不是经由物理GPU渲染的。
面向市场面临的问题
- 采用vGPU及GPU直通的目的是为了提升软件兼容性及渲染效果,高性能的VDI显示是必不可少的。
- 屏幕数据的采集效率,需要达到基本的1080P 60HZ及以上,为了保持spice协议的带宽不至于过大,需要传输图片的变化区域而不是全屏区域。
- 软件在兼容性上需要兼容各类工程类软件、3D软件、等对GPU依赖度较高的软件,同时需支持3D全屏、win7毛玻璃效果显示。
文章出处登录后可见!