Hyper-V虛機跨NUMA節點性能影響


查看單個NUMA節點的內存大小:

Hyper-V VM VID NUMA節點\PageCount:8376970
8376970*4k/1024/1024=32GB

Hyper-V VM VID NUMA節點\Processor Count:12 (該NUMA節點上共有12C,一個NUMA節點對應一顆物理CPU,一顆物理CPU的核心數即為NUMA節點的CPU核心數量)

  一個NUMA節點一共是8376970個分頁,每個分頁的大小是4KB,所以一個NUMA節點對應的是32GB內存,如果單個節點上的內存已經使用了20GB,再分配給另一個虛機20GB內存的話,由於該節點所剩內存為12GB,所以該虛機就要訪問遠程NUMA節點的內存,就會降低訪問速度。為了避免該情況,應盡量避免虛機使用多個NUMA節點的資源,可以手動配置某個虛機屬於哪個NUMA節點。

 

查看VM位於哪個NUMA節點:

Hyper-V VM VID Partition\Preferred NUMA Node Index\2003_1(VM實例名稱)

 

參考:http://blogs.msdn.com/b/tvoellm/archive/2008/09/28/looking-for-that-last-once-of-performance_3f00_-then-try-affinitizing-your-vm-to-a-numa-node-.aspx

參考:http://www.dotblogs.com.tw/daniel07793/archive/2012/03/26/71046.aspx

 

=======================================

Hyper-v與NUMA介紹:

隨着Windows server2012 的推出,微軟主推的虛擬化重頭hyper-V3.0着實令人驚艷:宿主機支持160個邏輯CPU(core)2TB內存,虛擬機支持32個虛擬CPU以及1TB內存。還包括其中最令人心動的一項就是動態內存!這是怎么實現的呢?和Numa又有什么關系呢?

 首先,什么是Numa(非統一內存訪問)?NUMA結構就是指定固定大小的內存分配給一個指定的cpu序列,然后這樣就形成一個節點NODE,整個框架是由幾個Node結構組成的。我們也都知道cpu訪問本地內存速度當然要遠遠快於訪問遠端Node內存速度。所以相當於對內存和cpu進行綁定划分。這就是所謂的NUMA結構了。NUMA結構主要還是關於並行計算的高效處理:讓處理器快速的訪問在同一單元的內存,擺脫了傳統的超大總線對多處理結構的束縛。

這里簡單的理解起來就是:一Cpu核心或多個(可以是一個Vcpu或者多個)負責一段內存(達到極高的尋址命中率),不再管其他的內存。這樣cpu在工作時只會負責形成Node的這段內存,不再負責遠端(其他)內存。(這樣即使你有多核心的Cpu也不用糾結於前端總線的限制。)

NUMA是硬件設計的功能,划分為NUMA節點在物理服務器的CPU和內存。當一個進程使用內存和CPU在同一NUMA節點,性能會大大提高。當一個進程需要更多的內存,但當前NUMA節點是完整的,那么它會得到從另一個NUMA節點的內存,而在這個過程中的性能成本,是可能影響該物理服務器上所有其他進程。

(想要了解更深:現代CPU確定NUMA節點界限

http://www.benjaminathawes.com/blog/Lists/Posts/Post.aspx?ID=28  

Numa在這里來說最重要的用途是:提供內存互連的硬件系統,使新型動態的分區系統成為可能。系統分區的好處在於允許系統管理員在同一計算機內運行多個操作系統(如UnixWindowsNT),並根據用戶工作負荷的要求,在不同的操作系統環境間,簡單的管理和使用CPU和內存資源,從而實現最佳的性能和最高的資源利用率。

那么hyper-v是怎么實現動態內存的?和這個Numa又是什么關系呢?先來看一張圖片:

 

假設一台計算機使用Numa架構,Numa架構將這台計算機划分了四個節點,現在我們把一二節點拿出來創建Vm1  三四節點拿出來創建Vm2。這里我們這樣指定,但是hyper-v他是如何知道呢?而不會把節點的邊界搞亂呢?我們理解起來就是是內部規范的(http://blogs.technet.com/b/windowsserver/archive/2012/04/05/windows-server-8-beta-hyper-v-amp-scale-up-virtual-machines-part-1.aspx)!因此hyper-V在運行時我們可以認為,宿主機會將Numa創建的這些節點動態分配來實現,而且我們用過hyper-v的都知道,動態內存只是指定一個范圍,這樣就好理解多了!創建虛擬機時,划分這些節點,哪台虛擬機需要更多的內存時就通過分配節點實現!也是為了避免Numa節點過多造成性能下降,因為不能跨越NUMA邊界!

當你的虛擬機遷移到不同規格的主機時,會發生什么情況?原來的配置要被保存。虛擬機正在運行。它會采取原來的NUMA節點規模到新的主機,並利用它們。隱藏在vCPU的設置,可以自定義虛擬機的NUMA節點,以適應最小的NUMA節點的主機。這意味着,不同規格的主機之間實時遷移,虛擬機將不能跨NUMA邊界(遠程運行一個CPU上的進程是在一個NUMA節點分配的RAM)。

FROM:http://blog.sina.com.cn/s/blog_68503a7d0101eg5b.html


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com