伺服器扮演著公司數位業務發展的主要前鋒部隊,因此穩定性與效能上都要以最嚴格的規劃與建置手法,提供即時反應與快速交付,以讓高速數據傳遞與精準的運算結果,呈現於使用者面前。
如今在數位轉型的路途上,伺服器需要負擔的資料量不僅更龐大,也需要更即時處理,因此除了安裝更快處理器與多顆大容量硬碟所組成龐大的儲存空間外,別忘了記憶體容量與快取機制也非常重要。以下就來探討營運中的伺服器在當今多台VM (虛擬機)的架構下,如何讓各台虛擬機所提供的服務都能快速到位,降低不必要的Lag (延遲),以提升公司整體數位競爭力!
以下就拿VMware ESXi和Proxmox VE這兩套知名的VM Hypervisor,來做實測範例。
PART 1: VMware ESXi效能提升方法
VMware ESXi (以下簡稱ESXi)可說是商用VM Hypervisor中的第一選擇,其提供近乎原生執行速度的虛擬機效能,以及輕鬆使用親和GUI介面來統合管理。此外還可搭配官方或第三方的多種套件,建構更完整的企業儲存級與資料備援等機制,賦予完善的虛擬機部署與執行環境,全天候營運不中斷。
雖說VMware ESXi已提供企業必備的基本功能,但在一些進階的設定、調校與優化方面,仍得透過CLI文字命令或搭配其他套件來擴充處理才行。因此想導入VMware系的公司行號,在Infrastructure (基礎設備,簡稱infra)的規劃上就得先預留未來的擴充需求。以下先假定各位讀者已熟悉ESXi的架構與進階操作,並熟悉自己伺服器的infra,以便加速調校自己的ESXi host主機。
先簡單說明VMware ESXi的儲存架構,其datastore儲存池的規劃,可以來本地端RAID卡的Virtual Drive,或是來自其他儲存Server (如vSAN)或是NAS端iSCSI的Target LUN。在Volume的規劃上,VMware採用自己的VMFS做為檔案系統,而各VM的虛擬硬碟格式則是vmdk。由於vmdk機制會視各種寫入的資料都是重要資料,因此ESXi host會將各種處理中的資料都寫回硬碟,以確保硬碟資料完整性。
正因此,儲存池的存取效能,就會直接影響到VM的執行速度。且伺服器執行VM的數量也會影響整體表現。使用者可以透過「擴充記憶體」,或是「增加快取機制」,以減少多台VM同時存取資料時所造成的效能瓶頸。
三層記憶體 (VA/GA/HA) 配置簡介
效能調校方面,先從說記憶體管理方面說起,要了解如何優化記憶體使用,我們得先了解實體機(ESXi host)與虛擬機(VM)的記憶體配置疊層架構,說明如下:
上圖表示,當您透過ESXi建立新的VM,假設指定16GB給VM1。ESXi主機就會註記該VM會使用到16GB的記憶體。此時記憶體對應層,就可區分成三種對應圖:ESXi主機端直接存取的HA (實體記憶體)、VM虛擬機端內被配發到的GA (客端記憶體),以及VM虛擬機內又有自己的記憶體管理系統與定址方式,這裡可視為VA (VM內虛擬記憶體定址)。
當一台ESXi主機內,同時開啟兩台VM的話,此時的記憶體對應方式,就如同上圖。多台VM一起共享ESXi主機所配發出來的資源。舉實例來說,若您裝了10台VM,每台都配給4GB記憶體,這樣同時開機時就至少要40GB的系統記憶體了,加上ESXi host端也需要記憶體,因此粗估至少建議要裝足48GB以上的系統記憶體比較保險。
然而真正的狀況,可能需要更多記憶體。例如你只開了9台VM,但要開第10台VM時,ESXi卻回報記憶體不足的訊息而無法開機。由於ESXi主機並無法法從VM得知哪些記憶體被使用到。當VM釋放某些記憶體區塊時,ESXi主機還認定那塊記憶體還是佔用中,使得一旦VM同時執行多個應用程式時,就有可能造成所使用的整體記憶體數量,大於ESXi所配發的數量。要是一次有多台VM執行時一直配置記憶體的話,會導致ESXi伺服器最終會發生「搶RAM、搶碟、搶資源」的窘境。尤其當ESXi主機記憶體不足時,效能低落事小,發生PSOD當機情況才叫事大(PSOD類似Windows的BSOD,背景為紫色)。
因此,為了避免VM資源過度使用、減少資源互搶情況,ESXi有內建一個記憶體回收機制,讓ESXi主機端擁有足夠的可用記憶體,以確保管理程式能正常運用。在其進階設定參數中,有一個 Mem.MemMinFreePct 的設定值,其表示VMkernel需要保留多少記憶體以讓系統穩定,而不發生PSOD的窘境。有關於此設定項目,可以參考: https://blogs.vmware.com/vsphere/2012/05/memminfreepct-sliding-scale-function.html。
從上可知,ESXi Host有自己主機端記憶體(HA)的配置機制,會依照VM指定的vRAM數量來配發足夠的Guest端記憶體(GA),然而Guest VM內部作業系統也有自己的記憶體定址與存取方式(VA),因此等於有上述的三層記憶體定址。
當然,若您的VM Guest有安裝VMware Tools,那就可以更精確掌控Guest OS的記憶體使用狀況,以便向ESXi Host回報。因此可以的話,盡量每個VM裡面都安裝VMware Tools,若是Ubuntu那種本身就已安裝好Open VM Tools的話,就可不用另行安裝VMware的版本。
ESXi主機只要加RAM就有非常顯著的加速效果
在ESXi環境下配置vRAM給VM時,建議配置多一點,不要算到剛剛好,例如OS本身吃1~2GB,裡面跑的ERP、SQL或DB大致用到3~4GB,一般會覺得配個8GB就好了。但由於OS會依照動態需求來增加記憶體的配置,加上DB會一直膨脹,使得原先配發的記憶體不足,導致動用到swap file機制,這樣一來,VM就等於同時耗用到額外的vStorage和vRAM的負載,導致效能降低。因此,最好配置12GB會比較足夠。
▲ 伺服器只配置32GB記憶體時,在同時執行3個皆佔8GB的VM,此時剩餘記憶體數量不多,將影響ESXi Host的資源調度 (記憶體容量黃色條處)
正因此,要提升伺服器效果,第一步驟就是「擴充記憶體容量」,就會有立即且顯著的加速效果。因為這樣可讓ESXi Host記憶體配置空間更加靈活,降低Storage的讀寫機會,也同時延長儲存空間的使用壽命。
▲ 伺服器擴充到128GB記憶體時,同樣同時執行3個佔8GB的VM,此時剩餘記憶體數量很充足,非常足夠ESXi Host來做資源調度,效能也會有所提升
實際測試結果,可以參考本文章下面後半部。
PART 2: Proxmox VE效能提升方法
Proxmox VE (以下簡稱PVE)是開源VM Hypervisor中的絕佳選擇,其提供完整的虛擬、儲存、網路、管理、備援等機制,搭配完善的Web GUI可視化介面,讓多台虛擬機部署工作輕鬆完成,亦可設定一開機就「全面啟動」。
雖說PVE許多基本功能都可透過Web GUI來搞定,但在一些進階功能以及效能調校與優化上,仍得透過CLI 文字命令來處理。因此想導入PVE者,對於Linux指令與系統架構必須有一定程度的功力才行。此外,開源軟體的工具很多,要如何更精確的進行效能調校,建議先了解Linux核心的運作原理,以及各檔案系統的特性,以便可以對症下藥,達到有用的效能提升效果。
先說明VM之下的效能提升方面,相較於VMware Tools的Guest Daemon,PVE採用QEMU核心,也可以安裝Virtio-win的Guest驅動程式,讓PVE的VM也能透過接近原生的驅動程式,來存取PVE Host的硬體資源。
至於更細部的調校,則可從PVE的檔案系統機制,來搭配適合的儲存裝置與硬碟規劃,下面就簡單介紹ZFS的運作架構。
PVE檔案系統ZFS的快取機制簡介
PVE支援的檔案系統很多種,包含目錄、LVM、BTRFS、ZFS、CephFS、NFS、iSCSI…等等。以主要開機碟來說,會分割成LVM,主要運作的VM則可放入ZFS,以支援快照,網路存取則可透過NFS、iSCSI來達成。這裡以ZFS檔案架構的特性,來說明其內建的快取機制。
ZFS架構設計上,會需要更多的記憶體空間來進行快取加速,由於ZFS的寫入特性是copy-on-write (COW),其ZIL (ZFS Intent Log)機制可是為第一階支援斷電保護的磁碟寫入快取,當大量寫入時,使用高速SSD會讓其效能加速。至於ARC (Adaptive Replacement Cache)機制,則是ZFS的第一層記憶體快取,主要運用在metadata與一般data的讀取快取加速作用,要是這個區塊沒找到資料(Cache Miss),則會去L2ARC這個第二層記憶體快取(通常指定在SSD上)。簡單來說ZFS就是透過ZIL、ARC和L2ARC等機制,來提升資料存取效能,以降低ZFS主硬碟(zpool)的實際讀寫次數。其架構比傳統的NVRAM + Disks的成本還低且效能更高。
因此,以儲存加速的角度來看,建議可以高速NVMe SSD來當zpool主儲存區,別去當SSD快取碟,至於快取方面,如前面提到過VMware的HA/GA/VA機制,在PVE環境下也一樣有類似的記憶體配置機制,因此要讓VM保持執行順暢,同樣也需要保持記憶體容量充足、降低記憶體使用上的壓力,這樣一來也就是增加足夠的記憶體,而不要算得剛剛好。有關於PVE在ZFS的詳細介紹與運用,可以參考這裡: https://pve.proxmox.com/wiki/ZFS_on_Linux。
PART 3: ESXi / PVE效能提升實測 (記憶體)
前面簡單介紹VMware ESXi和Proxmox VE的架構設計,以及記憶體容量和儲存裝置的不同需求。那麼接下來我們就來實際進行測試,本文先就「記憶體擴充」部份,來比較記憶體擴充前後的效能提升效果。
以下是本次的測試主機:
● (1) VMware ESXi 7.0.1 測試機
> 伺服器: IBM System X3550 M4
> 處理器: Intel Xeon E5-2680 v2 x2 (2.80GHz)
> 記憶體: DDR3 ECC REG 8GB x4 (=32GB) ; x16 (=128GB)
> 硬碟 : Dell Enterprise HDD 900GB x4 (RAID5) = 2.6TB (VMFS Datastore)
> RAID卡: IBM ServeRAID M5110 (w/ 512MB DRAM Cache) RAID mode
> SSD : Intel SATA SSD 120GB (Boot)
● (2) Proxmox VE 7.1 測試機
> 伺服器: Dell PowerEdge R630
> 處理器: Intel Xeon E5-2680 v4 x2 (2.40GHz)
> 記憶體: DDR4 ECC REG 8GB x4 (=32GB) ; x16 (=128GB)
> 硬碟 : Dell Enterprise HDD 2TB x3 (RAIDZ) = 3.8TB (ZFS Datapool)
> RAID卡: Dell PERC H730p Mini (w/ 2GB NV Cache) Non-RAID mode
> SSD : Intel SATA SSD 120GB (Boot)
這次我們針對兩款知名的VM Hypervisor準備了兩款不同規格等級的伺服器主機,在記憶體方面則個別配備32GB和128GB一次,以測試ESXi和PVE在夠用與充裕記憶體之下,其VM的存取效能表現。
在效能評測設定上,我們選擇在兩種VM Hypervisor下,都安裝了Windows 10、11和Windows Server 2016的VM,並裝好Guest Tools (即VMware Tools或Virtio-Win),以便發揮出VM應有效能,這三個VM都是配置4 vCPU與8GB vRAM,測試方法是,同時開啟這三個VM,並同時執行AIDA64的記憶體測試,等其測完後記錄結果,接著再同時執行CrystalDiskMark測試。過程會測試個兩三次,把不合理的測試結果剔除。以測試出三個VM同時執行下的記憶體效能與磁碟存取效能。以下先來看VMware ESXi的測試結果:
(A) ESXi同時執行3組VM的壓力測試
▲測試(a) 開啟Win10/11/2016 VM,並同時執行AIDA64的記憶體測試。只看Memory的Read/Write/Copy這三項數值。並將3個VM的數值加總後取平均值。此為系統記憶體為32GB時的測試結果
▲測試(b) 開啟Win10/11/2016 VM,並同時執行CrystalDiskMark進行磁碟循序與隨機存取測試。只看Seq 1M Q8T1與Read Rnd 4K Q32T1 的Read/Write部份共四項數值。並將3個VM的數值加總後取平均值。此為系統記憶體為32GB時的測試結果
▲同上述的測試(a),但此為系統記憶體為128GB時的測試結果,可與上述的數值做比較
▲同上述的測試(b),但此為系統記憶體為128GB時的測試結果,可與上述的數值做比較
(B) ESXi以iSCSI LUN執行1組VM的效能測試
另外,我們也設置了一台NAS,配置兩組500GB的iSCSI LUN,讓這兩種VM Hypervisor掛載,並在iSCSI的Volume上安裝另一套Windows 10 VM,測試時就只開啟這個VM,同樣測試AIDA64與CrystalDiskMark,以得知以網路磁碟為主的VM,其記憶體與磁碟的存取效能,在系統分別安裝32GB或128GB記憶體時的效能差異。
▲測試(c) 只執行另一個儲存於iSCSI LUN的Win10 VM,並執行AIDA64的記憶體測試。只看Memory的Read/Write/Copy這三項數值。(圖左: 32GB記憶體、圖右: 128GB記憶體)
▲測試(d) 只執行另一個儲存於iSCSI LUN的Win10 VM,並執行CrystalDiskMark進行磁碟循序與隨機存取測試。只看Seq 1M Q8T1與Read Rnd 4K Q32T1 的Read/Write部份共四項數值。(圖左: 32GB記憶體、圖右: 128GB記憶體)
(C) 其他加速軟體簡介: VMware ESXi專用快取軟體-VirtuCache
VirtuCache是一套專為VMware ESXi 6.7/7.0所打造的快取軟體,可針對vCenter各Cluster下的VM進行記憶體或SSD的加速動作,只要安裝一套,搭配一些調校,就可以為整個VMware vSphere環境進行加速,尤其是Storage的加速功能,可提升整體運作效能。不過,本篇主要探討記憶體加速範圍,礙於篇幅,這裡就先簡單介紹這套軟體,至於詳細介紹與實測方面,留待下篇再來詳加介紹。
▲VirtuCache的VM Appliance畫面
▲透過Web UI設定VirtuCache的記憶體快取畫面
簡單介紹一下VirtuCache之後,由於本次不列入測試。接下來看看這次VMware ESXi 7測試機單純從硬體升級的方式來進行效能調校,的綜合測試結果,請參考以下測試表1~4。
▼表1: VMware ESXi 7同時執行3個Windows VM時,同時測試AIDA與CrystalDiskMark的個別效能與平均效能 (系統記憶體: 32GB)
▼表2: VMware ESXi 7同時執行3個Windows VM時,同時測試AIDA與CrystalDiskMark的個別效能與平均效能 (系統記憶體: 128GB)
▼表3: VMware ESXi效能總比較:以32GB的測試成績為1,與128GB的效能提升比例 (參考下文詳述)
▼表4: VMware ESXi 7執行1個儲存於iSCSI LUN的Windows VM,分別執行AIDA與CrystalDiskMark的效能與效能比 (系統記憶體: 32GB、128GB,與兩者效能對比)
VMware ESXi效能分析與小結
從上面的表1至表4來分析,表1和表2分別是32GB和128GB下同時執行3個Windows VM的Memory與Disk效能後,取平均值。至於表3,則是上述兩種狀況 (32GB、128GB)下的效能互比,以32GB的測試成績為基準1分,其他記憶體配置的表現部份只要0.95分以上的,都視為是測試誤差,以綠色字標示,除非效能差距太多,才以紅色字標示。可以看到該表,128GB都比其32GB的分數還要高,且都是綠色字,足以證明在Local Storage下,「擴充記憶體」或是「開啟記憶體快取」,都能讓ESXi有效提升記憶體或磁碟存取效能。
至於iSCSI的網路磁碟測試部份,則是在表4。可發現記憶體和磁碟讀取都有顯著效能提升,尤其是隨機讀取的效能高很多。因此像是iSCSI、FC、NFS等Network Storage也可以透過「擴充記憶體」來提升記憶體與儲存效能。
PVE增加記憶體可提升讀取快取的效能與簡測
接下來,我們就繼續看看PVE如何透過擴充記憶體來提升效能。前面提到由於ZFS的ARC機制,當系統有多餘的閒置RAM時,ZFS自定會使用約一半空間當成RAM Drive來做為快取使用,這個RAM快取空間會依照系統RAM的配置與釋放來做增減,因此當可用記憶體都配置給VM使用時,ZFS的RAM Drive空間也相對減少,使得存取加速的效果降低。
也就是說,PVE在記憶體容量方面,盡量別算得剛剛好,以免影響到VM的整體效能。
▲PVE在32GB記憶體容量情況,長時間執行下來,負載壓力都比較重! (僅執行2個VM)
▲PVE在32GB記憶體容量情況,同時執行3組VM下,RAM空間很快就吃完了!
▲PVE在128GB記憶體容量情況,長時間執行下來,記憶體負載比較輕鬆! (同時執行3個VM)
▲PVE在128GB記憶體容量情況,同時執行3組VM下,RAM空間還很餘裕!
以下的測試方法跟上述 ESXi一樣,也是安裝好Win 10、Win 11、WinSrv 2016 (於Local Storage),與額外安裝一個Win10 iSCSI的VM (存放於iSCSI Storage),每個VM都有安裝Virtio-Win驅動程式。測試時也是分成(D)同時執行前3組VM,與(E)只執行一個iSCSI上的VM,來看看PVE在32GB系統記憶體的情況,以及擴充到128GB之後的效能加速狀況。
(D) PVE同時執行3組VM的壓力測試
▼表5: Proxmox VE 7同時執行3個Windows VM時,同時測試AIDA與CrystalDiskMark的個別效能與平均效能 (系統記憶體: 32GB)
▼表6: Proxmox VE 7同時執行3個Windows VM時,同時測試AIDA與CrystalDiskMark的個別效能與平均效能 (系統記憶體: 128GB)
▼表7: Proxmox VE效能總比較:以32GB的測試成績為1,與128GB記憶體的效能提升比例
(E) ESXi以iSCSI LUN執行1組VM的效能測試
▼表8: Proxmox VE 7執行1個儲存於iSCSI LUN的Windows VM,分別執行AIDA與CrystalDiskMark的效能與效能比 (系統記憶體: 32GB、128GB,與兩者效能對比)
Proxmox VE效能分析與小結
從上面的表5至表8來分析,其中表5和表6分別是32GB和128GB下同時執行3個Windows VM的Memory與Disk效能後,取平均值。至於表7,則是上述兩種狀況 (32GB、128GB)下的效能互比,以32GB的測試成績為基準1分,128GB的表現部份只要0.95分以上的,就視為是測試誤差,以綠色字標示,依此類推,除非效能差距太多,才以紅色字標示。
讀者可以看到表7中,128GB的分數幾乎都比32GB還要高很多,尤其記憶體效能快得非常明顯,而磁碟讀寫速度也有提升。至於iSCSI的網路磁碟測試部份,則是在表8可發現到,128GB比32GB的效能提升幅度都很多。
以上足以證明,「擴充記憶體」或是「開啟記憶體快取」,都能有效提升PVE的記憶體或磁碟存取整體效能。
PART 4: OSSLab各式記憶體解決方案
綜合上述測試結果,可以得知以下結論:
> 32GB很緊繃 (多跑幾個VM 就效能下降!)
> 64GB比較足夠 (調度應該還OK!)
> 128GB比較寬裕 (資源調度上會具備很大彈性!)
因此,在VMware ESXi或是Proxmox VE環境下,只要將記憶體從32GB提升到128GB (或更多),就能顯著提升虛擬機下的記憶體與磁碟存取效能。而VMware ESXi搭配VirtuCache這類第三方軟體,還是會有效能上的提升。因此,只要記憶體充足,VM Hypervisor在調度各VM的資源時也比較餘裕,讓多台同時執行中的VM能夠更順暢,增加整體營運戰鬥力。
那麼要擴充記憶體,伺服器記憶體是否可以混搭呢? 歡迎參考「如何正確挑選伺服器記憶體達到最佳效能,不同時脈、容量、廠牌可混插嗎?」文章,來獲取更多答案。
若想要購買高C/P值的伺服器記憶體,也可以移駕到 https://osslab.tv 來參觀我們的賣場,或洽詢我們! 若買回去的記憶體跟您的機器無法相容,OSSLab也提供包退服務,歡迎參觀選購喔!
以上祝 各位 伺服器乖乖聽話,跑得順順!