第二章 GPU虛擬化方案之——GPU直通模式

第二章 GPU虛擬化方案之——GPU直通模式

目前流行的商用GPU虛擬化方案可以分爲以下幾類:GPU 直通模式,GPU SRIOV 模式,GPU 半虛擬化(mediated passthrough:包括Intel GVT-g和Nvidia GRID vGPU),VMWare的GPU全虛擬化(vSGA)。當然也有尚未成熟處於玩票性質的virtio GPU等等。

各種方案的架構如下圖,相信大家簡單看圖表也不會有什麼大感覺:)

 

接下來我們簡單介紹下GPU直通虛擬化(passthrough)方案的方方面面,並會在後續章節介紹vGPU分片虛擬化和SRIOV方案技術框架結構。

 

GPU直通模式是最早採用也最成熟的方案。三家(Nvidia Tesla,AMD FirePro,Intel Gen8/Gen9)都有支持。

直通模式的實現依賴於IOMMU的功能。VTD對IOVA的地址轉換使得直通設備可以在硬件層次直接使用GPA(Guest Physical Address)地址。

直通模式的技術方案與其他任何PCI直通沒有任何區別。由於GPU的複雜性和安全隔離的要求,GPU直通技術相對於任何其他設備來說,會有額外的PCI 配置空間模擬和MMIO的攔截(參見QEMU VFIO quirk機制)。比如Hypervisor或者Device Module 不會允許虛擬機對GPU硬件關鍵寄存器的完全的訪問權限,一些高權限的操作會被直接攔截。大家或許已經意識到原來直通設備也是有MMIO模擬和攔截的。這對於我們理解GPU 半虛擬化很有幫助。

PCI 直通的技術實現:所有直通設備的PCI 配置空間都是模擬的。而且基本上都只模擬256 Bytes的傳統PCI設備,很少有模擬PCIE設備整個4KB大小的。而對PCI設備的PCI bars則絕大部分被mmap到qemu進程空間,並在虛擬機首次訪問設備PCI bars的時候建立EPT 頁表映射,從而保證了設備訪問的高性能。想了解細節的同學可以去參考Linux kernel document: vfio.txt

PCI 直通架構詳見下圖。

 

 

直通模式是對比物理機性能損耗最小,硬件驅動無需修改的方案,被各大公用雲廠商廣泛採用。對於支持直通的GPU而言,直通模式沒有對可支持的GPU數量做限制,也沒有對GPU功能性做閹割。GPU廠家的絕大多數新功能可以在直通模式下無修改地支持。

直通模式的優點:

1.性能:如前所述,直通模式是性能損耗最小的

對於公有云廠商來說吸引租客上雲的關鍵就是性能。用戶在把業務搬遷上雲之後的第一件事永遠是作對比:業務在雲端的處理能力與尚未上雲的本地業務處理能力作對比。相當多的客戶甚至因爲1%的性能損失而拒絕採用GPU雲服務器。

Nvidia GPU 直通模式下與物理機的性能對比見下圖:(大部分單GPU應用場景的性能對比可以達到96%左右)

大家或許會很好奇這4%的性能損失跑哪裏去了?我們可以在介紹GPU分片虛擬化的時候繼續討論。

2.功能兼容性好

GPU的技術一直在發展。從原先的只針對3D圖形加速渲染,到後續視頻硬件編解碼的支持,再到後續人工智能,機器學習的大規模運用,以及最新的多GPU互聯互通等,直通設備對新功能的兼容性很好得力於對虛擬機GPU驅動的兼容性。GPU廠商開發的針對物理機的驅動,一般情況下可以不做任何修改地放到虛擬機內部執行。而隨着GPU虛擬化的影響力逐漸擴大,一個GPU驅動同時支持物理機和虛擬機直通已經變成出廠的基本要求。

3.技術簡單,運維成本低,對GPU廠商沒有依賴

降低運維成本是提高雲計算公司成本的有效方法。技術越簡單,運行越穩定,一直是至理名言。

如果一個公司需要搬遷GPU服務器到雲端的話,那麼依賴於GPU直通技術,或許在幾天之內就可以搭建一個原型出來。

最關鍵的是,直通技術完全不依賴於GPU的開發廠家。有些GPU的廠商甚至都不知道自家的GPU被用到數據中心,直到對方發佈了GPU雲服務器。

直通模式的缺點:

1.不支持熱遷移(Live Migration)

與任何直通虛擬化的設備一樣,直通設備的一個明顯缺點是不支持熱遷移。事實上在GPU硬件層面是完全支持熱遷移技術的。現代GPU的設計理念都有一個上下文切換的概念(context switch or world switch),一個context在執行的過程中是完全可以被硬件中斷,並切換到另外一個context上執行,比如Windows GPU workload的搶佔功能。大家如果打開windows右下角的時鐘表盤,可以看到秒錶的跳動,每一次秒錶的跳動都是一次GPU搶佔。無論當前應用程序在做什麼樣規格的渲染,Windows都會掛起當前渲染任務,並切換到錶盤顯示的上下文,待錶盤更新完畢再切換回之前被掛起的任務繼續做渲染。(扯遠了,關於GPU虛擬化的熱遷移技術,我會放到高階技術介紹章節中。)

既然GPU 硬件是支持熱遷移的,那麼主流虛擬化(KVM/Xen)爲什麼不去支持呢?因爲GPU實在是太複雜,各廠實現又大相徑庭。要實現一個GPU的熱遷移,沒有GPU硬件廠商的協助是絕無不可能的。而且GPU硬件研發屬於廠家的核心競爭力,驅動開發也基本上屬於閉源狀態。只有Intel的核顯GPU 有公開版的一部分硬件規範和開源i915驅動。其他廠家只提供二進制驅動。

2.不支持GPU資源的分割

不支持GPU資源的分割算不上GPU直通的缺點。此缺點完全是對比SRIOV和GPU半虛擬化來說。有一些應用場景,客戶或許對GPU高並行計算性能並不關心,反而對GPU虛擬化的多虛擬機支持有很高要求。比如對於VDI應用,每一個虛擬機對GPU渲染計算能力的要求都非常小,相反應用場景需要一個GPU去支持多達32個虛擬機,那麼直通設備就完全沒辦法適用。成本上考慮不可能讓每個虛擬機分配一個GPU硬件,實現上也不可能有一個主板插上多達32個GPU的。

3.監控缺失

雲計算公司對運維的基本要求就是能圖表化當前資源的各種狀態。比如GPU虛擬機是否正常,GPU 當前負荷,GPU當前溫度,GPU的內存使用率等等。由於GPU直通是讓虛擬機直接訪問GPU硬件,在宿主機上只有一個Pseudo PCI驅動,從而無法拿到有效信息。沒有這些監控數據的支持,GPU雲服務器就是一個個孤島而不能形成統一調度和運維。對運維人員來說,維護這樣成千上萬GPU的集羣就是一個災難。

下圖是阿里雲ECS GPU團隊通過其他手段實現的GPU雲監控圖表:

 

本文只介紹了GPU直通技術。其他幾個GPU虛擬化方案將會後續繼續。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章