詳解X86服務器虛擬化的資源劃分和性能優(yōu)化
虛擬化是一個廣義術(shù)語,通常是指計算元件在虛擬的基礎(chǔ)上而不是真實的基礎(chǔ)上運行,是一個為了簡化管理,優(yōu)化資源的解決方案。服務器虛擬化則是一項用以整合基于x86服務器,來提高資源利用效率和性能的技術(shù)。
本文從企業(yè)業(yè)務系統(tǒng)和管理角度出發(fā),著重分析研究了X86技術(shù)架構(gòu)下,虛擬網(wǎng)卡與SR-IOV、NUMA、虛擬磁盤格式相應的特點,并探索了不同應用場景下的資源劃分和性能優(yōu)化方案,希望能夠通過多應用系統(tǒng)下的實踐和最優(yōu)配置,來提高X86服務器的性能和資源利用效率。
1、x86虛擬化兩種常見的架構(gòu)
對于x86虛擬化,有兩種常見的架構(gòu):寄居架構(gòu)和裸金屬架構(gòu)。寄居架構(gòu)將虛擬化層運行在操作系統(tǒng)之上,當作一個應用來運行,對硬件的支持很廣泛。相對的,裸金屬架構(gòu)直接將虛擬化層運行在x86的硬件系統(tǒng)上,可以直接訪問硬件資源,無需通過操作系統(tǒng)來實現(xiàn)硬件訪問,因此效率更高。
Vmware Workstation和VMware Server都是基于寄居架構(gòu)而實現(xiàn)的,而VMware ESX Server是業(yè)界第一個裸金屬架構(gòu)的虛擬化產(chǎn)品,目前已經(jīng)發(fā)布了第五代產(chǎn)品。ESX Server需要運行在VMware認證的硬件平臺上,可以提供出色的性能,完全可以滿足大型數(shù)據(jù)中心對性能的要求。本文主要論述的也是基于X86裸金屬架構(gòu)下的服務器的資源劃分和性能優(yōu)化問題。
2、x86虛擬化資源劃分的三個層面
服務器的資源劃分簡單的講,包括網(wǎng)絡、計算、存儲三個層面。每一個虛機都在其連通的網(wǎng)絡中,承擔一定的計算任務,把計算后的數(shù)據(jù)存儲下來供業(yè)務使用。
2.1 網(wǎng)絡層面
從網(wǎng)絡層面來說,X86物理機使用的是物理的網(wǎng)卡,連接的是物理的交換機。在一臺X86被劃分成多個VM虛機后,就誕生了虛擬網(wǎng)卡和虛擬交換機。這樣在虛擬和物理網(wǎng)絡之間就產(chǎn)生了流量傳輸與交互。如圖1所示:
圖1:虛擬網(wǎng)絡和物理網(wǎng)絡
同一臺物理機上劃分的VM有同一網(wǎng)段和不同網(wǎng)段之分,再根據(jù)虛機之間的網(wǎng)絡流量是否經(jīng)過物理網(wǎng)卡,具體可分為四種不同的情況:
第一種情況,比如某業(yè)務系統(tǒng)的VM在同一主機的同一網(wǎng)段,則虛擬機之間網(wǎng)絡流量不經(jīng)過主機物理網(wǎng)卡,其最大網(wǎng)絡流量為7.6GB。(測試方法:在testvm1上啟用jperf server作為網(wǎng)絡數(shù)據(jù)接收端,在testvm2中啟用jperf client連接jperf server發(fā)送網(wǎng)絡數(shù)據(jù)包,同時加壓網(wǎng)絡流量。X86主機為雙萬兆網(wǎng)卡)
第二種情況,比如某業(yè)務系統(tǒng)的VM在同一主機的不同網(wǎng)段,則虛擬機之間網(wǎng)絡流量經(jīng)過主機物理網(wǎng)卡,其最大網(wǎng)絡流量為5.6GB。測試方法同上。
第三種情況,比如某業(yè)務系統(tǒng)的VM在不同主機的同一網(wǎng)段,則虛擬機之間網(wǎng)絡流量經(jīng)過主機物理網(wǎng)卡,其最大網(wǎng)絡流量為6.5GB。測試方法同上。
第四種情況,比如某業(yè)務系統(tǒng)的VM在不同主機的不同網(wǎng)段,則虛擬機之間網(wǎng)絡流量經(jīng)過主機物理網(wǎng)卡,其最大網(wǎng)絡流量為4.6GB。測試方法同上。
測試的幾種場景對比表如表1所示。
VM虛機 |
物理機 |
網(wǎng)卡 |
所屬網(wǎng)段 |
數(shù)據(jù)方向 |
物理網(wǎng)卡 |
最大數(shù)據(jù)流量 |
vm1和vm2 |
同一主機 |
萬兆 |
同一 |
單向 |
不經(jīng)過 |
7.6G |
vm1和vm2 |
同一主機 |
萬兆 |
不同 |
單向 |
經(jīng)過 |
5.6G |
Vm3和vm4 |
不同主機 |
萬兆 |
同一 |
單向 |
經(jīng)過 |
6.5G |
Vm3和vm4 |
不同主機 |
萬兆 |
不同 |
單向 |
經(jīng)過 |
4.6G |
表1 幾種場景的VM測試數(shù)據(jù)對比
在一臺X86物理服務器上進行VM的網(wǎng)絡虛擬化,還有一種技術(shù)就是SR-IOV。SR-IOV 技術(shù)是INTEL提出的一種基于硬件的虛擬化解決方案,可提高性能和可伸縮性。SR-IOV 標準允許在虛擬機之間高效共享 PCIe(Peripheral Component Interconnect Express,快速外設(shè)組件互連)設(shè)備,并且它是在硬件中實現(xiàn)的,可以獲得能夠與本機性能媲美的網(wǎng)絡 I/O 性能。比如我們把一臺X86物理服務器上的萬兆網(wǎng)卡通過SR-IOV技術(shù)分成4個虛擬網(wǎng)卡給4個VM使用,那么其網(wǎng)絡傳輸性能將比虛擬化網(wǎng)卡給VM使用高很多。
測試方法:在一臺X86物理服務器上,4個VM啟用jperf server作為網(wǎng)絡數(shù)據(jù)接收端;在另一臺X86物理服務器上,4個VM啟用jperf client連接jperf server發(fā)送網(wǎng)絡數(shù)據(jù)包,同時加壓網(wǎng)絡流量。兩臺X86主機為雙萬兆網(wǎng)卡。
SR-IOV虛擬化測試架構(gòu)如圖2所示:
圖2:SR-IOV虛擬化測試架構(gòu)
網(wǎng)絡傳輸?shù)臄?shù)據(jù)量對比如表2所示。
普通的虛擬化傳輸?shù)淖畲髷?shù)據(jù)量為4.6Gbps,而SR-IOV的直接硬件虛擬化可達到9.4Gbps。
具有 SR-IOV 功能的設(shè)備還有以下優(yōu)點:節(jié)能、減少了適配器數(shù)量,同時簡化了布線,減少了交換機端口。SR-IOV有很多優(yōu)點,但是也有很多限制,比如VMWARE里原有的很多功能將對SR-IOV 的虛擬機不可用。比如Vmotion、Storage Vmotion、Vshield、NetFlow、High Availability、FT、DRS、DPM、掛起和恢復、快照、熱添加和刪除虛擬設(shè)備、加入到群集環(huán)境。
因此,我們在考慮x86網(wǎng)絡虛擬化的時候,更多的需要結(jié)合性能、業(yè)務特點、基礎(chǔ)設(shè)施來綜合考慮。如果一個業(yè)務要求比較高的性能同時不需要更多的靈活性,可以考慮SR-IOV技術(shù)。反之則選擇X86常見的網(wǎng)絡虛擬化技術(shù),結(jié)合VMWARE來進行部署。
2.2 計算層面
從計算層面來說,X86物理服務器上的CPU、內(nèi)存資源都可提供給虛擬機使用。現(xiàn)在的高性能X86服務器一般都是多CPU多核系統(tǒng),NUMA 架構(gòu)會越來越受歡迎,因為這個架構(gòu)可解決多處理器多核和非統(tǒng)一內(nèi)存架構(gòu)之間的交互帶來的新的CPU、內(nèi)存資源分配方法的挑戰(zhàn),并改善占用大量內(nèi)存的工作負載的性能。NUMA架構(gòu)如圖3所示:
圖3:NUMA架構(gòu)圖
傳統(tǒng)的服務器架構(gòu)下是把內(nèi)存放到單一的存儲池中,這對于單處理器或單核心的系統(tǒng)工作良好。但是這種傳統(tǒng)的統(tǒng)一訪問方式,在多核心同時訪問內(nèi)存空間時會導致資源爭用和性能問題。
而NUMA是服務器CPU和內(nèi)存設(shè)計的新架構(gòu),它改變了內(nèi)存對CPU的呈現(xiàn)方式,這是通過對服務器每個CPU的內(nèi)存進行分區(qū)來實現(xiàn)的。每個分區(qū)(或內(nèi)存塊)稱為NUMA節(jié)點,而和該分區(qū)相關(guān)的處理器可以更快地訪問NUMA內(nèi)存,而且不需要和其它的NUMA節(jié)點爭用服務器上的資源(其它的內(nèi)存分區(qū)分配給其它處理器)。NUMA也支持任意一個處理器訪問服務器上的任何一塊內(nèi)存區(qū)域。
某個處理器當然可以訪問位于不同區(qū)域上的內(nèi)存數(shù)據(jù),但是卻需要更多本地NUMA節(jié)點之外的傳輸,并且需要目標NUMA節(jié)點的確認。這增加了整體開銷,影響了CPU和內(nèi)存子系統(tǒng)的性能。
例如一臺配置了兩顆八核處理器以及128GB內(nèi)存的服務器,在NUMA架構(gòu)中,每個處理器能夠控制64GB的物理內(nèi)存,每個處理器的八個核心中的每個核心將對應一個8GB的NUMA節(jié)點。這將會如何影響虛擬機性能?
由于每個處理器核心訪問NUMA節(jié)點內(nèi)內(nèi)存的速度要比其他節(jié)點快,因此當虛擬機內(nèi)存大小少于或者等于NUMA節(jié)點的內(nèi)存大小時,虛擬機在理論上能夠獲得最好的性能。所以我們在這臺物理服務器上分配虛機時,不要給每臺虛擬機分配超過8GB的內(nèi)存。
如果給虛擬機分配更多的內(nèi)存,則虛擬機必然要訪問其NUMA節(jié)點之外的部分內(nèi)存,這樣或多或少會影響其性能。如果應用能夠感知NUMA,那就更好了。vSphere使用vNUMA可以創(chuàng)建能夠感知NUMA的虛擬機。該虛擬機將會被分割為虛擬NUMA節(jié)點,每個vNUMA節(jié)點將會被放置到一個不同的物理NUMA節(jié)點。盡管虛擬機仍舊在兩個NUMA節(jié)點之間擴展,但虛擬機內(nèi)的操作系統(tǒng)和應用能夠感知NUMA,資源使用將會得到優(yōu)化。
NUMA已經(jīng)對在數(shù)據(jù)中心服務器上安裝及選擇內(nèi)存的方式帶來了很多改變。在給服務器增加物理內(nèi)存時,我們需要注意增加的內(nèi)存要在NUMA節(jié)點之間進行平衡及匹配以使主板上的每個處理器擁有相同的內(nèi)存。如果在我們所舉例的服務器上配置更多的內(nèi)存,那么必須在處理器之間平衡這些內(nèi)存模塊。如果增加64GB的內(nèi)存,那么每個處理器將分配到32GB的內(nèi)存(每個處理器可支配的內(nèi)存將增加到96GB,服務器總內(nèi)存數(shù)將達到192GB),每個NUMA節(jié)點的內(nèi)存大小將從8GB增加到12GB。
結(jié)合VMWARE的最佳實踐,VMware一般給CPU建議,最大支持64個vCPU,一般不超過32個,最好不要超配置;內(nèi)存一般不給建議,根據(jù)不同的業(yè)務對內(nèi)存大小會有不同的要求,當然最好不要跨NUMA單元去進行調(diào)用。
另外還要注意一點NUMA架構(gòu)只針對物理CPU(Socket),不針對核(Core)。由于每個Socket控制的內(nèi)存插槽是不同的,因此要確保內(nèi)存插槽是均勻的。例如128G內(nèi)存分為8個16G的內(nèi)存條,那么應該4個插在一個Socket的內(nèi)存插槽中,另4個插在另一個socket的內(nèi)存插槽中。在為虛機分配vCPU資源時,也盡可能按照Socket/Core的倍數(shù)分配,比如1X1, 1X2, 1X 4, 1X8, 2X1, 2X2, 2X4, 2X8等組合,但不要使用2X3, 2X5, 2X7這種組合。后面的組合會引起跨Socket的內(nèi)存調(diào)用,從而容易導致性能下降.
2.3 存儲層面
從存儲層面來說,X86物理服務器上的VM連接后端存儲劃過來的LUN。在Lun上創(chuàng)建虛擬磁盤有三種方式:厚置備延遲置零、厚置備置零與精簡置備。如圖4所示:
圖4:磁盤三種模式
厚置備延遲置零(zeroed thick)以默認的厚格式創(chuàng)建虛擬磁盤,創(chuàng)建過程中為虛擬磁盤分配所需的全部空間。創(chuàng)建時不會擦除物理設(shè)備上保留的任何數(shù)據(jù),但是以后從虛擬機首次執(zhí)行寫操作時會按需要將其置零。簡單的說就是立刻分配指定大小的空間,空間內(nèi)數(shù)據(jù)暫時不清空,以后按需清空;厚置備置零(eager zeroed thick)創(chuàng)建支持群集功能(如 Fault Tolerance)的厚磁盤。
在創(chuàng)建時為虛擬磁盤分配所需的空間。與平面格式相反,在創(chuàng)建過程中會將物理設(shè)備上保留的數(shù)據(jù)置零。創(chuàng)建這種格式的磁盤所需的時間可能會比創(chuàng)建其他類型的磁盤長。簡單的說就是立刻分配指定大小的空間,并將該空間內(nèi)所有數(shù)據(jù)清空;精簡置備(thin)使用精簡置備格式。最初,精簡置備的磁盤只使用該磁盤最初所需要的數(shù)據(jù)存儲空間。如果以后精簡磁盤需要更多空間,則它可以增長到為其分配的最大容量。簡單的說就是為該磁盤文件指定增長的最大空間,需要增長的時候檢查是否超過限額。
另外thin provision格式在VM使用的時候比起厚置備格式也會有一些負面的性能影響。這是因為thin provision格式的磁盤是動態(tài)擴大的,一個數(shù)GB大小的vmdk文件在磁盤上不是一次生成的,因此不像厚置備格式的磁盤那樣可以占用連續(xù)的磁盤空間,因此在訪問thin provision格式的磁盤的時候,必然會因為磁頭在不連續(xù)的磁盤塊之間移動導致尋址時間較長,從而影響到Disk IO性能。
綜上所述,無論是在部署還是應用時,thin provision格式的性能都不如厚置備,所以在空間不緊張夠用的情況下建議大家使用厚置備格式的虛擬磁盤。
3、結(jié)合業(yè)務如何進行x86虛擬化后的性能優(yōu)化
例如一個Linux下的postfix郵件系統(tǒng),包含郵件服務器,數(shù)據(jù)庫和網(wǎng)絡。從磁盤看郵件系統(tǒng)的一個最大的問題是:不是很多大文件的讀寫,而是很多小文件的讀寫,而且這些讀寫請求是來自同一時間的多個進程或者線程。對這種很多小文件的讀寫應用服務,在分配郵件用戶所在的磁盤時,建議使用Thin provision模式。這樣既避免了初始空間的大量占用,也可以做到隨需增長。
從內(nèi)存上看,對于postfix而言,它的每一個進程不會消耗太多的內(nèi)存,我們期望的是大量的內(nèi)存被自動使用到磁盤緩存中來提高磁盤I/O速率,當然這個我們不需要操作,Linux幫我們完成了!Linux虛擬內(nèi)存管理默認將所有空閑內(nèi)存空間都作為硬盤緩存。因此在擁有數(shù)GB內(nèi)存的生產(chǎn)性Linux系統(tǒng)中,經(jīng)??梢钥吹娇捎玫膬?nèi)存只有20MB。從處理器上看郵件系統(tǒng),不管是smtp、imap對CPU的占用都不是很大。這樣我們在分配CPU和內(nèi)存資源時,就可以按照NUMA架構(gòu)來配置固定大小的單元。比如一臺配置了兩顆八核處理器以及128GB內(nèi)存的服務器,虛擬化成4臺郵件服務器,就可以每臺分配成4核32G。
從網(wǎng)絡上看,郵件系統(tǒng)會頻繁的使用網(wǎng)絡子系統(tǒng),但是郵件系統(tǒng)的瓶頸還是磁盤的吞吐而不是網(wǎng)絡的吞吐,對應這種應用不要求強交互,延遲是允許的,所以網(wǎng)卡是虛擬的還是SR-IOV的影響都不大。
對于郵件系統(tǒng)的數(shù)據(jù)庫服務器,因為小文件隨機讀寫比較多,數(shù)據(jù)庫的磁盤可以選擇厚置備模式,提高小數(shù)據(jù)塊的IO。
對于不同的業(yè)務系統(tǒng),具體的問題還需要具體分析,性能優(yōu)化不是一朝一夕的事,隨著業(yè)務的發(fā)展變化,優(yōu)化的技術(shù)手段和方式都會相應的隨之改變。
4、從企業(yè)日常使用和管理角度看x86服務器的虛擬化
不同的企業(yè)級應用對于CPU和內(nèi)存資源和空間的利用率是不同的,如何利用NUMA架構(gòu)來優(yōu)化資源的分配和提高性能對于企業(yè)數(shù)據(jù)中心的管理也是非常有意義的。見表3。
應用 |
CPU |
內(nèi)存 |
IOPS |
吞吐 |
數(shù)據(jù)庫 |
高 |
高 |
140 IOPS |
15MB/S |
郵件系統(tǒng) |
低 |
高 |
320 IOPS |
20MB/S |
VDI桌面 |
低 |
低 |
15 IOPS |
4MB/S |
網(wǎng)站 |
隨需變化 |
隨需變化 |
1400 IOPS |
18MB/S |
文件服務器 |
低 |
低 |
80 IOPS |
9MB/S |
表3 不同企業(yè)級應用的資源利用率對比
對于數(shù)據(jù)庫服務器,由于對CPU和內(nèi)存資源要求較高,不適合多機共享資源使用,所以盡可能使用配置較好的物理機,而對于VDI桌面、文件服務器則更適合NUMA架構(gòu)下固定CPU和內(nèi)存單元的分配,郵件系統(tǒng)則需要根據(jù)具體情況做NUMA架構(gòu)的資源分配,對于隨需變化的網(wǎng)站則不一定全部適合做NUMA,比如網(wǎng)站中的緩存服務器則更適合做非NUMA架構(gòu)的內(nèi)存分配。在分配磁盤空間時,對IO性能需求比較大的業(yè)務系統(tǒng),適合做厚置備的空間分配;對IO性能需求不是很高的、業(yè)務增長空間不是很大的業(yè)務系統(tǒng),則適合做精簡配置的空間分配。
5、結(jié)束語
X86服務器虛擬化是一項用以整合服務器資源、提高效率的技術(shù)。X86虛擬化可以帶來更高的服務器硬件及系統(tǒng)資源利用率,帶來具有透明負載均衡、動態(tài)遷移、故障自動隔離、系統(tǒng)自動重構(gòu)的高可靠服務器應用環(huán)境,以及更為簡潔、統(tǒng)一的服務器資源分配管理模式。X86服務器虛擬化在資源劃分后的性能優(yōu)化也極大提高了數(shù)據(jù)中心的整體資源利用率,符合當今綠色節(jié)能的新理念。