作者:仇昌棟、廖長軍
GPU虛擬化是一種技術(shù),它允許多個虛擬環(huán)境共享單個物理GPU的資源,它能帶來提高資源利用率、降低成本、高靈活性和可擴(kuò)展性、提高安全性等方面的好處。隨著GPU在各種領(lǐng)域的應(yīng)用越來越普及,如圖形渲染、通用計算(如深度學(xué)習(xí))、音視頻編解碼等,GPU虛擬化也在近年來得到了越來越廣泛的關(guān)注。
Part 01●??背景?●
1.1 GPU應(yīng)用場景
GPU(圖形處理器)最初設(shè)計用于處理計算機(jī)圖形學(xué)任務(wù),但現(xiàn)在其應(yīng)用場景已經(jīng)擴(kuò)展到了許多其他領(lǐng)域。以下是一些GPU應(yīng)用的場景:
游戲和視覺效果:GPU最初的目的是為了加速圖形渲染,因此它們在游戲和視覺效果方面有很大的應(yīng)用。GPU可以快速處理大量數(shù)據(jù)并生成復(fù)雜的三維圖形,為玩家提供更真實的游戲體驗。
機(jī)器學(xué)習(xí)和深度學(xué)習(xí):近年來,GPU在人工智能領(lǐng)域的應(yīng)用越來越廣泛。由于深度學(xué)習(xí)模型需要大量的并行計算和浮點(diǎn)運(yùn)算,GPU非常適合這種任務(wù)。使用GPU加速機(jī)器學(xué)習(xí)訓(xùn)練過程可以節(jié)省大量時間。
科學(xué)模擬和數(shù)據(jù)分析:許多科學(xué)計算任務(wù)需要處理大量數(shù)據(jù)并進(jìn)行復(fù)雜數(shù)學(xué)運(yùn)算。GPU可以在分子動力學(xué)、流體動力學(xué)、天文學(xué)、地球科學(xué)等領(lǐng)域的模擬和分析中發(fā)揮重要作用。
圖像和視頻處理:GPU在圖像和視頻處理領(lǐng)域也有很大的應(yīng)用。例如,它們可以用于實時視頻編解碼、圖像降噪、圖像增強(qiáng)、圖像識別等任務(wù)。
虛擬現(xiàn)實和增強(qiáng)現(xiàn)實:GPU在虛擬現(xiàn)實(VR)和增強(qiáng)現(xiàn)實(AR)領(lǐng)域也有很大的應(yīng)用。它們可以實時渲染高質(zhì)量的虛擬環(huán)境,為用戶提供沉浸式體驗。
可以預(yù)見,隨著技術(shù)的發(fā)展,GPU的應(yīng)用領(lǐng)域還將繼續(xù)擴(kuò)展。
1.2 GPU虛擬化帶來的優(yōu)勢
GPU虛擬化是一種將物理GPU的計算和顯存資源在多個虛擬環(huán)境中共享的技術(shù),它的主要優(yōu)勢如下:
資源共享:GPU虛擬化允許在多個虛擬環(huán)境中共享物理GPU的計算和顯存資源,提高GPU的使用效率。
彈性擴(kuò)展:通過GPU虛擬化,可以根據(jù)應(yīng)用程序的需求動態(tài)調(diào)整虛擬GPU的計算和顯存資源,實現(xiàn)資源的彈性擴(kuò)展。
成本效益:GPU虛擬化可以降低硬件投資和維護(hù)成本,因為它允許在多個虛擬環(huán)境中共享物理GPU,從而減少了購買和維護(hù)多個獨(dú)立GPU的需要。
隔離性:GPU虛擬化提供了良好的隔離性,確保了虛擬環(huán)境之間的安全和獨(dú)立性。這在多租戶云計算環(huán)境中尤為重要,因為它可以確保不同租戶之間的數(shù)據(jù)和計算隔離。
靈活部署:GPU虛擬化使得虛擬環(huán)境可以靈活地部署在不同的物理硬件上,以滿足不同的性能需求。這意味著用戶可以根據(jù)自己的需求選擇合適的GPU硬件,而無需考慮與現(xiàn)有虛擬環(huán)境的兼容性問題。
Part 02●??相關(guān)基礎(chǔ)概念?●
為方便大家理解GPU虛擬化,先介紹相關(guān)的基礎(chǔ)概念,包括I/O總線、GPU API、GPU工作流程。
2.1 I/O總線
根據(jù)接口協(xié)議的性能,現(xiàn)代計算機(jī)對I/O總線進(jìn)行了分層。
見上圖,一些外圍相對較慢的I/O設(shè)備則通過外圍I/O總線連接到系統(tǒng),比如使用SCSI(Small Computer System Interface)、SATA(Serial AT Attachment)或者USB(Universal Serial Bus)等協(xié)議的I/O設(shè)備。而顯卡、網(wǎng)卡等高性能的I/O設(shè)備通過通用I/O總線連接到系統(tǒng),在許多現(xiàn)代系統(tǒng)中會是PCIe(Peripheral Component Interconnect Express)或它的衍生形式。
2.2 GPU API
為了支持各種功能,GPU提供了不同類型的API,讓開發(fā)者能夠在應(yīng)用程序中使用GPU的強(qiáng)大功能。這些API可分為三類:圖形渲染、通用計算和音視頻編解碼。
圖形渲染API被用于處理圖形渲染任務(wù),例如實時3D圖形和動畫。這些API提供了一組函數(shù)和接口,允許開發(fā)者在程序中創(chuàng)建和操縱3D對象、紋理和著色器。這些API經(jīng)常被用于游戲和3D建模軟件。主要的渲染API有:OpenGL(開放圖形庫):跨平臺的圖形編程接口,提供2D和3D圖形渲染功能;Vulkan:與OpenGL類似,是一個跨平臺的3D圖形和計算API,但提供了更低級的硬件控制和更高的性能;DirectX:由微軟開發(fā)的一系列API,包括Direct3D,用于處理Windows平臺上的3D圖形渲染;Metal:由蘋果開發(fā)的圖形和計算API,專為iOS和macOS平臺設(shè)計。
通用計算API允許開發(fā)者將GPU用于通用計算任務(wù),而不僅僅是圖形渲染。這些任務(wù)可能包括物理模擬、機(jī)器學(xué)習(xí)、圖像處理等。通用計算API提供了編程模型和優(yōu)化工具,以便在GPU上實現(xiàn)高性能并行計算。主要的通用計算API有:CUDA(Compute Unified Device Architecture):由NVIDIA開發(fā)的并行計算平臺和編程模型,專為NVIDIA GPU設(shè)計;OpenCL(開放計算語言):跨平臺的并行計算API,可以在不同類型的處理器(如GPU、CPU和其他加速器)上運(yùn)行。
音視頻編解碼API用于處理音頻和視頻數(shù)據(jù)的編碼和解碼。它們利用GPU的并行處理能力來加速音視頻數(shù)據(jù)的壓縮和解壓縮。主要的音視頻編解碼API有:NVENC/NVDEC:NVIDIA GPU上的硬件加速視頻編碼和解碼API,支持常見的視頻編碼標(biāo)準(zhǔn),如H.264、HEVC和VP9;AMD VCE/UVD:AMD GPU上的硬件加速視頻編碼和解碼API,支持常見的視頻編碼標(biāo)準(zhǔn);Intel Quick Sync Video:Intel處理器集成GPU上的硬件加速視頻編解碼API;VideoToolbox:蘋果平臺上的硬件加速視頻編解碼框架,支持iOS和macOS設(shè)備。
2.3 GPU工作流程
在沒有虛擬化的情況下,渲染涉及到的關(guān)鍵組件見下圖。
一個典型的GPU設(shè)備的工作流程如下:
應(yīng)用調(diào)用GPU支持的某個API,如OpenGL或DirectX;
OpenGL或DirectX庫,提交渲染負(fù)載到操作系統(tǒng)內(nèi)核GPU驅(qū)動;
GPU驅(qū)動把它提交給GPU硬件;
GPU硬件開始工作。完成后,DMA到內(nèi)存,發(fā)出中斷給CPU;
CPU找到中斷處理程序(GPU驅(qū)動此前向操作系統(tǒng)注冊過的)調(diào)用它;
中斷處理程序找到是哪個渲染負(fù)載被執(zhí)行完畢了,最終GPU驅(qū)動喚醒相關(guān)的應(yīng)用。
Part 03●??GPU虛擬化技術(shù)方案?●
3.1?PCIe直通
PCIe直通是一種虛擬化技術(shù),允許虛擬機(jī)(Virtual Machine,VM)直接訪問物理主機(jī)上的PCIe設(shè)備,而無需通過虛擬化軟件進(jìn)行模擬。通過PCIe直通就可以將GPU設(shè)備直接分配給虛擬機(jī),見下圖:
各大公用云廠商廣泛采用直通模式,因為它的性能損耗最小,硬件驅(qū)動無需修改。直通模式?jīng)]有對可支持的GPU數(shù)量做限制,也沒有對GPU功能性做閹割,因此大多數(shù)功能可以在直通模式下無修改支持。
? 直通模式存在以下優(yōu)點(diǎn):
①性能損耗??;
②功能兼容性好;
③技術(shù)簡單,運(yùn)維成本低,對GPU廠商沒有依賴。
? 直通模式存在以下缺點(diǎn):
1.不支持熱遷移;
2.只能支持1:1,不支持GPU資源分隔。
3.2 PCIe SR-IOV
PCIe SR-IOV(Single Root Input/Output Virtualization)是一種更高級的虛擬化技術(shù),允許一個PCIe設(shè)備在多個虛擬機(jī)之間共享,同時保持較高的性能。它是通過在物理設(shè)備(Physical Functions,PF)上創(chuàng)建多個虛擬功能(Virtual Functions,VF)來實現(xiàn)的,每個虛擬功能可以被分配給一個虛擬機(jī),讓虛擬機(jī)直接訪問和控制這些虛擬功能,從而實現(xiàn)高效的I/O虛擬化?;赑CIe SR-IOV的GPU虛擬化方案,本質(zhì)是把一個物理GPU顯卡設(shè)備(PF)拆分成多份虛擬(VF)的顯卡設(shè)備,而且VF 依然是符合 PCIe 規(guī)范的設(shè)備。核心架構(gòu)如下圖:
在SR-IOV方案中,可以將一個PF虛擬化分割為多個VF。
基于此,SR-IOV有三種應(yīng)用場景:
(1)用戶基于HostOS通過PF驅(qū)動直接使用PF;
(2)用戶基于HostOS通過VF驅(qū)動直接使用VF;
(3)用戶在VM中通過VF驅(qū)動使用VF;
? SR-IOV方案的優(yōu)點(diǎn):
①每個VF都有獨(dú)立的配置空間、MMIO、地址空間,因此數(shù)據(jù)更加安全;
②真正實現(xiàn)了1:N,一個PCIe設(shè)備提供給多個VM使用;
? SR-IOV方案的缺點(diǎn):
1.靈活性較差,無法進(jìn)行更細(xì)粒度的分割與調(diào)度;
2.不支持熱遷移。
業(yè)界支持SR-IOV的顯卡:
1、AMD Radeon PRO V620:一塊顯卡PV支持分割12個VF。
2、摩爾線程MTT S3000:一塊顯卡PV支持分隔32個VF。
3.3 API轉(zhuǎn)發(fā)
在苦等PCIe SR-IOV期間,業(yè)界出現(xiàn)了基于API轉(zhuǎn)發(fā)的GPU虛擬化方案。API轉(zhuǎn)發(fā)分為被調(diào)方和調(diào)用方,兩方對外提供同樣的接口(API),被調(diào)方API實現(xiàn)是真實的渲染、計算處理邏輯,而調(diào)用方API實現(xiàn)僅僅是轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)給被調(diào)方。其核心架構(gòu)示意如下圖:
在GPU API層的轉(zhuǎn)發(fā),業(yè)界有針對OpenGL的AWS Elastic GPU,OrionX,有針對CUDA的騰訊vCUDA,瓦倫西亞理工大學(xué)rCUDA;在GPU驅(qū)動層的轉(zhuǎn)發(fā),有針對CUDA的阿里云cGPU和騰訊云pGPU。
? API轉(zhuǎn)發(fā)方案的優(yōu)點(diǎn):
①靈活性最高。通過API轉(zhuǎn)發(fā)的方式解耦應(yīng)用與GPU設(shè)備之后,可以通過軟件任意配置1塊GPU設(shè)備服務(wù)N個VM。也能做到靈活的GPU資源擴(kuò)縮容、遷移等等;
②不依賴GPU硬件廠商。
③不限虛擬化環(huán)境。
? API轉(zhuǎn)發(fā)方案的缺點(diǎn):
1.復(fù)雜度極高。同一功能有多套 API(渲染的 DirectX 和 OpenGL),同一套 API 還有不同版本(如 DirectX 9 和 DirectX 11),兼容性非常復(fù)雜。
2.功能不完整。如不支持媒體編解碼。
3.4 受控直通
受控直通方案是由Nvidia提出,并聯(lián)合Intel一起將相關(guān)的mdev提交到了Linux內(nèi)核4.0中。受控直通把會影響性能的訪問直接透傳給GPU(如顯存),把性能無關(guān)功能部分(如CSR和部分MMIO寄存器)做攔截,并在mdev模塊中做模擬,使得系統(tǒng)層面能看到多個“看似”完整的多個GPU PCIe設(shè)備,即vGPU,它也可以支持原生GPU驅(qū)動。
? 該方案的優(yōu)點(diǎn):
①具備1:N的靈活性;
②高性能;
③功能完備,3D渲染、通用計算、媒體編解碼都支持。
? 該方案的缺點(diǎn):宿主機(jī)的GPU驅(qū)動相當(dāng)于在模擬GPU,而GPU的硬件不開源,導(dǎo)致只有GPU廠商才能提供這一部分。
業(yè)界的受控直通實現(xiàn),有Nvidia的vGPU、Intel的GVT-g、摩爾線程的MT Mesh 2.0(MTT S3000顯卡)。