總結的vGPU性能優化和監測:

1.禁用控制檯VGA介面

對於 GPU 的虛擬化技術,目前的進度是通過Partitioning的方式將顯存進行分片,然後通過直通給所有的虛擬機,底層通過調度實現虛擬機之間直通訪問的問題。通過純軟體的方法虛擬化一個功能齊全的 GPU 是不太現實的,因為其實現的複雜性以及極度低略的性能。鑒於此,在 XenServer中Qemu只模擬了 VGA 介面,通過半虛擬化幀緩存來加速 2D特定幀緩存的訪問。在安裝完GRID vGPU之後,GRID vGPU會實現一個VGA控制檯介面,允許XenCenter通過控制檯中的選項卡查看虛擬機的圖形輸出。此功能僅僅是為了管理需要,輸出的圖形並不是進過顯卡加速或優化過的圖像。我們在使用了CitrixXenDesktop?與HDX 3D Pro的遠程圖形堆棧來顯示後,纔可以顯示經過顯卡加速或優化過的圖像。

而使用Windows遠程桌面(RDP)訪問Windows 7 / Windows Server 2008虛擬機的時候,RDP將會禁止GRID vGPU的NVIDIA驅動程序運行,而且GPU加速的DirectX,OpenGL無法使用,NVIDIA控制面板也無法使用。不但如此,安裝在VM中的VNC伺服器也只是允許顯示基本的模擬的顯卡以低性能的遠程訪問方式進行。

優化VGA介面可以減少虛擬機資源的消耗,尤其是裝載了大量的虛擬機vGPU的時候,禁用控制檯VGA介面完全可能會產生一些性能優勢。我們可以通過在虛擬機平臺指定disable_vnc=1來禁用VGA介面:vgpu_extra_args參數:

控制檯的VGA設置將在虛擬機下次重新啟動的時候生效。控制檯VGA禁用了以後,XenCenter的虛擬機控制檯在WIndows啟動的時候將會閃屏,這是正常現象。

那如果我們的虛擬機出現問題了,通過XenDesktop無法進入了咋辦呢?這個時候就需要將這個VGA介面重新激活,通過控制檯進入虛擬機進行故障診斷和問題修復了。激活VGA的介面的命令和禁用正好是相反的,指定disable_vnc=0就可以啟用了。

2.使用「breadth-first」的分配(不是默認配置)

「breadth-first」是vGPU啟動分配機制的一種,這種分配機制是GRID vGPU在啟動之後vGPU分配的最佳性能,但是在默認的配置下並不是默認的,需要我們採用該分配方案提高我們的性能。在GRID vGPU中,目前我所知的有兩種vGPU分配方式: 「breadth-first」和"depth-first" 兩種。那麼我們在那點選擇這兩種模式呢?在XenServer的主機中,我們點擊屬性,在GPU的選項中我們就可以看見這兩種分配機制。

Maximum densitydepth-first

新啟動的VM將儘可能的放置到一個已經使用了該vGPU profile的GPU卡上。如果沒有GPU使用該vGPU profile, 則將嘗試在一個空餘的GPU啟動虛擬機(如果有多餘)。這是默認的設置。

Maximum performancebreadth-first

新啟動的虛擬機儘可能的放置到空餘的GPU上,這樣獲取最佳的性能,但是如果使用多個不同的vGPU profiles,則可能會遇到問題。 比如:如果有2 臺虛擬機使用K220Q profile, 則都會請求並分配到各自一個獨立的GPU上. 如果後面有不是K220Q profile的虛擬機啟動,則無法分配GPU 導致無法啟動,因為沒有空餘的GPU了,而profile又不能混合使用。

在這裡vGPU profiles是指GPU切分成為vGPU的類型:在XenCenter上有「Allowed vGPU types」選項可以設置允許GPU使用的profile類型。默認是允許每個GPU使用所有類型的vGPU profiles。如果修改了此選項,也有可能會導致虛擬機無法啟動。

3.NUMA架構下CPU SocketvCPUGPU的分配與對應

現在的伺服器一般都是兩顆物理的CPU,在學術術語上稱之為CPU Socket,而且一般都採用NUMA架構設計。


如圖所示, NUMA中,雖然內存直接attach在CPU上,但是由於內存被平均分配在了各個die上。只有當CPU訪問自身直接attach內存對應的物理地址時,才會有較短的響應時間,我們稱之為本地內存。而如果需要訪問其他CPU attach的內存的數據時,就需要通過inter-connect通道訪問,響應時間就相比之前變慢了。既然CPU只有在Local-Access時響應時間纔能有保障,那麼我們就盡量把該CPU所要的數據集中在他local的內存中就OK啦!但是這和我們的GPU有什麼關係?

CPU 與GPU 共同使用系統內存。渲染引擎從系統內存中的命令緩存中提取GPU 命令來在多個不同特性方面加速渲染圖形;顯示引擎從幀緩存中獲取圖形像素數據,然後將它們發送給外部顯示器來顯示圖像。因此在NUMA平臺獲得最佳性能,建議將VM vCPU核心與CPU的物理核心進行綁定。例如,我們將物理GPU vGPU 0和1綁定到CPU Socket 0。同樣,GPU vGPU 2和3綁定到CPU Socket 1。

具體事宜的命令如下:

我們首先使用命令:xe host-cpu-info查看下CPU的信息。

要固定虛擬機的vCPU到特定的CPU插槽,需要設置的參數為VCPU-params。此設置需要VM重新引導纔能夠生效。在2顆CPU的平臺,假設有32個內核,內核0-15都在 Socket 0,內核16-31都在Socket 1上。要限制虛擬機只在Socket 0中運行:

除此之外我們還可以設置虛擬機就在那幾個內核上運行,而不用講範圍擴大到整個Socket:

4.使用4vCPU

Windows的客戶端操作系統最多支持兩個CPU Sockets。當 Guest VM中的vCPU分配給Virtual Sockets,XenServer默認分配每個插槽一個vCPU;分配給該VM的任何兩個以上的vCPU將不會由Windows客戶端操作系統識別。

為瞭解決這個問題,需要設置platform:cores-per-socket:內核中每Sockets分配給VM vCPU的數量:

5.XenCenter性能管理器看到vCPUsupport.citrix.com/arti

通過XenCenter監測GPU性能,單擊伺服器的性能選項卡,然後在圖形窗口上單擊滑鼠右鍵,選擇操作,然後選擇新圖。為圖形提供名稱,並在可用的計數器資源列表中,選擇一個或多個GPU計數器。計數器列出了當前使用的每個物理GPU的性能信息。

還可以使用命令行的模式:

NVIDIA系統管理介面:NVIDIA-SMI,是一個命令行工具,可以通過噶工具查看GPU的信息。NVIDIA-SMI從Dom0的shell中運行,而沒有額外的參數調用,它在系統中提供了所有的GPU的摘要,包括PCI匯流排ID,功率狀態,溫度,當前內存使用等等。下圖所示:

註:NVIDIA-SMI不會列出當前分配給虛擬機的任何直通GPU設備。

?歡迎關注我的位置公眾號:tasnrh

推薦閱讀:

相關文章