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

尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️

加入LINE好友

虛擬化是一個廣義術語,通常是指計算元件在虛擬的基礎上而不是真實的基礎上運行,是一個為了簡化管理,優化資源的解決方案.服務器虛擬化則是一項用以整合基於x86服務器,來提高資源利用效率和性能的技術.

本文從企業業務系統和管理角度出發,著重分析研究了X86技術架構下,虛擬網卡與SR-IOV、NUMA、虛擬磁盤格式相應的特點,並探索了不同應用場景下的資源劃分和性能優化方案,希望能夠通過多應用系統下的實踐和最優配置,來提高X86服務器的性能和資源利用效率.

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

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

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

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

網路層面

從網路層面來說,X86物理機使用的是物理的網卡,連接的是物理的交換機.在一台X86被劃分成多個VM虛機後,就誕生了虛擬網卡和虛擬交換機.這樣在虛擬和物理網路之間就產生了流量傳輸與交互.如圖1所示.

圖1 虛擬網路和物理網路

同一台物理機上劃分的VM有同一網段和不同網段之分,再根據虛機之間的網路流量是否經過物理網卡,具體可分為四種不同的情況:

第一種情況,比如某業務系統的VM在同一主機的同一網段,則虛擬機之間網路流量不經過主機物理網卡,其最大網路流量為7.6GB.(測試方法:在testvm1上啟用jperf server作為網路數據接收端,在testvm2中啟用jperf client連接jperf server發送網路數據包,同時加壓網路流量.X86主機為雙萬兆網卡)

第二種情況,比如某業務系統的VM在同一主機的不同網段,則虛擬機之間網路流量經過主機物理網卡,其最大網路流量為5.6GB.測試方法同上.

第三種情況,比如某業務系統的VM在不同主機的同一網段,則虛擬機之間網路流量經過主機物理網卡,其最大網路流量為6.5GB.測試方法同上.

第四種情況,比如某業務系統的VM在不同主機的不同網段,則虛擬機之間網路流量經過主機物理網卡,其最大網路流量為4.6GB.測試方法同上.

測試的幾種場景對比表如表1所示。

表1 幾種場景的VM測試數據對比

在一台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所示.

圖2 SR-IOV虛擬化測試架構

網路傳輸的數據量對比如表2所示.

普通的虛擬化傳輸的最大數據量為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來進行部署.

計算層面

從計算層面來說,X86物理服務器上的CPU、記憶體資源都可提供給虛擬機使用.現在的高性能X86服務器一般都是多CPU多核系統,NUMA 架構會越來越受歡迎,因為這個架構可解決多處理器多核和非統一記憶體架構之間的交互帶來的新的CPU、記憶體資源分配方法的挑戰,並改善占用大量記憶體的工作負載的性能.

NUMA架構如圖3所示.

圖3 NUMA架構圖

傳統的服務器架構下是把記憶體放到單一的存儲池中,這對於單處理器或單核心的系統工作良好.但是這種傳統的統一訪問方式,在多核心同時訪問記憶體空間時會導致資源爭用和性能問題.而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的記憶體調用,從而容易導致性能下降.

存儲層面

從存儲層面來說,X86物理服務器上的VM連接後端存儲劃過來的LUN.在Lun上創建虛擬磁盤有三種方式:厚置備延遲置零、厚置備置零與精簡置備.如圖4所示.

圖4 磁盤三種模式

厚置備延遲置零(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

表3 不同企業級應用的資源利用率對比

對於數據庫服務器,由於對CPU和記憶體資源要求較高,不適合多機共享資源使用,所以盡可能使用配置較好的物理機,而對於VDI桌面、文件服務器則更適合NUMA架構下固定CPU和記憶體單元的分配,郵件系統則需要根據具體情況做NUMA架構的資源分配,對於隨需變化的網站則不一定全部適合做NUMA,比如網站中的緩存服務器則更適合做非NUMA架構的記憶體分配. 在分配磁盤空間時,對IO性能需求比較大的業務系統,適合做厚置備的空間分配;對IO性能需求不是很高的、業務增長空間不是很大的業務系統,則適合做精簡配置的空間分配.

5 結束語

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

作者介紹:

孫傑 北京中油瑞飛資深架構師,著名技術博客博主,國內雲技術社區技術專家。

About 尋夢園
尋夢園是台灣最大的聊天室及交友社群網站。 致力於發展能夠讓會員們彼此互動、盡情分享自我的平台。 擁有數百間不同的聊天室 ,讓您隨時隨地都能找到志同道合的好友!