X86服務器虛擬化的資源劃分和性能優化

概述:虛擬化是一個廣義術語,一般是指計算元件在虛擬的基礎上而不是真實的基礎上運行,是一個爲了簡化管理,優化資源的解決方案.服務器虛擬化則是一項用以整合基於x86服務器,來提升資源利用效率和性能的技術.本文從企業業務系統和管理角度出發,着重分析研究了X86技術架構下,虛擬網卡與SR-IOV、NUMA、虛擬磁盤格式相應的特色,並探索了不一樣應用場景下的資源劃分和性能優化方案,但願可以經過多應用系統下的實踐和最優配置,來提升X86服務器的性能和資源利用效率.linux

1 x86虛擬化兩種常見的架構數據庫

對於x86虛擬化,有兩種常見的架構:寄居架構和裸金屬架構.寄居架構將虛擬化層運行在操做系統之上,看成一個應用來運行,對硬件的支持很普遍.相對的,裸金屬架構直接將虛擬化層運行在x86的硬件系統上,能夠直接訪問硬件資源,無需經過操做系統來實現硬件訪問,所以效率更高.Vmware Workstation和VMware Server都是基於寄居架構而實現的,而VMware ESX Server是業界第一個裸金屬架構的虛擬化產品,目前已經發布了第五代產品.ESX Server須要運行在VMware認證的硬件平臺上,能夠提供出色的性能,徹底能夠知足大型數據中心對性能的要求.本文主要論述的也是基於X86裸金屬架構下的服務器的資源劃分和性能優化問題.後端

2 x86虛擬化資源劃分的三個層面緩存

服務器的資源劃分簡單的講,包括網絡、計算、存儲三個層面.每個虛機都在其連通的網絡中,承擔必定的計算任務,把計算後的數據存儲下來供業務使用.性能優化

2.1 網絡層面
3.
從網絡層面來講,X86物理機使用的是物理的網卡,鏈接的是物理的交換機.在一臺X86被劃分紅多個VM虛機後,就誕生了虛擬網卡和虛擬交換機.這樣在虛擬和物理網絡之間就產生了流量傳輸與交互.如圖1所示.服務器

X86服務器虛擬化的資源劃分和性能優化

同一臺物理機上劃分的VM有同一網段和不一樣網段之分,再根據虛機之間的網絡流量是否通過物理網卡,具體可分爲四種不一樣的狀況:網絡

第一種狀況,好比某業務系統的VM在同一主機的同一網段,則虛擬機之間網絡流量不通過主機物理網卡,其最大網絡流量爲7.6GB.(測試方法:在testvm1上啓用jperf server做爲網絡數據接收端,在testvm2中啓用jperf client鏈接jperf server發送網絡數據包,同時加壓網絡流量.X86主機爲雙萬兆網卡);架構

第二種狀況,好比某業務系統的VM在同一主機的不一樣網段,則虛擬機之間網絡流量通過主機物理網卡,其最大網絡流量爲5.6GB.測試方法同上.負載均衡

第三種狀況,好比某業務系統的VM在不一樣主機的同一網段,則虛擬機之間網絡流量通過主機物理網卡,其最大網絡流量爲6.5GB.測試方法同上.socket

第四種狀況,好比某業務系統的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服務器虛擬化在資源劃分後的性能優化也極大提升了數據中心的總體資源利用率,符合當今綠色節能的新理念.

相關文章
相關標籤/搜索