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