大家好。我是來自intel的馮少合,在這里給大家分享一些GPU虛擬化相關(guān)的話題. 在intel做GPU虛擬化相關(guān)的同事,很多都是專家。群里有虛擬化的專家呂志遠,和云計算專家程盈心,跟我一起做相關(guān)的介紹,和Q&A。
首先非常感謝邀請,能夠和大家一起分享、討論一些熱門技術(shù),也非常感謝今晚主持人楊軒,一直忙前忙后的籌備本期分享,最后感謝各位聽眾對我分享的技術(shù)感興趣,希望和大家一起探討、學習、共同進步!
GPU虛擬化的狀況
虛擬化技術(shù)發(fā)展到現(xiàn)在,已經(jīng)比較成熟了。CPU, 內(nèi)存,存儲,IO設(shè)備等都已經(jīng)可以虛擬化,可以實現(xiàn)多個虛擬機實例共享同一硬件資源。
而GPU(圖形處理器單元)作為計算機的一個很重要的組成部分,其浮點運算和并行運算速度可以比CPU都強。但是在虛擬的技術(shù)中, 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

順應(yīng)潮流,這幾年, NVIDIA、AMD和intel相繼推出自己的基于硬件的虛擬化解決方案。
AMD: 其GPU虛擬化解決方案是完全基于業(yè)界標準的SR-IOV(單根輸入輸出虛擬化)。這是由PCI SIG組織開發(fā)的一種規(guī)范,為設(shè)備的硬件虛擬化應(yīng)用提供了標準化方法。其能夠允許多達15個虛擬化桌面共享同一個圖形處理器,其最終用戶就能夠同等地訪問GPU,無論他們是何種工作負載,而且不會有任何性能上的損失。
SR-IOV標準允許一個GPU給多個虛擬機共享使用,因此為每一個用戶都提供了虛擬化的性能進行設(shè)計、創(chuàng)造并且執(zhí)行他們的工作負載,而沒有一個用戶會占據(jù)整個GPU。由于硬件的復(fù)雜性,目前支持的GPU廠商只有AMD。
NVIDIA:沒有像AMD那樣使用的基于硬件的GPU虛擬化技術(shù)。其虛擬化方案是稱為Grid桌面虛擬化技術(shù),該技術(shù)是基于它最新的Tesla GPUs的。NVIDIA的虛擬化方案比較有意思的一個特色是可以虛擬出幾種不同model的虛擬顯卡。 FloridaAtlantic University基于NVIDIA GPU 虛擬化方案的VDI已經(jīng)有幾年歷史了,他們稱,可以使用8-12個虛擬化桌面同時共享一個GPU 板卡。
IntelGPU虛擬化解決方案
做為intel的員工,今天的重點還是要介紹intel自己的GPU解決方案。Intel有三種GPU虛擬化的方法。

API轉(zhuǎn)發(fā)(GVT-S)
將openGL或者DirectX的API轉(zhuǎn)發(fā)給host上的Graphics Driver上。
優(yōu)點:性能佳、可以共享。
缺點:功能滯后。

直通設(shè)備(GVT-d)
利用VT-d將顯卡直通給虛擬機。
優(yōu)點:性能佳、功能完備。
缺點:不能共享。

完全GPU虛擬化(GVT-g)
優(yōu)點:性能佳、功能完備、可以共享
Intel的完全虛擬化解決方案包括軟件和硬件方案??梢詫PU直通給多個虛擬機,可以在性能,功能,共享方面達到很好的平衡。
由于在共享和性能方面的平衡,intel的GVT-g 是很值得推薦的。

Intel KVMGT技術(shù)
KVMGT 是Intel? 完全GPU虛擬化(GraphicsVirtualization Technology GVT-g) 的KVM實現(xiàn),是VGT-g的純軟件方案。其mediatedpass-through相當于軟件實現(xiàn)的GPU分時復(fù)用,不同于SR-IOV。

KVMGT從intel的broadwell處理器開始支持。
其性能:
3D性能可以達到host的80%以上。
2D性能可以達到host的70%以上。
Media解碼能力可以到host的90%以上。
Media轉(zhuǎn)碼能力可以到host的80%以上。

KVMGT支持的Features
可以運行native的driver。
DirectX*11.1
OpenGL*4.2
OpenCL*1.2
MediaSDK16.2
DirectX*12
支持的不同操作系統(tǒng)的guest數(shù)量:
MultipleVMs up to 7
SupportUbuntu* Guest
SupportWindows* 7 x32/x64
SupportWindows* 8 x32/x64
GuestWindows* 10 x64
目前支持的遠程顯示協(xié)議:

虛擬化技術(shù)in openstack
目前,Openstack 對于AMD的GPU虛擬化是應(yīng)該支持的。因為AMD每個SRIOV的GPU可以作為PCI設(shè)備pass-through到guest。
Citrix 提出了2個版本的方案支持Nvidia和 XENGT(VGT-G的XEN實現(xiàn))。
第一個版本是基于on-demand的方案,社區(qū)感覺有些復(fù)雜。之后他們提出了一個新的方案,pre-define的方案。pre-define的方案,預(yù)先定義虛擬的GPU(VGPU),定義好之后,數(shù)量不能修改了,并且通過openstack的代碼,做hack,將每個pre-define的VGPU作為SRIOV設(shè)備,并且每個設(shè)備分配一個虛擬的PCI BDF號,該BDF號只有Openstack可見。社區(qū)比較傾向這個方案,但是還沒有得到approve, upstream還需要時日。
對于KVMGT,可以在Citrix實現(xiàn)基礎(chǔ)上,比較容易的實現(xiàn)。
對于企業(yè)來說,如果業(yè)務(wù)需求,需要GPU的虛擬化,自己完全可以很快的基于Openstack實現(xiàn)自己私有的GPU虛擬化方案,沒有必要依賴社區(qū)。
對于不想做開發(fā)的企業(yè),我們會做一個KVMGT的demo,可以參考我們。
此外我們在巴塞羅那的峰會,提交的一個KVMGT的topic,《enabling GPU virtualization in Openstack》,感興趣的同行可以支持一下。
謝謝。
QA
1、2vm的時候,每個vm能跑到native的多少性能?比如3dmark11
答:2個VM我們一般是統(tǒng)計性能之和。每個VM 3dmark11的數(shù)據(jù)大概是native的vm的分數(shù)一半多一點
2、enabling GPU virtualization in Openstack這東西在那里能看到?
答:現(xiàn)在可以看到摘要,也可以投票,https://www.openstack.org/summit/barcelona-2016/vote-for-speakers/
3、intel的顯卡是集成在主板芯片上的吧?
答:Intel目前的顯卡是和CPU集成的,不是在主板上。
4、多謝專家的介紹,請問windows 客戶操作系統(tǒng)需要安裝什么樣的驅(qū)動,在哪里可以獲取; 對spice的支持怎么樣,虛擬的GPU和spice是怎么整合的,謝謝
答:windows的驅(qū)動直接從Intel官網(wǎng)下載,跟裸機上跑的驅(qū)動是一樣的。KVMGT發(fā)布時候會給定一個驅(qū)動版本號,那個是QA經(jīng)過測試的版本
5、你好,從Intel的角度看,現(xiàn)在kvmgt是處于什么狀態(tài),demo,beta,還是可商用?另外對于spice協(xié)議支持的代碼什么地方可以獲???謝謝。
答:SPICE的支持目前處在POC階段??梢杂玫切阅懿⒉缓茫蚴菍M的每次屏幕刷新需要一次拷貝。這一塊有優(yōu)化的解決辦法,我們正在做.
6、主板集成的顯卡,能用KVMGT么?最多能帶多少VM?
答:KVMGT只支持Intel的GPU,從Haswell開始,更老的用不了,以后upstream的代碼從Broadwell開始支持
7、GVT-d現(xiàn)在已經(jīng)upstream了嗎?
答:redhat最近有一個博客詳細描述GVT-d的支持,在VFIO里,可以看下。http://vfio.blogspot.com/2016/07/intel-graphics-assignment.html
8、直播云這個詞現(xiàn)在經(jīng)常聽到。是否用到這個技術(shù),
答:“直播云”或“視頻云”,也許會是潛在的應(yīng)用,目前應(yīng)該是以bare metal機器為主我猜。
9、gpu對網(wǎng)絡(luò)的優(yōu)化有沒有改善 ?
答:這個可能跟GPU的虛擬化并沒有特定的關(guān)系,gpu不負責網(wǎng)絡(luò)優(yōu)化。如果想在固定帶寬內(nèi)做數(shù)據(jù)壓縮,intel有QAT技術(shù),支持硬件的壓縮。
10、GPU可以實現(xiàn)在kvm下面動態(tài)調(diào)整顯存嗎?或者說指定對應(yīng)虛擬機的顯存
答:我們目前是只支持靜態(tài)顯存設(shè)置,是在啟動VM之前。動態(tài)顯存是個很好的問題,目前沒有支持,看需求。
11、對CPU有限制嗎?比如skylake的Pentium的GPU可以用GVT-d嗎?
答:唯一的要求是有GPU。GVT-d就是指的VT-D,支持VT-D的機器都可以
12、這類顯卡的視頻處理是否只是并發(fā)4路,如果是的話,與1:7 VMs不匹配啊
答:并發(fā)路數(shù)應(yīng)該與VM個數(shù)沒有關(guān)系的。可以起7個VM,每個里面處理多路并發(fā)
13、我想問的是:(GVT-g)的方式是不是這樣的,VM里面看到的是整個物理的GPU,訪問方式是利用pass-through直接對GPU進行訪問,但是要多個VM同時訪問的話,這個調(diào)度是在hypervisor來調(diào)度、還是VM的驅(qū)動來調(diào)度?還是GPU的硬件來調(diào)度?
答:KVMGT是完全由軟件調(diào)度的。顯存的訪問是pass-through的。KVMGT內(nèi)部對顯存做了partition。這是個好問題
14、請問我的物理機上如果有多塊顯卡,我如何分配指定給特定的虛擬機呢?
答:向OpenStack請求啟動虛擬機是通過選擇flavor來確定CPU,RAM,DISK的,我們的計劃也是在Flavor中的extra_spec里面實現(xiàn)GPU類型的選擇。所以GPU的分配是在虛擬機啟動的時候由nova選擇的。
15、請問我的物理機上如果有多塊顯卡,我如何分配指定給特定的虛擬機呢?
答:KVMGT只支持Intel的集成顯卡,不會遇到多塊顯卡的問題
問:這樣??!那這個技術(shù)對于機器學習有幫助嗎?
答:對于機器學習目前IntelGen graphics的運算能力還有差距,并不是Intel主推的機器學習平臺
16、不同的VM之間做context switch的時候,GPU的pipeline是不是要完全flush?這個context是i915的驅(qū)動來管理的嗎?
答:我們目前switch的時間點是GPU idle,就是說當前VM所發(fā)的任務(wù)跑完了。context的管里是一個實現(xiàn)問題。我們目前的實現(xiàn)里面:guest的context是做了shadow,影子context是由i915管理
17、VM內(nèi)的多路并發(fā)沒問題,但性能不足下的多路,浪費調(diào)度資源,設(shè)計合理性方面是否需要慎重考慮
答:是的,確實是。虛擬機之間的調(diào)度是存在性能損耗的
18、KVMGT什么時候可以upstream?
答:KVMGT目前正在進行upstream。我們主要的代碼是改在kernel i915驅(qū)動里面。其中有一部分是驅(qū)動本身的擴展,更主要的一部分是虛擬gpu模型。目前第一部分已經(jīng)upstream了,第二部分會作為英特爾GPU驅(qū)動的一個子模塊,目標是今年upstrem到linux kernel,
19、openstack和Citrix虛擬化那個好,用戶交付來說
答:OpenStack可以提供更全面的公有云,私有云和混合云的解決方案,提供計費,租戶管理,網(wǎng)絡(luò),存儲個類服務(wù),和Citrix的關(guān)注點有所不同。
openstack 是云計算,原則上可以支持各種GPU虛擬化技術(shù)。 對于用戶交付來說,Citrix應(yīng)該是商業(yè)軟件,他們應(yīng)該交付好些吧。
20、gt技術(shù)3d畫面是不是只是放在顯存里沒有export出來?有沒有可能直接吧顯存里渲染好的畫面送到硬件視頻編碼給host上的協(xié)議服務(wù)端?能支持7個vgpu是并行的嗎還是只是用某種方式分享一個物理gpu的時間片?聽說intel的芯片帶了視頻編碼硬件 這個和gpu部分是一起的還是一個獨立的部分 也就是說用硬件視頻編碼的同時3d渲染的性能會不會下降?
答:也是很好的問題。3D渲染出來的結(jié)果是可以直接做硬件編碼的。這也是我們SPICE優(yōu)化想做的事情 ,Intel有硬件編解碼的fix function,與3D渲染有一定的并發(fā)性。但是3D和media操作還是有共用的單元,存在相互影響,KVMGT對GPU運算單元是分時共享。不是并發(fā)的。