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示。

圖3.1

 

 

實現原理

WDDM驅動框架分用戶態驅動和內核態驅動,對WDDM過濾驅動我們要對其用戶態驅動 和內核態驅動都要進行過濾,兩個模式的過濾驅動分別實現不同的功能: 

(1)WDDM內核態過濾驅動用來實現虛擬顯示器、普通類型圖片(無需進行GPU硬件加速或渲染的圖片,如桌面、文件窗口等)、鼠標位置、鼠標形狀的捕獲。 

(2)WDDM用戶態過濾驅動用來實現3D全屏、Aero、GPU硬件加速或渲染類型圖片(如窗口化3D、視頻等)的捕獲。 增加過濾驅動後,整個WDDM顯示框架變成了如圖3.2所示。

圖3.2

 

實現效果

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章