WDDM过滤驱动在GPU VDI上的运用(虚拟显示器+高性能截屏)

背景

之前有做windows下的一个WDDM过滤驱动,主要用于云桌面,我们当前使用的是KVM的虚拟化+spice的传输协议。

VDI桌面虚拟化中需要硬件GPU的运算能力增强图像运算处理能力,在普通VDI场景下,QXL显卡使用CPU模拟GPU,在图像指令处理性能上难以满足各类用户的需求。VDI技术支持硬件GPU行业中主要有GPU直通、共享GPU、vGPU三种方案,现在需要软件赋予VDI图像IP化传输的能力,所以本次采用WDDM过滤驱动解决了在VDI的GPU直通和vGPU两种场景下如何让spice协议正常工作问题。

需要解决的技术难点

虚机分辨率无法设置问题

在GPU直通场景下,VDI服务器上会插多张显卡,每张显卡透传到一个虚机上,在该场景下显卡上是不会插显示器的,部分厂商显卡驱动在显卡没有插显示器的情况下,会呈现出虚机支持的分辨率特别低,几乎不能使用,且无法自由切换显示器分辨率,在此场景下,若想要让虚机支持正常的显示分辨率,且可以对这些分辨率自由切换,则需要实现对客户端显示器到物理GPU的重定向,就好像客户端使用的显示器是真实插在host端的物理GPU上一样,我把它叫做显示器重定向。

Spice显示问题

在普通VDI场景下,spice协议是同虚拟显卡QXL设备对接,由装在QXL设备上的qxl驱动截获图形指令,然后封装成qxl指令发送到spiceserver进行压缩并传输到spiceclient进行显示,整个框架如图2.1所示,但是在vGPU和GPU直通场景的VDI下,有实际的GPU作为虚机的显卡驱动,由于需要用到物理GPU的渲染能力,qxl设备就无法充当显卡来使用了,会造成spice协议没了图片数据源头,其显示功能也就无法正常工作,解决这个问题的根本就是如何让qxl设备正常工作,且通过QXL设备的图片是经由物理GPU渲染的。


图2.1

高性能的显示

采用vGPU及GPU直通的目的是为了提升软件兼容性及渲染效果,高性能的VDI显示是必不可少的,首先是屏幕数据的采集效率,需要达到基本的1080P 60HZ及以上,软件兼容性上需要兼容各类工程类、3D等对GPU依赖度较高的软件,同时需支持3D全屏、win7毛玻璃效果显示。

WDDM过滤驱动框架

框架

采用WDDM过滤驱动有如下原因:

在win7系统上,官方支持的最高效的截屏方式是mirror驱动框架,但是该驱动在win7上存在很多问题:无法支持Aero效果、无法支持3D全屏、无法支持DirectDraw硬件加速、软件兼容性不好等,所以我们需要寻找一种在截屏效率上能够同mirror驱动不相上下、且能和好的解决win7 mirror驱动存在的这些问题的框架。 通过WDDM过滤驱动,显示驱动的整个框架如图3.1示。


扫描二维码关注公众号,回复: 1826439 查看本文章

图3.1


实现原理

WDDM驱动框架分用户态驱动和内核态驱动,对WDDM过滤驱动我们要对其用户态驱动 和内核态驱动都要进行过滤,两个模式的过滤驱动分别实现不同的功能: 

(1)WDDM内核态过滤驱动用来实现虚拟显示器、普通类型图片(无需进行GPU硬件加速或渲染的图片,如桌面、文件窗口等)、鼠标位置、鼠标形状的捕获。 

(2)WDDM用户态过滤驱动用来实现3D全屏、Aero、GPU硬件加速或渲染类型图片(如窗口化3D、视频等)的捕获。 增加过滤驱动后,整个WDDM显示框架变成了如图3.2所示。

图3.2

实现效果







猜你喜欢

转载自blog.csdn.net/dailongjian2008/article/details/80865483