1. 程式人生 > >X86伺服器虛擬化的資源劃分和效能優化

X86伺服器虛擬化的資源劃分和效能優化

概述:虛擬化是一個廣義術語,通常是指計算元件在虛擬的基礎上而不是真實的基礎上執行,是一個為了簡化管理,優化資源的解決方案.伺服器虛擬化則是一項用以整合基於x86伺服器,來提高資源利用效率和效能的技術.本文從企業業務系統和管理角度出發,著重分析研究了X86技術架構下,虛擬網絡卡與SR-IOV、NUMA、虛擬磁碟格式相應的特點,並探索了不同應用場景下的資源劃分和效能優化方案,希望能夠通過多應用系統下的實踐和最優配置,來提高X86伺服器的效能和資源利用效率.
1 x86虛擬化兩種常見的架構
對於x86虛擬化,有兩種常見的架構:寄居架構和裸金屬架構.寄居架構將虛擬化層執行在作業系統之上,當作一個應用來執行,對硬體的支援很廣泛.相對的,裸金屬架構直接將虛擬化層執行在x86的硬體系統上,可以直接訪問硬體資源,無需通過作業系統來實現硬體訪問,因此效率更高.Vmware Workstation和VMware Server都是基於寄居架構而實現的,而VMware ESX Server是業界第一個裸金屬架構的虛擬化產品,目前已經發布了第五代產品.ESX Server需要執行在VMware認證的硬體平臺上,可以提供出色的效能,完全可以滿足大型資料中心對效能的要求.本文主要論述的也是基於X86裸金屬架構下的伺服器的資源劃分和效能優化問題.
2 x86虛擬化資源劃分的三個層面
伺服器的資源劃分簡單的講,包括網路、計算、儲存三個層面.每一個虛機都在其連通的網路中,承擔一定的計算任務,把計算後的資料儲存下來供業務使用.
2.1 網路層面
從網路層面來說,X86物理機使用的是物理的網絡卡,連線的是物理的交換機.在一臺X86被劃分成多個VM虛機後,就誕生了虛擬網絡卡和虛擬交換機.這樣在虛擬和物理網路之間就產生了流量傳輸與互動.如圖1所示.
X86伺服器虛擬化的資源劃分和效能優化


同一臺物理機上劃分的VM有同一網段和不同網段之分,再根據虛機之間的網路流量是否經過物理網絡卡,具體可分為四種不同的情況:
第一種情況,比如某業務系統的VM在同一主機的同一網段,則虛擬機器之間網路流量不經過主機物理網絡卡,其最大網路流量為7.6GB.(測試方法:在testvm1上啟用jperf server作為網路資料接收端,在testvm2中啟用jperf client連線jperf server傳送網路資料包,同時加壓網路流量.X86主機為雙萬兆網絡卡);
第二種情況,比如某業務系統的VM在同一主機的不同網段,則虛擬機器之間網路流量經過主機物理網絡卡,其最大網路流量為5.6GB.測試方法同上.
第三種情況,比如某業務系統的VM在不同主機的同一網段,則虛擬機器之間網路流量經過主機物理網絡卡,其最大網路流量為6.5GB.測試方法同上.
第四種情況,比如某業務系統的VM在不同主機的不同網段,則虛擬機器之間網路流量經過主機物理網絡卡,其最大網路流量為4.6GB.測試方法同上.
測試的幾種場景對比表如表1所示。
X86伺服器虛擬化的資源劃分和效能優化

在一臺X86物理伺服器上進行VM的網路虛擬化,還有一種技術就是SR-IOV.SR-IOV 技術是INTEL提出的一種基於硬體的虛擬化解決方案,可提高效能和可伸縮性.SR-IOV 標準允許在虛擬機器之間高效共享 PCIe(Peripheral Component Interconnect Express,快速外設元件互連)裝置,並且它是在硬體中實現的,可以獲得能夠與本機效能媲美的網路 I/O 效能.比如我們把一臺X86物理伺服器上的萬兆網絡卡通過SR-IOV技術分成4個虛擬網絡卡給4個VM使用,那麼其網路傳輸效能將比虛擬化網絡卡給VM使用高很多.
測試方法:在一臺X86物理伺服器上,4個VM啟用jperf server作為網路資料接收端;在另一臺X86物理伺服器上,4個VM啟用jperf client連線jperf server傳送網路資料包,同時加壓網路流量.兩臺X86主機為雙萬兆網絡卡.
SR-IOV虛擬化測試架構如圖2所示.
X86伺服器虛擬化的資源劃分和效能優化

網路傳輸的資料量對比如表2所示.
X86伺服器虛擬化的資源劃分和效能優化
普通的虛擬化傳輸的最大資料量為4.6Gbps,而SR-IOV的直接硬體虛擬化可達到9.4Gbps.
具有 SR-IOV 功能的裝置還有以下優點:節能、減少了介面卡數量,同時簡化了佈線,減少了交換機埠.SR-IOV有很多優點,但是也有很多限制,比如VMWARE裡的原有的很多功能將對SR-IOV 的虛擬機器不可用.比如Vmotion、Storage Vmotion、Vshield、NetFlow、High Availability、FT、DRS、DPM、掛起和恢復、快照、熱新增和刪除虛擬裝置、加入到群集環境.
因此,我們在考慮x86網路虛擬化的時候,更多的需要結合效能、業務特點、基礎設施來綜合考慮.如果一個業務要求比較高的效能同時不需要更多的靈活性,可以考慮SR-IOV技術.反之則選擇X86常見的網路虛擬化技術,結合VMWARE來進行部署.
2.2 計算層面
從計算層面來說,X86物理伺服器上的CPU、記憶體資源都可提供給虛擬機器使用.現在的高效能X86伺服器一般都是多CPU多核系統,NUMA 架構會越來越受歡迎,因為這個架構可解決多處理器多核和非統一記憶體架構之間的互動帶來的新的CPU、記憶體資源分配方法的挑戰,並改善佔用大量記憶體的工作負載的效能. NUMA架構如圖3所示.
X86伺服器虛擬化的資源劃分和效能優化
傳統的伺服器架構下是把記憶體放到單一的儲存池中,這對於單處理器或單核心的系統工作良好.但是這種傳統的統一訪問方式,在多核心同時訪問記憶體空間時會導致資源爭用和效能問題.而NUMA是伺服器CPU和記憶體設計的新架構,它改變了記憶體對CPU的呈現方式,這是通過對伺服器每個CPU的記憶體進行分割槽來實現的.每個分割槽(或記憶體塊)稱為NUMA節點,而和該分割槽相關的處理器可以更快地訪問NUMA記憶體,而且不需要和其它的NUMA節點爭用伺服器上的資源(其它的記憶體分割槽分配給其它處理器).NUMA也支援任意一個處理器訪問伺服器上的任何一塊記憶體區域.某個處理器當然可以訪問位於不同區域上的記憶體資料,但是卻需要更多本地NUMA節點之外的傳輸,並且需要目標NUMA節點的確認.這增加了整體開銷,影響了CPU和記憶體子系統的效能.
例如一臺配置了兩顆八核處理器以及128GB記憶體的伺服器.在NUMA架構中,每個處理器能夠控制64GB的實體記憶體,每個處理器的八個核心中的每個核心將對應一個8GB的NUMA節點.這將會如何影響虛擬機器效能?由於每個處理器核心訪問NUMA節點內記憶體的速度要比其他節點快,因此當虛擬機器記憶體大小少於或者等於NUMA節點的記憶體大小時,虛擬機器在理論上能夠獲得最好的效能.所以我們在這臺物理伺服器上分配虛機時,不要給每臺虛擬機器分配超過8GB的記憶體.如果給虛擬機器分配更多的記憶體,則虛擬機器必然要訪問其NUMA節點之外的部分記憶體,這樣或多或少會影響其效能.如果應用能夠感知NUMA,那就更好了.vSphere使用vNUMA可以建立能夠感知NUMA的虛擬機器.該虛擬機器將會被分割為虛擬NUMA節點,每個vNUMA節點將會被放置到一個不同的物理NUMA節點.儘管虛擬機器仍舊在兩個NUMA節點之間擴充套件,但虛擬機器內的作業系統和應用能夠感知NUMA,資源使用將會得到優化.
NUMA已經對在資料中心伺服器上安裝及選擇記憶體的方式帶來了很多改變.在給伺服器增加實體記憶體時,我們需要注意增加的記憶體要在NUMA節點之間進行平衡及匹配以使主機板上的每個處理器擁有相同的記憶體.如果在我們所舉例的伺服器上配置更多的記憶體,那麼必須在處理器之間平衡這些記憶體模組.如果增加64GB的記憶體,那麼每個處理器將分配到32GB的記憶體(每個處理器可支配的記憶體將增加到96GB,伺服器總記憶體數將達到192GB),每個NUMA節點的記憶體大小將從8GB增加到12GB.
結合VMWARE的最佳實踐,VMware一般給CPU建議,最大支援64個vCPU,一般不超過32個,最好不要超配置;記憶體一般不給建議,根據不同的業務對記憶體大小會有不同的要求,當然最好不要跨NUMA單元去進行呼叫.另外還要注意一點NUMA架構只針對物理CPU(Socket),不針對核(Core).由於每個Socket控制的記憶體插槽是不同的,因此要確保記憶體插槽是均勻的.例如128G記憶體分為8個16G的記憶體條,那麼應該4個插在一個Socket的記憶體插槽中,另4個插在另一個socket的記憶體插槽中.在為虛機分配vCPU資源時,也儘可能按照Socket/Core的倍數分配,比如1X1, 1X2, 1X 4, 1X8, 2X1, 2X2, 2X4, 2X8等組合,但不要使用2X3, 2X5, 2X7這種組合.後面的組合會引起跨Socket的記憶體呼叫,從而容易導致效能下降.
2.3 儲存層面
從儲存層面來說,X86物理伺服器上的VM連線後端儲存划過來的LUN.在Lun上建立虛擬磁碟有三種方式:厚置備延遲置零、厚置備置零與精簡置備.如圖4所示.
X86伺服器虛擬化的資源劃分和效能優化
厚置備延遲置零(zeroed thick)以預設的厚格式建立虛擬磁碟.建立過程中為虛擬磁碟分配所需的全部空間.建立時不會擦除物理裝置上保留的任何資料,但是以後從虛擬機器首次執行寫操作時會按需要將其置零.簡單的說就是立刻分配指定大小的空間,空間內資料暫時不清空,以後按需清空;厚置備置零(eager zeroed thick)建立支援群集功能(如 Fault Tolerance)的厚磁碟.在建立時為虛擬磁碟分配所需的空間.與平面格式相反,在建立過程中會將物理裝置上保留的資料置零.建立這種格式的磁碟所需的時間可能會比建立其他型別的磁碟長.簡單的說就是立刻分配指定大小的空間,並將該空間內所有資料清空;精簡置備(thin)使用精簡置備格式.最初,精簡置備的磁碟只使用該磁碟最初所需要的資料儲存空間.如果以後精簡磁碟需要更多空間,則它可以增長到為其分配的最大容量.簡單的說就是為該磁碟檔案指定增長的最大空間,需要增長的時候檢查是否超過限額.
另外thin provision格式在VM使用的時候比起厚置備格式也會有一些負面的效能影響.這是因為thin provision格式的磁碟是動態擴大的,一個數GB大小的vmdk檔案在磁碟上不是一次生成的,因此不像厚置備格式的磁碟那樣可以佔用連續的磁碟空間,因此在訪問thin provision格式的磁碟的時候,必然會因為磁頭在不連續的磁碟塊之間移動導致定址時間較長,從而影響到Disk IO效能.
綜上所述,無論是在部署還是應用時,thin provision格式的效能都不如厚置備,所以在空間不緊張夠用的情況下建議大家使用厚置備格式的虛擬磁碟.
3 結合業務如何進行x86虛擬化後的效能優化
例如一個linux下的postfix郵件系統,包含郵件伺服器,資料庫和網路.從磁碟看郵件系統的一個最大的問題是:不是很多大檔案的讀寫,而是很多小檔案的讀寫,而且這些讀寫請求是來自同一時間的多個程序或者執行緒.對這種很多小檔案的讀寫應用服務,在分配郵件使用者所在的磁碟時,建議使用Thin provision模式.這樣既避免了初始空間的大量佔用,也可以做到隨需增長.
從記憶體上看,對於postfix而言,它的每一個程序不會消耗太多的記憶體,我們期望的是大量的記憶體被自動使用到磁碟快取中來提高磁碟I/O速率,當然這個我們不需要操作,linux幫我們完成了!Linux虛擬記憶體管理預設將所有空閒記憶體空間都作為硬碟快取.因此在擁有數GB記憶體的生產性Linux系統中,經常可以看到可用的記憶體只有20MB.從處理器上看郵件系統,不管是smtp、imap對CPU的佔用都不是很大.這樣我們在分配CPU和記憶體資源時,就可以按照NUMA架構來配置固定大小的單元.比如一臺配置了兩顆八核處理器以及128GB記憶體的伺服器,虛擬化成4臺郵件伺服器,就可以每臺分配成4核32G.
從網路上看,郵件系統會頻繁的使用網路子系統,但是郵件系統的瓶頸還是磁碟的吞吐而不是網路的吞吐,對應這種應用不要求強互動,延遲是允許的,所以網絡卡是虛擬的還是SR-IOV的影響都不大.
對於郵件系統的資料庫伺服器,因為小檔案隨機讀寫比較多,資料庫的磁碟可以選擇厚置備模式,提高小資料塊的IO.
對於不同的業務系統,具體的問題還需要具體分析,效能優化不是一朝一夕的事,隨著業務的發展變化,優化的技術手段和方式都會相應的隨之改變.

4 從企業日常使用和管理角度看x86伺服器的虛擬化
不同的企業級應用對於CPU和記憶體資源和空間的利用率是不同的.如何利用NUMA架構來優化資源的分配和提高效能對於企業資料中心的管理也是非常有意義的.見表3。
X86伺服器虛擬化的資源劃分和效能優化
對於資料庫伺服器,由於對CPU和記憶體資源要求較高,不適合多機共享資源使用,所以儘可能使用配置較好的物理機,而對於VDI桌面、檔案伺服器則更適合NUMA架構下固定CPU和記憶體單元的分配,郵件系統則需要根據具體情況做NUMA架構的資源分配,對於隨需變化的網站則不一定全部適合做NUMA,比如網站中的快取伺服器則更適合做非NUMA架構的記憶體分配. 在分配磁碟空間時,對IO效能需求比較大的業務系統,適合做厚置備的空間分配;對IO效能需求不是很高的、業務增長空間不是很大的業務系統,則適合做精簡配置的空間分配.

5 結束語
X86伺服器虛擬化是一項用以整合伺服器資源、提高效率的技術.X86虛擬化可以帶來更高的伺服器硬體及系統資源利用率,帶來具有透明負載均衡、動態遷移、故障自動隔離、系統自動重構的高可靠伺服器應用環境,以及更為簡潔、統一的伺服器資源分配管理模式.X86伺服器虛擬化在資源劃分後的效能優化也極大提高了資料中心的整體資源利用率,符合當今綠色節能的新理念.