簡介
大家好。我是來自intel的馮少合,在這里給大家分享一些GPU虛擬化相關的話題. 在intel做GPU虛擬化相關的同事,很多都是專家。群里有虛擬化的專家呂志遠,和云計算專家程盈心,跟我一起做相關的介紹,和Q&A。
首先非常感謝邀請,能夠和大家一起分享、討論一些熱門技術,也非常感謝今晚主持人楊軒,一直忙前忙后的籌備本期分享,最后感謝各位聽眾對我分享的技術感興趣,希望和大家一起探討、學習、共同進步!
GPU虛擬化的狀況
虛擬化技術發展到現在,已經比較成熟了。CPU, 內存,存儲,IO設備等都已經可以虛擬化,可以實現多個虛擬機實例共享同一硬件資源。
而GPU(圖形處理器單元)作為計算機的一個很重要的組成部分,其浮點運算和并行運算速度可以比CPU都強。但是在虛擬的技術中, QEMU對GPU虛擬的支持,很長時間都是純粹的軟件模擬,并沒有充分利用硬件GPU的資源,性能大大折扣。
GPU密集工作性負載,對高性能GPU虛擬化的需求越來越強烈。如:
3D/2D 圖形加速
游戲
VDI
Media Transcoding
視頻會議, CDN
高性能計算(GPGPU)OpenCL/CUDA
Geometric computing, Scientific computing, Machinelearning
Bioinformatics, Finance, Medical industry,Meteorology
Personalized medicine, drugdiscovery,Big Dataanalytics
順應潮流,這幾年, NVIDIA、AMD和intel相繼推出自己的基于硬件的虛擬化解決方案。
AMD: 其GPU虛擬化解決方案是完全基于業界標準的SR-IOV(單根輸入輸出虛擬化)。這是由PCI SIG組織開發的一種規范,為設備的硬件虛擬化應用提供了標準化方法。其能夠允許多達15個虛擬化桌面共享同一個圖形處理器,其最終用戶就能夠同等地訪問GPU,無論他們是何種工作負載,而且不會有任何性能上的損失。
SR-IOV標準允許一個GPU給多個虛擬機共享使用,因此為每一個用戶都提供了虛擬化的性能進行設計、創造并且執行他們的工作負載,而沒有一個用戶會占據整個GPU。由于硬件的復雜性,目前支持的GPU廠商只有AMD。
NVIDIA:沒有像AMD那樣使用的基于硬件的GPU虛擬化技術。其虛擬化方案是稱為Grid桌面虛擬化技術,該技術是基于它最新的Tesla GPUs的。NVIDIA的虛擬化方案比較有意思的一個特色是可以虛擬出幾種不同model的虛擬顯卡。 FloridaAtlantic University基于NVIDIA GPU 虛擬化方案的VDI已經有幾年歷史了,他們稱,可以使用8-12個虛擬化桌面同時共享一個GPU 板卡。
IntelGPU虛擬化解決方案
做為intel的員工,今天的重點還是要介紹intel自己的GPU解決方案。Intel有三種GPU虛擬化的方法。
API轉發(GVT-S)
將openGL或者DirectX的API轉發給host上的Graphics Driver上。
優點:性能佳、可以共享。
缺點:功能滯后。
直通設備(GVT-d)
利用VT-d將顯卡直通給虛擬機。
優點:性能佳、功能完備。
缺點:不能共享。
完全GPU虛擬化(GVT-g)
優點:性能佳、功能完備、可以共享
Intel的完全虛擬化解決方案包括軟件和硬件方案。可以將GPU直通給多個虛擬機,可以在性能,功能,共享方面達到很好的平衡。
由于在共享和性能方面的平衡,intel的GVT-g 是很值得推薦的。
Intel KVMGT技術
KVMGT 是Intel? 完全GPU虛擬化(GraphicsVirtualization Technology GVT-g) 的KVM實現,是VGT-g的純軟件方案。其mediatedpass-through相當于軟件實現的GPU分時復用,不同于SR-IOV。
KVMGT從intel的broadwell處理器開始支持。
其性能:
3D性能可以達到host的80%以上。
2D性能可以達到host的70%以上。
Media解碼能力可以到host的90%以上。
Media轉碼能力可以到host的80%以上。
KVMGT支持的Features
可以運行native的driver。
DirectX*11.1
OpenGL*4.2
OpenCL*1.2
MediaSDK16.2
DirectX*12
支持的不同操作系統的guest數量:
MultipleVMs up to 7
SupportUbuntu* Guest
SupportWindows* 7 x32/x64
SupportWindows* 8 x32/x64
GuestWindows* 10 x64
目前支持的遠程顯示協議:
虛擬化技術in openstack
目前,Openstack 對于AMD的GPU虛擬化是應該支持的。因為AMD每個SRIOV的GPU可以作為PCI設備pass-through到guest。
Citrix 提出了2個版本的方案支持Nvidia和 XENGT(VGT-G的XEN實現)。
第一個版本是基于on-demand的方案,社區感覺有些復雜。之后他們提出了一個新的方案,pre-define的方案。pre-define的方案,預先定義虛擬的GPU(VGPU),定義好之后,數量不能修改了,并且通過openstack的代碼,做hack,將每個pre-define的VGPU作為SRIOV設備,并且每個設備分配一個虛擬的PCI BDF號,該BDF號只有Openstack可見。社區比較傾向這個方案,但是還沒有得到approve, upstream還需要時日。
對于KVMGT,可以在Citrix實現基礎上,比較容易的實現。
對于企業來說,如果業務需求,需要GPU的虛擬化,自己完全可以很快的基于Openstack實現自己私有的GPU虛擬化方案,沒有必要依賴社區。
對于不想做開發的企業,我們會做一個KVMGT的demo,可以參考我們。
此外我們在巴塞羅那的峰會,提交的一個KVMGT的topic,《enabling GPU virtualization in Openstack》,感興趣的同行可以支持一下。
謝謝。
QA
1、2vm的時候,每個vm能跑到native的多少性能?比如3dmark11
答:2個VM我們一般是統計性能之和。每個VM 3dmark11的數據大概是native的vm的分數一半多一點
2、enabling GPU virtualization in Openstack這東西在那里能看到?
答:現在可以看到摘要,也可以投票,https://www.openstack.org/summit/barcelona-2016/vote-for-speakers/
3、intel的顯卡是集成在主板芯片上的吧?
答:Intel目前的顯卡是和CPU集成的,不是在主板上。
4、多謝專家的介紹,請問windows 客戶操作系統需要安裝什么樣的驅動,在哪里可以獲取; 對spice的支持怎么樣,虛擬的GPU和spice是怎么整合的,謝謝
答:windows的驅動直接從Intel官網下載,跟裸機上跑的驅動是一樣的。KVMGT發布時候會給定一個驅動版本號,那個是QA經過測試的版本
5、你好,從Intel的角度看,現在kvmgt是處于什么狀態,demo,beta,還是可商用?另外對于spice協議支持的代碼什么地方可以獲取?謝謝。
答:SPICE的支持目前處在POC階段。可以用但是性能并不好,原因是對VM的每次屏幕刷新需要一次拷貝。這一塊有優化的解決辦法,我們正在做.
6、主板集成的顯卡,能用KVMGT么?最多能帶多少VM?
答:KVMGT只支持Intel的GPU,從Haswell開始,更老的用不了,以后upstream的代碼從Broadwell開始支持
7、GVT-d現在已經upstream了嗎?
答:redhat最近有一個博客詳細描述GVT-d的支持,在VFIO里,可以看下。http://vfio.blogspot.com/2016/07/intel-graphics-assignment.html
8、直播云這個詞現在經常聽到。是否用到這個技術,
答:“直播云”或“視頻云”,也許會是潛在的應用,目前應該是以bare metal機器為主我猜。
9、gpu對網絡的優化有沒有改善 ?
答:這個可能跟GPU的虛擬化并沒有特定的關系,gpu不負責網絡優化。如果想在固定帶寬內做數據壓縮,intel有QAT技術,支持硬件的壓縮。
10、GPU可以實現在kvm下面動態調整顯存嗎?或者說指定對應虛擬機的顯存
答:我們目前是只支持靜態顯存設置,是在啟動VM之前。動態顯存是個很好的問題,目前沒有支持,看需求。
11、對CPU有限制嗎?比如skylake的Pentium的GPU可以用GVT-d嗎?
答:唯一的要求是有GPU。GVT-d就是指的VT-D,支持VT-D的機器都可以
12、這類顯卡的視頻處理是否只是并發4路,如果是的話,與1:7 VMs不匹配啊
答:并發路數應該與VM個數沒有關系的。可以起7個VM,每個里面處理多路并發
13、我想問的是:(GVT-g)的方式是不是這樣的,VM里面看到的是整個物理的GPU,訪問方式是利用pass-through直接對GPU進行訪問,但是要多個VM同時訪問的話,這個調度是在hypervisor來調度、還是VM的驅動來調度?還是GPU的硬件來調度?
答:KVMGT是完全由軟件調度的。顯存的訪問是pass-through的。KVMGT內部對顯存做了partition。這是個好問題
14、請問我的物理機上如果有多塊顯卡,我如何分配指定給特定的虛擬機呢?
答:向OpenStack請求啟動虛擬機是通過選擇flavor來確定CPU,RAM,DISK的,我們的計劃也是在Flavor中的extra_spec里面實現GPU類型的選擇。所以GPU的分配是在虛擬機啟動的時候由nova選擇的。
15、請問我的物理機上如果有多塊顯卡,我如何分配指定給特定的虛擬機呢?
答:KVMGT只支持Intel的集成顯卡,不會遇到多塊顯卡的問題
問:這樣啊!那這個技術對于機器學習有幫助嗎?
答:對于機器學習目前IntelGen graphics的運算能力還有差距,并不是Intel主推的機器學習平臺
16、不同的VM之間做context switch的時候,GPU的pipeline是不是要完全flush?這個context是i915的驅動來管理的嗎?
答:我們目前switch的時間點是GPU idle,就是說當前VM所發的任務跑完了。context的管里是一個實現問題。我們目前的實現里面:guest的context是做了shadow,影子context是由i915管理
17、VM內的多路并發沒問題,但性能不足下的多路,浪費調度資源,設計合理性方面是否需要慎重考慮
答:是的,確實是。虛擬機之間的調度是存在性能損耗的
18、KVMGT什么時候可以upstream?
答:KVMGT目前正在進行upstream。我們主要的代碼是改在kernel i915驅動里面。其中有一部分是驅動本身的擴展,更主要的一部分是虛擬gpu模型。目前第一部分已經upstream了,第二部分會作為英特爾GPU驅動的一個子模塊,目標是今年upstrem到linux kernel,
19、openstack和Citrix虛擬化那個好,用戶交付來說
答:OpenStack可以提供更全面的公有云,私有云和混合云的解決方案,提供計費,租戶管理,網絡,存儲個類服務,和Citrix的關注點有所不同。
openstack 是云計算,原則上可以支持各種GPU虛擬化技術。 對于用戶交付來說,Citrix應該是商業軟件,他們應該交付好些吧。
20、gt技術3d畫面是不是只是放在顯存里沒有export出來?有沒有可能直接吧顯存里渲染好的畫面送到硬件視頻編碼給host上的協議服務端?能支持7個vgpu是并行的嗎還是只是用某種方式分享一個物理gpu的時間片?聽說intel的芯片帶了視頻編碼硬件 這個和gpu部分是一起的還是一個獨立的部分 也就是說用硬件視頻編碼的同時3d渲染的性能會不會下降?
答:也是很好的問題。3D渲染出來的結果是可以直接做硬件編碼的。這也是我們SPICE優化想做的事情 ,Intel有硬件編解碼的fix function,與3D渲染有一定的并發性。但是3D和media操作還是有共用的單元,存在相互影響,KVMGT對GPU運算單元是分時共享。不是并發的。