硬科技:GPU虛擬化為何超級難搞(中)

2020.10.22 03:40PM
照片中包含了特寫、04G-P4-2690-KR EVGA GeForce GTX 690 4GB DDR5 512位PCI Express 3.0 x16 3x DVI / Mini DisplayPort / HDCP Ready / SLI視頻圖形、英偉達、英偉達、GeForce

也許某些用功的科科,過去曾聽聞過和GPU虛擬化可扯上關係的幾個技術名詞,像SR-IOV、Fixed Pass-Through或Mediated Pass-Through等等,但這些名詞與其背後的觀念,早在2008年甚至更早,就被VMware一鎚定音,至今幾乎毫無任何改變。

VMware在2008年發表的GPU虛擬化技術白皮書 “GPU Virtualization on VMware’s Hosted I/O Architecture”,列出4個評鑑面向。

照片中提到了為了實現GPU虚擬化,所需、付出的成本。、經過虛擬化的剝削後,效能利下幾成功力。,包含了角度、產品設計、黑與白、產品、儀表

VMware更進一步的攤開整個GPU虛擬化手段的分類表,構成今日大部分GPU虛擬化的技術基礎,各位科科請先多看個幾秒,我會等你。圖中橘色的那個點,象徵著VMware SVGA的地位。

照片中提到了GPU Virtualization Taxonomy、API Remoting、Device Emulation,包含了角度、組織結構圖、組織架構、組織、結構體

各位科科可能乍看之下摸不著頭緒,但筆者將其整理成下表,應該就可以馬上掌握重點了。值得注意的是,偏向軟體的「前端」和貼近硬體的「後端」,兩者並非互斥,實際上可以相輔相成。

照片中提到了前端(Front-End) 軟體、API Remoting、(API Forwarding, Split Driver),包含了紙、畫畫、黑與白、紙、單色

照片中提到了Performance、Direct、Split Driver,包含了圖、紙、牌、產品設計、設計

我們先從前端看起,這裡可分成2種:遠端存取API (API Remoting,或稱為API Forwarding和Split Driver) 和裝置模擬 (Device Emulation)。

既然GPU底層硬體和驅動程式上頭還有OpenGL和Direct3D這些3D API,為何不乾脆讓虛擬機的應用程式,透過遠端程序呼叫 (RPC, Remote Procedure Call),將其需求重新導入到擁有100%顯示卡使用權的機器上遠端執行不就搞定了?誰說3D應用程式只能在本機執行?

照片中提到了API Remoting、Guest i Host、App,包含了生物丁醇、產品設計、產品、牌、儀表

在2009年這個時間點,頗為知名的VMGL (也就是Xen GL) 和WireGL/Chromium,將用戶端虛擬機上的OpenGL命令,透過網路(或虛擬網路)轉移到遠端具備顯示卡的系統,讓虛擬機也能享受到OpenGL硬體加速的效果。換言之,變相虛擬化3D API,將每個OpenGL應用程式視為獨立的硬體裝置,只要顯示卡支援OpenGL,亦可相容來自不同廠商的不同GPU硬體。

頗有「射後不理」味道的API Remoting看似易於實作,但卻會犧牲掉附加功能性,如快速有效的收集運行狀態資訊。也因此,VMGL增加了狀態追蹤,以提供程式執行中止、回復、與將暫停狀態存入硬碟等功能,免得跑一跑就很難踩煞車。

此外,這種網路重定向的遠端API調用,須盡其所能的縮短網路延遲,這也是NVIDIA願意以70億美元併購Mellanox的主因,VMware和NVIDIA合作、可動態分配GPU資源的Bitfusion,就很仰賴良好的網路基礎架構。

照片中提到了VMGL Apps in X11 Guest VMs、VM Viewer: VNC, SDL、Application,包含了多媒體、I / O虛擬化、產品設計、虛擬機、虛擬化

前端GPU虛擬化的另一邊,則是模擬出完整功能的GPU,實現無懈可擊的附加功能性,怎樣上下其手都沒有關係,但缺點也很明顯,這樣作將極度消耗系統資源。

照片中提到了Device Emulation、Guest i Host、GPU Emulator,包含了組織、克羅洛娃(KrólowaGórna)、葉德拉米、劍麻、視頻博客

VMware的SVGA II虛擬GPU(2008年),雖然概觀上屬於裝置模擬,但其實也融入了部份API Remoting(SVGA3D繪圖通訊協定)的概念,以降低系統資源需求和複雜度。

照片中提到了VMware's Virtual GPU、Compatibility、Device Emulation,包含了組織、產品、線、字形、儀表

相較於「軟體的前端」,「硬體的後端」就比較容易理解了:「1顆GPU綁死在單一虛擬機上」的固定式導通(Fixed Pass-Through或Direct Pass-Through)與「GPU仍可被多個虛擬機共享」的協調式導通(Mediated Pass-Through)。更重要的是,這兩者都建立在現成硬體規範之上:IOMMU(如Intel VT-d)和PCI Express 3.0的SR-IOV (Single-Root I/O Virtualiztion)。

照片中提到了VT-d Overview、• VT-d provides infrastructure for I/O virtualization、Defines architecture for DMA remapping,包含了組織、英特爾、直接內存訪問、PCI Express、計算機架構

照片中提到了VIMO、IOVM、HA,包含了圖、x86虛擬化、輸入輸出、I / O虛擬化、虛擬機

Fixed Pass-Through(固定直通模式)的應用場景很簡單:近似硬體分割區,假設你的電腦裡面裝了2張顯示卡,上頭跑2個虛擬機,就個別分配給單一虛擬機,不能切換,也不能將工作轉移到其他GPU上。Fixed Pass-Through讓虛擬機獨享GPU,可得到最好的效能及功能完整度,但犧牲多工性及附加功能性(如動態遷移和GPU分割),當管理大量的GPU時,更是一場災難。

照片中提到了Fixed pass-through、Virtual Machine、App,包含了在線廣告、顯卡、圖形處理單元、卡達、電腦

NVIDIA SLI Multi-OS是當時最常見的應用範例,例如:將2台只有1張顯示卡的繪圖工作站,整合成1台具有2張顯示卡的系統,簡化管理工作。因需IOMMU切割不同GPU所需的記憶體位址空間,NVIDIA SLI Multi-OS強制對應支援Intel VT-d的系統平台,相信科科不會忘記之前關於I/O虛擬化的內容。

硬科技:x86虛擬化由內到外還是繼續難搞(下)

照片中提到了使用NVIDIA SLI Multi-os(多重作業系統)之前、完整的GPU加速、*ONVIDIA Quadro GPUnE,跟Windows 7的有關,包含了英偉達、科希喬夫·納羅德茲尼亞(NMP)和科羅尼(Królowej)、產品設計、視頻博客、的YouTube

但可讓GPU同時被複數虛擬機共享的Mediated Pass-Through(協調共享模式),除了「可能」動用SR-IOV等外部I/O硬體虛擬化技術,也須進行某種程度的裝置模擬,與付出虛擬機Hypervisor須維護並快速載入所有虛擬GPU狀態的額外成本。

簡而言之,Mediated Pass-Through和Fixed Pass-Through最大的不同點,在於前者類似x86指令集虛擬化的VT-x和AMD-V,把影響性能的工作(如密集運算),直接 “Pass Through” 給虛擬機,而和性能無關的部份(主要是特權模式的作業,像重新映射記憶體位址)等,則「攔截」下來,透過模擬層來處理。如同筆者在前面所述,軟體的前端與硬體的後端並非油水分離,實為魚水共生。

照片中提到了Mediated pass-through、Virtual Machine、Virtual Machine,包含了通過虛擬化、虛擬機、圖形處理單元、的VMware、GPU虛擬化

相信現在各位科科在腦海中已經建立起GPU虛擬化的全貌。

照片中提到了VM、VM、VM,包含了圖、圖形處理單元、API、英特爾、英偉達

接著我們就來瞧瞧,NVIDIA和AMD這些年來究竟幹了哪些好事。啊,筆者差點就不小心忘記Intel了,但請別小看Intel,他們一開始在GPU虛擬化的領域,可是走得很前面的。科科。

資料來源