云南電網有限責任公司信息中心 薛永軍 何昱鋒
電力行業(yè)資源池中C P U配置研究
云南電網有限責任公司信息中心 薛永軍 何昱鋒
資源池(或池)是一種配置機制,用于對主機資源進行分區(qū)。每個主機均具有一個默認的資源池,所有的進程最初均與該資源池綁定。新創(chuàng)建的資源池會從默認池中獲取CPU、內存、IO等資源池。一臺主機可以分為多個資源池,可以為多種業(yè)務系統(tǒng)的虛擬機提供資源,而虛擬機需要多少資源池最為合理,尤其是VCPU,以配對內存及IO等資源。
VCPU
資源池是靈活管理資源的邏輯抽象。資源池可以分組為層次結構,用于對可用的 CPU 和內存資源按層次結構進行分區(qū)。
用戶可以創(chuàng)建根資源池的子資源池,也可以創(chuàng)建用戶創(chuàng)建的任何子資源池的子資源池。每個子資源池都擁有部分父級資源,然而子資源池也可以具有各自的子資源池層次結構,每個層次結構代表更小部分的計算容量。
采用基于軟件的 CPU 虛擬化后,客戶機應用程序代碼直接在處理器上運行,同時轉換客戶機特權代碼并在處理器上運行該代碼。轉換后的代碼有點大,比本機版本的執(zhí)行速度通常要慢。因此,具有少量特權代碼組件的客戶機程序的運行速度與本機程序非常接近。而具有大量特權代碼組件(如系統(tǒng)調用、陷阱或頁面表更新)的程序在虛擬環(huán)境中的運行速度可能較慢。
某些處理器為 CPU 虛擬化提供硬件輔助??蛻魴C可以使用獨立的執(zhí)行模式(稱為客戶機模式)。應用程序代碼或特權代碼等客戶機代碼均在客戶機模式中運行。將硬件輔助用于虛擬化時,不需要再轉換代碼。因此,系統(tǒng)調用或陷阱密集型工作負載在運行時的速度非常接近本機速度。
應用程序的大多數(shù)時間用于執(zhí)行指令而不是等待用戶交互、設備輸入或數(shù)據(jù)檢索等外部事件,則應用程序是受 CPU 約束的。對于此類應用程序,CPU 虛擬化開銷包括必須執(zhí)行的額外指令。此開銷消耗應用程序本身可以使用的 CPU 處理時間。CPU 虛擬化開銷通常會導致整體性能下降。對于不受 CPU 約束的應用程序,CPU 虛擬化可能會提高 CPU 利用率。
為虛擬機配置超過其工作負載能夠使用的vCPU可能會導致資源使用率略微增加,從而可能影響負載過重的系統(tǒng)的性能。運行在多個vCPU的虛擬機上的單線程工作負載,或是vCPU數(shù)已超過工作負載能夠高效利用范圍之外的虛擬機上的多線程工作負載。即使客戶機操作系統(tǒng)不使用某些vCPU,為虛擬機配置這些vCPU仍然會在虛擬化層上提出少量資源需求,從而在主機上轉化為實際的 CPU消耗。無論在客戶機操作系統(tǒng),還是在宿主機中,多個vCPU保持內存一致,都會消耗額外的資源。大多數(shù)客戶機操作系統(tǒng)在不活動期間會執(zhí)行閑置循環(huán)。
宿主機自動檢測這些循環(huán)并取消調度閑置的vCPU。盡管這樣可以降低 CPU 開銷,但是也會降低某些繁重 I/O 工作負載的性能??蛻魴C操作系統(tǒng)調度程序可能會在多個vCPU間遷移單線程工作負載,這些資源需求會轉換為主機上切實存在的 CPU 消耗。有些工作負載可以在多個虛擬機間輕松拆分。在某些情況下,對于相同數(shù)量的vCPU,使用數(shù)量多但較小的虛擬機所提供的性能將比使用數(shù)量少但較大的虛擬機性能更高。在其他情況下,正好相反,使用數(shù)量少但較大的虛擬機將會提高性能。導致這種差異的因素有很多,包括 NUMA 節(jié)點大小、CPU 緩存局部性以及工作負載實施細節(jié)??梢酝ㄟ^環(huán)境中特定的工作負載進行實驗,從而作出最佳配置。
通常虛擬機可分為以下兩種類別:
虛擬機的vCPU數(shù)量等于或少于每個物理 NUMA 節(jié)點中的核心數(shù)量。這些虛擬機將會被分配給單個 NUMA 節(jié)點中的所有核心,并將優(yōu)先分配該 NUMA 節(jié)點的本地內存。這意味著,受到內存可用性的約束,其所有內存訪問都將位于該 NUMA 節(jié)點本地,從而獲得最低的內存訪問延遲。
虛擬機的vCPU數(shù)量多于每個物理 NUMA 節(jié)點中的核心數(shù)量。這些虛擬機將會被分配給兩個(或多個)NUMA 節(jié)點,并將優(yōu)先分配這些 NUMA 節(jié)點的本地內存。由于這些虛擬機中的vCPU有時可能需要訪問各自 NUMA 節(jié)點以外的內存,所以可能出現(xiàn)其平均內存訪問延遲比完全位于 NUMA 節(jié)點中的虛擬機更長的現(xiàn)象。
現(xiàn)在電力行業(yè)使用的物理機器大多數(shù)為是有4個處理器或者8個處理器,有8個內存塊或者16個內存塊。將1個處理器和兩個內存塊合起來,稱為一個NUMA node,這樣這個機器就會有4個或者8個NUMA node。在物理分布上,NUMA node的處理器和內存塊的物理距離更小,因此訪問也更快。比如這臺機器會分左右兩個處理器(cpu1, cpu2),在每個處理器兩邊放兩個內存塊(memory1.1, memory1.2, memory2.1,memory2.2),這樣NUMA node1的cpu1訪問memory1.1和memory1.2就比訪問memory2.1和memory2.2更快。所以使用NUMA的模式如果能盡量保證本node內的CPU只訪問本node內的內存塊,那這樣的效率就是最高的。
在資源池中確定虛擬機的大小,使其與物理 NUMA 邊界對齊。如果主機系統(tǒng)的每個 NUMA 節(jié)點有 6 個核心,虛擬機的大小應該將vCPU數(shù)目應為物理 NUMA 節(jié)點大小的整數(shù)倍數(shù)(例如6 個vCPU、12 個vCPU、18 個vCPU、24 個vCPU);同時虛擬機的內存置備不應該超過單個NUMA node內存值??傮w來說單個虛擬機配置就是N*M(N為插槽數(shù),M為核心數(shù),原則不超過單個NUMA)的VCPU,P(P為單個node實際內存值)。
通過以上的算法,結合目前電力行業(yè)集采服務器配置的取樣值,單臺物理機器配置:8路12核,有16個內存板,每個板8根內存條,每條16GB(此配置不是單臺服務器最高配置)。所以可以得出單個NUMA node值為12VCPU,256G。
綜上所述,由于物理機器不斷更新,計算得出的單個NUMA node值并不是一成不變的,需要根據(jù)物理機器值變化而變化的,同是單個NUMA node值是單臺虛擬機配置的參考值,應該根據(jù)虛擬機的實際需求值時進行置備注,同時還要借助監(jiān)控工具對虛擬機進行監(jiān)控和數(shù)據(jù)收集,動態(tài)的調整虛擬機配置,以達到虛擬機最大佳能,提高云計算資源服務質量。
[1]http://blog.csdn.net/tianyuanmax/article/details/46649863.
[2]http://pubs.vmware.com/vsphere-65/index.jsp#com.vmware. vsphere.resmgmt.doc/GUID-9986F393-4D36-48AB-B839-8FF25ECEEF94.html
薛永軍(1982—),男,云南昆明人,大學本科,工程師,主要從事電力信息化系統(tǒng)軟件的建設工作,電網云計算管理研究。