GPU,也即圖形處理單元。不論在手機(jī)中,還是在電腦、筆記本上,GPU都發(fā)揮著不可替代的作用。往期文章中,小編對(duì)加速原理、GPU服務(wù)器選擇、GPU存儲(chǔ)性能提升等均有所介紹。為增進(jìn)大家對(duì)GPU的認(rèn)識(shí),本文將對(duì)GPU的5種虛擬化技術(shù)的略予以介紹。如果你對(duì)GPU具有興趣,不妨繼續(xù)往下閱讀哦。
一、設(shè)備模擬(Device Emulation)設(shè)備模擬是指通過軟件的方法來為虛擬機(jī)模擬GPU設(shè)備,這種方法的好處是虛擬機(jī)內(nèi)部都可以調(diào)用GPU命令,可以完全記GPU設(shè)備的狀態(tài),保證虛擬化技術(shù)的全部特性,滿足四個(gè)標(biāo)準(zhǔn)中的資源復(fù)用和支持虛擬化特性的標(biāo)準(zhǔn)。
QEMU 通過軟件模擬實(shí)傳統(tǒng)的VGA設(shè)備,但是該設(shè)備的性能很低,只能支持基礎(chǔ)的功能。軟件模擬設(shè)備的方法幾乎不會(huì)使用硬件加速,因此其實(shí)現(xiàn)的性能已經(jīng)無法滿足現(xiàn)在虛擬機(jī)的圖形圖像處理和高性能計(jì)算的需求。而且正如前文提到的,現(xiàn)代GPU架構(gòu)具有很高的復(fù)雜性缺少文檔,因此很難實(shí)現(xiàn)對(duì)一個(gè)真實(shí)的物理GPU進(jìn)行軟件模擬。這意味著設(shè)備模擬方法只能模擬少量的API,只能保證少量的特性提供給虛擬機(jī)。
由于設(shè)備模擬的方法在性能和支持的GPU特性上和真實(shí)的GPU相差過大,設(shè)備模擬的技術(shù)已經(jīng)不再應(yīng)用到虛擬化技術(shù)中。
二、API轉(zhuǎn)發(fā)(API Forwarding)API轉(zhuǎn)發(fā)是指通過實(shí)現(xiàn)包裹圖形API的庫(kù),這些庫(kù)在虛擬機(jī)調(diào)用相關(guān)的API時(shí),將這些圖形API通過遠(yuǎn)程過程調(diào)用的方法轉(zhuǎn)機(jī)上,然后調(diào)用主機(jī)上的圖形驅(qū)動(dòng)提供的API支持完成調(diào)用。通過給高層的API實(shí)現(xiàn)包裹庫(kù),客戶機(jī)就能支持高層的API如CUDvCUDA、vGRIS等虛擬化方案都是利用API轉(zhuǎn)發(fā)的方法。這種方法的優(yōu)點(diǎn)是利于實(shí)現(xiàn),而且一定程度上利用了GPU硬件實(shí)現(xiàn)加同時(shí)可以使多個(gè)虛擬機(jī)調(diào)用的GPU相關(guān)指令與API在物理GPU上執(zhí)行。但是API轉(zhuǎn)發(fā)的主要問題在于這種方法失去了語(yǔ)言和庫(kù)的性選擇,包裹庫(kù)和支持的API的不匹配會(huì)造成GPU虛擬化不成功。而如果在遷移的過程中,目標(biāo)主機(jī)與源主機(jī)的包裹庫(kù)版本不致,可能會(huì)造成遷移之后GPU虛擬化不成功,因此API轉(zhuǎn)發(fā)會(huì)影響虛擬化提供的特性。
三、中介傳遞(Mediated Pass-through)GPU已經(jīng)可以支持多個(gè)獨(dú)立的上下文,中介傳遞的方法使虛擬機(jī)只占用這些上下文的一個(gè)或者子集。高帶寬操作(指令緩交、幀緩存提交)需要使用映射到物理GPU的內(nèi)存或者M(jìn)MIO資源,低帶寬操作(資源分配、傳統(tǒng)的特性)可能會(huì)通過使用全虛擬資源來實(shí)現(xiàn)。四、直接傳遞(Direct Pass-through)直接傳遞是指給一臺(tái)虛擬機(jī)使用一個(gè)物理GPU的全部訪問權(quán)限。Intel提供了Intel VT-d硬件輔助技術(shù),使研究者不需要去GPU的編程接口就可以直接實(shí)現(xiàn)一臺(tái)虛擬機(jī)占用物理GPU的全部訪問權(quán)限。
這種方法的好處在于可以提供與真實(shí)機(jī)器相近的性及保真度,亞馬遜的Amazon EC2提供的GPU資源就是使用這種虛擬化策略。但是這種方法問題在于一個(gè)物理GPU只能被一臺(tái)機(jī)使用,犧牲了GPU資源在多臺(tái)機(jī)器之間共享的條件。而且虛擬化的遷移功能也會(huì)受到影響,因?yàn)椴煌w系架構(gòu)的GPU之間可在不兼容。
五、全虛擬化與半虛擬化GPU虛擬化實(shí)現(xiàn)策略按照是否需要修改客戶機(jī)操作系統(tǒng)內(nèi)部的驅(qū)動(dòng)代碼分為GPU全虛擬化和GPU半虛擬化。GPU全虛擬化實(shí)現(xiàn)在多個(gè)虛擬機(jī)之間共享GPu資源的同時(shí)不需要修改虛擬機(jī)內(nèi)部的圖形驅(qū)動(dòng)。GPU半虛擬化是指向虛擬機(jī)提供軟件實(shí)現(xiàn)的理備模型,對(duì)客戶機(jī)的圖形驅(qū)動(dòng)進(jìn)行底層的控制。
使用GPU半虛擬化的方法,比API轉(zhuǎn)發(fā)的性能消耗更小,但是客戶機(jī)的設(shè)備驅(qū)須要改寫。主流的GPU虛擬化方案GPUvm使用半虛擬化的實(shí)現(xiàn)策略對(duì)虛擬機(jī)GPU的性能有明顯的改善。