本發(fā)明涉及一種GPU虛擬化實(shí)現(xiàn)系統(tǒng)及方法。
背景技術(shù):
在GPU(Graphics Processing Unit圖形處理器)虛擬化領(lǐng)域,目前存在三類典型的技術(shù)方案。
(1)NVIDIA主導(dǎo)的GRID GPU虛擬化技術(shù)
NVIDIA的GPU虛擬化方案基于其特殊設(shè)計(jì)的一款GPU顯卡,該類型GPU可以模擬若干GPU的能力,從而同時(shí)為若干臺(tái)虛擬機(jī)提供服務(wù),這些模擬出來的GPU單元稱為vGPU。每臺(tái)虛擬機(jī)綁定一個(gè)獨(dú)立的vGPU,使得GUEST操作系統(tǒng)和其中運(yùn)行的3D應(yīng)用直接使用vGPU的處理能力,達(dá)到接近于物理計(jì)算機(jī)使用本地硬件GPU處理的效果體驗(yàn)。
目前,Citrix、VMware以及Microsoft(RemoteFX)都基于GRID硬件,推出了自己的桌面/應(yīng)用虛擬化方案,以提升其產(chǎn)品對(duì)3D應(yīng)用的支持能力。
GRID GPU虛擬化技術(shù)已經(jīng)取得一些商業(yè)化應(yīng)用,但在實(shí)際中主要面臨成本過高的問題。以入門級(jí)GRID K1顯卡(支持8個(gè)vGPU)為例,目前其市場價(jià)格在一萬元左右。而實(shí)際中,虛擬化環(huán)境需要支持的客戶虛擬機(jī)數(shù)量可能達(dá)到數(shù)十臺(tái)至上百臺(tái),所以顯卡的投入會(huì)占據(jù)建設(shè)投資的主要比重。同時(shí),在服務(wù)器上額外增加GRID卡,通常要受到服務(wù)器類型、設(shè)計(jì)能力等因素的影響,PCI總線能力、內(nèi)存容量等都是軟硬件升級(jí)方案需要考慮的方面,這也顯著增加了相關(guān)成本和實(shí)施的復(fù)雜性。
(2)INTEL的XENGT/KVMGT GPU虛擬化技術(shù)方案
Intel XENGT/KVMGT方案的主要原理是,在虛擬化層為每臺(tái)虛擬機(jī)模擬一塊獨(dú)立GPU顯卡(以下也稱為vGPU),vGPU對(duì)上層應(yīng)用提交的3D操作請(qǐng)求,按照其類型識(shí)別為兩類:顯存操作請(qǐng)求和寄存器IO操作請(qǐng)求。對(duì)于顯存操作請(qǐng)求,直接映射操作宿主機(jī)層硬件GPU中的一塊對(duì)應(yīng)顯存,稱為Passthrough方式,由于跨過中間若干環(huán)節(jié),可以減少時(shí)間資源的消耗,提高整體處理效率;對(duì)于寄存器IO操作請(qǐng)求,采用陷入再模擬的方式統(tǒng)一安排調(diào)度,稱為Trap方式,達(dá)到一套硬件GPU計(jì)算單元分時(shí)復(fù)用的目的。所以,XENGT/KVMGT方案試圖通過一塊成本較低GPU卡,同時(shí)支持多臺(tái)虛擬機(jī)對(duì)GPU的需求。
該方案面臨的主要問題是,必須依賴于Intel特定型號(hào)的芯片支持。Intel的GPU是與CPU集成的,不同型號(hào)用途的CPU搭載相應(yīng)的GPU或者根本沒有集成GPU。對(duì)于服務(wù)器而言,出于用途和成本考慮,其使用的CPU大多不集成GPU。因而在實(shí)際環(huán)境中,XENGT/KVMGT技術(shù)的應(yīng)用推廣具有很大的局限性。
(3)利用純軟件庫模擬GPU
前面所述兩種技術(shù)方案最終都需要硬件GPU支持,與它們相對(duì)應(yīng),還有一種純軟件模擬的技術(shù)方案。其原理是:在API層實(shí)現(xiàn)一個(gè)軟件庫,使得在沒有GPU或僅具備低端GPU的設(shè)備上,可以模擬運(yùn)行3D應(yīng)用。最典型的實(shí)現(xiàn)是MESA,一個(gè)用于模擬OpenGL設(shè)備的開源軟件庫,它最基本的運(yùn)行模式是純軟件模擬方式;Microsoft的Directx也支持類似的軟設(shè)備模擬模式。這類軟件庫無論是安裝到虛擬機(jī)操作系統(tǒng)還是實(shí)體機(jī)操作系統(tǒng)中,都可以模擬GPU能力,從而運(yùn)行各種主流3D應(yīng)用。
純軟件庫模擬GPU技術(shù),其最大的問題是性能很差,因而主要用于軟件調(diào)試環(huán)境或作為硬件GPU部分特性的補(bǔ)充;目前不適合應(yīng)用到實(shí)際生產(chǎn)環(huán)境中。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明為了解決上述問題,提出了一種GPU虛擬化實(shí)現(xiàn)系統(tǒng)及方法,本發(fā)明為虛擬機(jī)提供虛擬GPU能力,支持主流3D應(yīng)用的流暢運(yùn)行。能夠適應(yīng)現(xiàn)實(shí)情況,不要求服務(wù)器外接或內(nèi)置GPU硬件;從vGPU運(yùn)行效率出發(fā),整體上調(diào)整了系統(tǒng)虛擬化的體系結(jié)構(gòu),克服傳統(tǒng)軟件模擬庫效率低下的問題。
為了實(shí)現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
一種GPU虛擬化實(shí)現(xiàn)系統(tǒng),包括vGPU驅(qū)動(dòng)模塊、vGPU前端模塊以及vGPU后端模塊,其中:
所述vGPU驅(qū)動(dòng)模塊,隸屬于客戶機(jī)操作系統(tǒng),向應(yīng)用層提供vGPU支持的操作類型和支持的級(jí)別,同時(shí)截獲虛擬設(shè)備層的3D請(qǐng)求,同時(shí)確認(rèn)虛擬設(shè)備的特性信息;
所述vGPU前端模塊,被配置為模擬能夠被客戶機(jī)操作系統(tǒng)發(fā)現(xiàn)的GPU顯卡設(shè)備,具備PCI設(shè)備特性、VGA設(shè)備特性以及GPU設(shè)備特性,為vGPU驅(qū)動(dòng)模塊和vGPU后端模塊提供銜接渠道;
所述vGPU后端模塊,被配置為基于物理層硬件,通過調(diào)度并處理vGPU前端模塊提交的3D請(qǐng)求,對(duì)服務(wù)器的物理CPU進(jìn)行分組,然后選擇其中一組CPU專用于GPU功能模擬從而最終完成vGPU功能。
所述vGPU后端模塊,被配置在宿主機(jī)操作系統(tǒng)內(nèi),與物理層通訊,同時(shí)與客戶機(jī)虛擬設(shè)備層的vGPU前端模塊通訊,所述vGPU前端模塊接收客戶機(jī)操作系統(tǒng)的vGPU驅(qū)動(dòng)模塊發(fā)出的驅(qū)動(dòng)請(qǐng)求。
所述vGPU前端模塊,被配置為通過Qemu模擬向vGPU驅(qū)動(dòng)模塊提供ROM、RAM和I/O寄存器組三種形式的交互接口,所述ROM提供vGPU顯卡的硬件信息和資源設(shè)置,RAM提供顯示資源緩沖區(qū),I/O寄存器組提供刷新命令和配置命令。
所述vGPU前端模塊與vGPU后端模塊共享內(nèi)存實(shí)現(xiàn)通信,所述共享內(nèi)存提供命令隊(duì)列和資源緩存兩種形式的接口,命令隊(duì)列負(fù)責(zé)傳遞操作命令,資源緩存負(fù)責(zé)維護(hù)與命令相關(guān)的資源。
所述vGPU前端模塊通過Qemu進(jìn)程通過共享內(nèi)存接口發(fā)出服務(wù)請(qǐng)求,vGPU后端模塊為流水線進(jìn)程,基于共享內(nèi)存接口響應(yīng)請(qǐng)求,提供GPU服務(wù),前端Qemu進(jìn)程由支持虛擬機(jī)的CPU組負(fù)責(zé)調(diào)度運(yùn)行;流水線進(jìn)程專門由Backend組CPU運(yùn)行,兩進(jìn)程采用并發(fā)運(yùn)行模式。
所述vGPU驅(qū)動(dòng)模塊提供一個(gè)支持特性集,說明vGPU能夠支持的操作類型和支持的級(jí)別,如果集合中標(biāo)記了對(duì)某項(xiàng)特性的支持,則必須在vGPU前端模塊和vGPU后端模塊的實(shí)現(xiàn)中支持此特性。
所述vGPU前端模塊在虛擬機(jī)啟動(dòng)階段被客戶機(jī)操作系統(tǒng)發(fā)現(xiàn),其被配置為表現(xiàn)為掛載在一級(jí)PCI總線的設(shè)備,具備獨(dú)立的開發(fā)商型號(hào)和設(shè)備型號(hào),同時(shí)保證vGPU前端模塊模擬的信息與vGPU驅(qū)動(dòng)模塊指定的信息一致。
所述vGPU前端模塊被設(shè)置有VGA設(shè)備特性,通過修改虛擬化設(shè)施中的顯存資源地址范圍,I/O寄存器地址范圍和中斷向量表地址范圍來實(shí)現(xiàn)。
所述vGPU前端模塊被設(shè)置有GPU設(shè)備特性,當(dāng)增加顯存段或顯存頁表機(jī)制時(shí),vGPU前端模塊能夠任意分配顯存資源,滿足GPU對(duì)渲染目標(biāo)平面和紋理操作的要求,支持GPU特性集合的設(shè)置與維護(hù)。
一種GPU虛擬化實(shí)現(xiàn)方法,包括以下步驟:
(1)進(jìn)行宿主機(jī)操作系統(tǒng)的進(jìn)程綁定CPU操作,對(duì)物理CPU進(jìn)行分組使用;
(2)利用一個(gè)獨(dú)立進(jìn)程來承載GPU的計(jì)算能力,作為vGPU后端,構(gòu)建支持多線程/多上下文的內(nèi)存區(qū)域與3D處理流水線;
(3)修改虛擬化設(shè)施的設(shè)備特性,向上層驅(qū)動(dòng)提供I/O寄存器組和內(nèi)存映射方式兩種接口,利用基于內(nèi)存的前后端協(xié)同通信方式與vGPU后端通信;
(4)以vGPU前端為基礎(chǔ),向操作系統(tǒng)和應(yīng)用層報(bào)告3D方面的支持特性集,并把3D操作請(qǐng)求轉(zhuǎn)給vGPU前端處理,在驅(qū)動(dòng)層截獲系統(tǒng)渲染請(qǐng)求數(shù)據(jù)和進(jìn)程渲染請(qǐng)求數(shù)據(jù),基于Spice協(xié)議轉(zhuǎn)至終端完成實(shí)際渲染。
所述步驟(1)中,對(duì)物理CPU分為三組使用,具體包括第一組用于支持虛擬機(jī)、第二組用于支持vGPU和第三組用于支持宿主機(jī)常規(guī)進(jìn)程。
本發(fā)明的有益效果為:
(1)相對(duì)于GRID技術(shù)和XENGT/KVMGT等硬件輔助技術(shù),本發(fā)明不要求外插/內(nèi)置GRID顯卡,也不要求升級(jí)更換搭載具備GPU功能的CPU型號(hào)。因而在適應(yīng)性和實(shí)施成本控制方面具備優(yōu)勢;
(2)針對(duì)現(xiàn)有軟件庫模擬方式性能低的問題,本發(fā)明以調(diào)整系統(tǒng)虛擬化體系結(jié)構(gòu)的方式,在物理層隔離出若干物理CPU專門用于執(zhí)行GPU功能,解決因?yàn)樘摂M機(jī)/進(jìn)程上下文切換導(dǎo)致的無謂損耗問題。同時(shí),這組CPU與虛擬機(jī)使用的CPU組并行工作,原理上相當(dāng)于真實(shí)GPU與CPU協(xié)同并行工作的方式,有利3D系統(tǒng)處理性能的發(fā)揮;
(3)本發(fā)明在驅(qū)動(dòng)層截獲3D請(qǐng)求的高級(jí)語義,通過合并優(yōu)化請(qǐng)求,顯著的提升3D處理效率。
附圖說明
圖1為本發(fā)明的整體邏輯框架示意圖;
圖2為本發(fā)明的CPU分組控制示意圖;
圖3為本發(fā)明的vGPU驅(qū)動(dòng)與vGPU前端的交互過程示意圖;
圖4為本發(fā)明的vGPU前端與vGPU后端的交互過程示意圖。
具體實(shí)施方式:
下面結(jié)合附圖與實(shí)施例對(duì)本發(fā)明作進(jìn)一步說明。
現(xiàn)有主流的GPU虛擬化技術(shù),可分為兩類。一類技術(shù)要求在服務(wù)器上外接或內(nèi)置GPU硬件,但是由于實(shí)際環(huán)境中的服務(wù)器大多數(shù)沒有GPU(或相當(dāng)于GPU的硬件),升級(jí)擴(kuò)展服務(wù)器必須付出很高的成本,而且能否升級(jí)還要受到許多因素的制約;另一類技術(shù)是純軟件方法,直接在API層通過軟件庫模擬GPU的3D處理能力,雖然不用升級(jí)硬件,但是效率很低,不能滿足實(shí)際生產(chǎn)環(huán)境的要求。
本發(fā)明的任務(wù)是提出一種GPU虛擬化技術(shù)方案,為虛擬機(jī)提供虛擬GPU能力,支持主流3D應(yīng)用的流暢運(yùn)行。相對(duì)于現(xiàn)有的第一類方案,本發(fā)明適應(yīng)現(xiàn)實(shí)情況,不要求服務(wù)器外接或內(nèi)置GPU硬件;與第二類方案單純?cè)贏PI層實(shí)現(xiàn)功能不同,本發(fā)明從vGPU運(yùn)行效率出發(fā),整體上調(diào)整了系統(tǒng)虛擬化的體系結(jié)構(gòu),克服傳統(tǒng)軟件模擬庫效率低下的問題。
本發(fā)明整體邏輯框架如圖1所示,包括vGPU驅(qū)動(dòng)、vGPU前端以及后端三個(gè)部分,分別屬于客戶機(jī)操作系統(tǒng)、客戶機(jī)虛擬設(shè)備以及宿主機(jī)操作系統(tǒng)這三個(gè)層次,此外整個(gè)體系最終需要物理層CPU和內(nèi)存等硬件資源的支撐,但是不要求具備硬件GPU。上述各部分相互協(xié)作,共同實(shí)現(xiàn)vGPU功能。
(1)vGPU驅(qū)動(dòng)
vGPU驅(qū)動(dòng)屬于客戶機(jī)操作系統(tǒng)(GUEST OS)的一部分,驅(qū)動(dòng)的框架遵循客戶機(jī)操作系統(tǒng)要求的驅(qū)動(dòng)模型規(guī)范,例如對(duì)于Windows需要遵循WDDM/XDDM模型。本發(fā)明以vGPU為基礎(chǔ),實(shí)現(xiàn)一個(gè)完整的驅(qū)動(dòng),為上層的操心系統(tǒng)及3D應(yīng)用提供各種3D能力支持。
vGPU驅(qū)動(dòng)承擔(dān)抽象硬件層(HAL)的接口功能,負(fù)責(zé)以下三項(xiàng)功能:
a)向應(yīng)用層報(bào)告vGPU的能力。3D應(yīng)用在實(shí)際使用GPU之前,都會(huì)首先查詢GPU能力,然后決定是否進(jìn)入相應(yīng)的硬件協(xié)處理流程。因而vGPU驅(qū)動(dòng)必須提供一個(gè)支持特性集,說明vGPU能夠支持的操作類型和支持的級(jí)別。一旦集合中標(biāo)記了對(duì)某項(xiàng)特性的支持,則必須在vGPU的前后端實(shí)現(xiàn)中支持此特性。該集合的定制需要根據(jù)實(shí)際需要,在支持范圍和實(shí)現(xiàn)代價(jià)之間權(quán)衡。對(duì)于輕量級(jí)的3D應(yīng)用場景,定義基本級(jí)集合,僅包含最基礎(chǔ)的3D支持特性;對(duì)于需要使用專業(yè)3D軟件的場景,則必須實(shí)現(xiàn)包含更多特性的高級(jí)特性集合。
b)截獲3D請(qǐng)求。驅(qū)動(dòng)層相對(duì)于設(shè)備層,更接近于應(yīng)用,因而可以截獲高級(jí)語義的3D請(qǐng)求。高級(jí)語義3D請(qǐng)求相對(duì)數(shù)量少,而且容易進(jìn)行合并或優(yōu)化。驅(qū)動(dòng)最終把處理后的請(qǐng)求轉(zhuǎn)向vGPU前端進(jìn)行下一步的處理。這樣的效果是:簡化vGPU設(shè)備的接口設(shè)計(jì),消除不必要的中間環(huán)節(jié),并能顯著提高效率。
c)綁定特定的關(guān)鍵信息。這些關(guān)鍵信息主要包括:開發(fā)商標(biāo)識(shí)(VendorID),設(shè)備類型標(biāo)識(shí)(DeviceID),資源地址信息等。它們必須與vGPU設(shè)備的前后端準(zhǔn)備設(shè)置的特性相一致,以避免沖突。
(2)vGPU前端
vGPU前端,模擬一個(gè)可以被客戶機(jī)操作系統(tǒng)發(fā)現(xiàn)的GPU顯卡設(shè)備,實(shí)現(xiàn)三個(gè)層次的特性,包括PCI設(shè)備特性、VGA設(shè)備特性以及GPU設(shè)備特性。從實(shí)現(xiàn)角度,vGPU前端功能主要由虛擬化軟件設(shè)施的設(shè)備虛擬化模塊支持。因此具體特性的實(shí)現(xiàn)需要基于現(xiàn)有虛擬化軟件設(shè)施進(jìn)行改造,當(dāng)前最流行的開源虛擬化軟件包括KVM和XEN兩類,它們的設(shè)備虛擬化設(shè)施實(shí)際都是Qemu,因此vGPU前端的實(shí)現(xiàn)主要集中在對(duì)Qemu的改造上。
a)PCI設(shè)備特性。vGPU作為PCI設(shè)備,首先應(yīng)當(dāng)在虛擬機(jī)啟動(dòng)階段被客戶機(jī)操作系統(tǒng)發(fā)現(xiàn)。vGPU必須表現(xiàn)為掛載在一級(jí)PCI總線的設(shè)備,具備獨(dú)立的開發(fā)商型號(hào)和設(shè)備型號(hào),以區(qū)別于現(xiàn)有的其它設(shè)備。實(shí)現(xiàn)方法是,修改虛擬化設(shè)施中的vgaBIOS以及顯卡設(shè)備模型,使之支持指定的開發(fā)商代號(hào)ID和設(shè)備型號(hào)ID,并具備報(bào)告I/O資源和Memory資源的能力。vGPU模擬的信息必須與vGPU驅(qū)動(dòng)指定的信息一致,以此確保在虛擬機(jī)操作系統(tǒng)的啟動(dòng)和運(yùn)行階段,能夠按照PCI設(shè)備正常發(fā)現(xiàn)vGPU和完成驗(yàn)證檢查,避免發(fā)生沖突。
b)VGA設(shè)備特性。GPU顯卡的基礎(chǔ)功能是傳統(tǒng)的VGA顯卡功能,一方面vGPU顯卡通常仍然需要利用VGA的部分功能完成某些顯示相關(guān)的工作;另一方面客戶機(jī)操作系統(tǒng)會(huì)在三種情況下運(yùn)行在VGA這種低級(jí)模式,包括啟動(dòng)階段、顯示模式切換階段以及系統(tǒng)異常階段。VGA設(shè)備特性實(shí)現(xiàn)方法是,修改虛擬化設(shè)施中的vgaBIOS以及顯卡設(shè)備模型,按照標(biāo)準(zhǔn)VGA以及VESA的規(guī)范,完成寄存器功能和中斷調(diào)用功能的模擬。現(xiàn)有的虛擬化設(shè)施軟件通常都已經(jīng)具備這些特性,僅需要對(duì)可能沖突的部分特性進(jìn)行調(diào)整。包括:顯存資源地址范圍,I/O寄存器地址范圍和中斷向量表地址范圍。
c)GPU設(shè)備特性。vGPU前端作為虛擬設(shè)備,其職責(zé)為銜接上層的vGPU驅(qū)動(dòng)和下層的vGPU后端。同時(shí)作為虛擬設(shè)備,不需要實(shí)現(xiàn)物理GPU全部的復(fù)雜功能。GPU設(shè)備特性可以基于現(xiàn)有的虛擬化軟件設(shè)施中的顯卡設(shè)備模型進(jìn)行修改,即修改Qemu。具體要求是,增加顯存段或顯存頁表機(jī)制,能夠任意分配顯存資源,滿足GPU對(duì)RenderTarget(渲染目標(biāo)平面)、Texture(紋理)操作的要求,支持GPU特性集合的設(shè)置與維護(hù)。
(3)vGPU后端
vGPU后端由運(yùn)行在宿主機(jī)中虛擬化軟件實(shí)現(xiàn),其職責(zé)是基于物理層硬件,通過調(diào)度并處理vGPU前端提交的3D請(qǐng)求,從而最終完成vGPU功能。
基本思路是,首先對(duì)服務(wù)器的物理CPU(顆/核)進(jìn)行分組,然后選擇其中一組CPU專用于GPU功能模擬。用于GPU功能模擬的CPU組,專門運(yùn)行3D流水線程序,不受其它進(jìn)程的搶占,與各虛擬機(jī)并發(fā)工作。
具體實(shí)現(xiàn)方法:
a)物理CPU分組控制。調(diào)整宿主機(jī)操作系統(tǒng)的CPU及進(jìn)程調(diào)度策略,把服務(wù)器的物理CPU分成三組,第一組專供虛擬機(jī)使用,即支持vCPU功能和通用的設(shè)備模擬功能,該CPU組維持經(jīng)典的系統(tǒng)虛擬化原理功能;第二組CPU則專門作為vGPU后端,完成GPU功能模擬,這是本發(fā)明原理的關(guān)鍵(該CPU組稱為BackEnd組)。修改調(diào)度策略的主要目的,是防止其它進(jìn)程或虛擬機(jī)被調(diào)度到BackEnd組,確保這組CPU的專用性;第三組支持宿主機(jī)操作系統(tǒng)的其它進(jìn)程,例如虛擬機(jī)管理、遠(yuǎn)程管理等工具進(jìn)程。CPU分組控制示意圖見圖2。
b)BackEnd組構(gòu)成專用CPU資源池。根據(jù)vGPU前端提交的請(qǐng)求負(fù)載情況,組中CPU資源動(dòng)態(tài)分配和伸縮,為前端提供足夠能力的服務(wù)。BackEnd組中物理CPU的數(shù)量不必固定,而可以是一個(gè)可以配置的范圍,這個(gè)范圍的主要決定因素是實(shí)際業(yè)務(wù)環(huán)境中3D應(yīng)用本身的輕重程度和平均業(yè)務(wù)量。
c)3D流水線功能。BackEnd組中CPU所運(yùn)行的進(jìn)程,由一組3D處理流水線模塊構(gòu)成。每一個(gè)流水線模塊,對(duì)應(yīng)完成3D處理的一個(gè)階段;階段之間通過預(yù)定義的輸入輸出格式進(jìn)行傳遞。流水線至少需要支持兩個(gè)階段:一個(gè)是頂點(diǎn)渲染階段,負(fù)責(zé)圖元位置信息的處理;另一個(gè)是像素渲染階段,負(fù)責(zé)圖元顏色內(nèi)容的處理。為適應(yīng)當(dāng)前占主流地位的定制流水線機(jī)制,對(duì)于這兩個(gè)階段還有一個(gè)特殊要求,必須支持外部渲染器(shader)代碼的嵌入。
vGPU驅(qū)動(dòng)、前端以及后端三個(gè)層次之間的交互方式,具體描述如下。
a)vGPU驅(qū)動(dòng)與vGPU前端的交互,如圖3所示。vGPU前端由Qemu模擬實(shí)現(xiàn),向驅(qū)動(dòng)提供三類形式的交互接口。其中,ROM負(fù)責(zé)提供vGPU顯卡的硬件信息和資源設(shè)置;RAM提供顯示資源緩沖區(qū);I/O寄存器組提供刷新命令、配置命令等。
b)vGPU前端與后端的交互,如圖4所示。vGPU的前端由Qemu模擬實(shí)現(xiàn),從宿主機(jī)角度,vGPU前端屬于Qemu進(jìn)程;而vGPU的后端是承載3D流水線功能的一組模塊,其運(yùn)行形式也是宿主機(jī)操作系統(tǒng)的進(jìn)程。因而,前后端的交互通信基于共享內(nèi)存實(shí)現(xiàn)。共享內(nèi)存提供兩種形式的接口,命令隊(duì)列和資源緩存。命令隊(duì)列負(fù)責(zé)傳遞操作命令,資源緩存負(fù)責(zé)維護(hù)大尺寸的資源。前端Qemu進(jìn)程通過共享內(nèi)存接口發(fā)出服務(wù)請(qǐng)求;后端流水線進(jìn)程,基于共享內(nèi)存接口響應(yīng)請(qǐng)求,提供GPU服務(wù)。前端Qemu進(jìn)程由支持虛擬機(jī)的CPU組負(fù)責(zé)調(diào)度運(yùn)行;后端流水線進(jìn)程專門由Backend組CPU運(yùn)行。前后端進(jìn)程是真正的并發(fā)運(yùn)行模式。
本發(fā)明的典型實(shí)施場景是,基于Linux宿主機(jī)操作系統(tǒng),以QEMU/KVM作為虛擬化設(shè)施,以Windows 7作為客戶機(jī)操作系統(tǒng),通過Spice虛擬桌面協(xié)議支持3D應(yīng)用的遠(yuǎn)程使用。以下以此為背景,說明本發(fā)明的最佳實(shí)施方式,主要包括以下四步。
(1)修改宿主機(jī)操作系統(tǒng)的調(diào)度策略
修改Linux操作系統(tǒng)的進(jìn)程CPU親和性設(shè)置,即進(jìn)程綁定CPU策略,對(duì)物理CPU(顆/核)分為三組使用。
a)第一組用于支持虛擬機(jī)。Qemu實(shí)質(zhì)上僅是宿主機(jī)操作系統(tǒng)中的一個(gè)普通進(jìn)程,可以利用taskset命令行工具完成虛擬機(jī)與CPU綁定。通常,根據(jù)運(yùn)行虛擬機(jī)的數(shù)量,分配相當(dāng)數(shù)量的CPU(顆或核)與之綁定,即典型情況下一對(duì)一。
b)第二組用于支持vGPU,即BACKEND組。根據(jù)實(shí)際業(yè)務(wù)環(huán)境中,3D應(yīng)用本身的輕重程度和3D請(qǐng)求業(yè)務(wù)量,決定組內(nèi)CPU的數(shù)量。
c)第三組用于支持宿主機(jī)常規(guī)進(jìn)程。作為虛擬機(jī)容器的服務(wù)器,其它用途的應(yīng)用進(jìn)程很少且負(fù)載輕,因此通常只要綁定一顆CPU即可。
(2)擴(kuò)展虛擬化設(shè)施軟件支持vGPU后端
實(shí)現(xiàn)一個(gè)獨(dú)立進(jìn)程,承載GPU的計(jì)算能力,配合Qemu完成vGPU后端功能。對(duì)于該進(jìn)程有兩個(gè)要求:
a)支持多線程/多上下文。每個(gè)線程對(duì)應(yīng)一個(gè)獨(dú)立的上下文。每個(gè)上下文內(nèi)容包括:作為顯存使用的一段內(nèi)存區(qū)域;獨(dú)立的寄存器組狀態(tài);其它內(nèi)部處理階段需要維護(hù)的必要狀態(tài)。
b)由若干個(gè)功能模塊構(gòu)成3D處理流水線。包括:矩陣變換模塊,光照處理模塊,裁剪和投影模塊,紋理映射模塊,像素光柵化模塊。模塊之間定義輸入輸出接口,基于內(nèi)存?zhèn)鬟f數(shù)據(jù)流。
(3)修改虛擬化設(shè)施軟件支持vGPU前端
基于現(xiàn)有Qemu中顯卡模型中的QXL實(shí)現(xiàn)模型,修改Qemu的vga設(shè)備模塊和vgaBIOS。對(duì)于原有的PCI設(shè)備特性、VGA設(shè)備特性,除了解決必要沖突之外,基本保持原有功能。對(duì)于GPU方面的特性,分別面向上層驅(qū)動(dòng)和下層的vGPU后端,重新構(gòu)建代碼。
面向上層驅(qū)動(dòng),需要提供兩種虛擬設(shè)備的接口方式,一是I/O寄存器組,支持vGPU特性的設(shè)置/獲取,flush等提交指令的執(zhí)行等;二是內(nèi)存映射方式,支持驅(qū)動(dòng)通過DMA或共享方式操作renderTarget(渲染目標(biāo)),texture(紋理)等顯存資源。面向下層的vGPU后端,實(shí)現(xiàn)基于內(nèi)存的前后端協(xié)同通信方式。
(4)開發(fā)vGPU驅(qū)動(dòng)
Windows7操作系統(tǒng)的顯示驅(qū)動(dòng)模型為WDDM,需要實(shí)現(xiàn)用戶態(tài)和內(nèi)核態(tài)兩級(jí)驅(qū)動(dòng)。驅(qū)動(dòng)的實(shí)現(xiàn)方法是,以vGPU前端為基礎(chǔ),向操作系統(tǒng)和應(yīng)用層報(bào)告3D方面的支持特性集,并合理的把3D操作請(qǐng)求轉(zhuǎn)給vGPU前端處理。同時(shí),適應(yīng)Spice協(xié)議中QXL加速要求,在驅(qū)動(dòng)層截獲系統(tǒng)渲染請(qǐng)求數(shù)據(jù)和進(jìn)程渲染請(qǐng)求數(shù)據(jù),基于Spice協(xié)議轉(zhuǎn)至終端完成實(shí)際渲染。
上述雖然結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式進(jìn)行了描述,但并非對(duì)本發(fā)明保護(hù)范圍的限制,所屬領(lǐng)域技術(shù)人員應(yīng)該明白,在本發(fā)明的技術(shù)方案的基礎(chǔ)上,本領(lǐng)域技術(shù)人員不需要付出創(chuàng)造性勞動(dòng)即可做出的各種修改或變形仍在本發(fā)明的保護(hù)范圍以內(nèi)。