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