杜雅紅,張 棟,黃 鑫
(中鐵信弘遠(北京)軟件科技有限責任公司,北京100089)
在計算機技術中,虛擬化技術可以幫助有效地管理計算機中的各種實體資源[1-2],比如:CPU、內存、網絡和存儲等,它通過將計算機資源抽象出來并實現轉換,讓資源可以有效地動態分配和跨域共享,突破了實體資源不可拆分以及受地域限制的這一技術難點,讓用戶可以更加靈活、有效地使用這些資源[3-4]。虛擬化資源通常是指擁有計算能力和存儲能力的資源[5]。
很多企業或者組織在是生產環境中使用虛擬化之前,都會對虛擬化技術的性能損耗進行測試,以確保虛擬化技術可以滿足生產需要,但是,由于基礎硬件及應用系統的不同,虛擬化的性能測試結果也不盡相同。鑒于此,本文進行了基于鐵路標準硬件設施的虛擬化性能測試,為應用系統選擇物理機或者虛擬化技術提供參考。
VMwarevSphere是一款商用的服務器虛擬化平臺,組件包括vCenter Server、ESXi、vSphereWeb Client、vSphereClient 和vSphereHost Client。虛擬機的管理程序ESXi是vSphere所有產品套件的核心,是其他產品所依賴的基礎。vCenter 可以集中管理VmwarevSphere環境,從而提高管理員對虛擬環境的控制[6]。
VMware 的系統架構,如圖1所示。

圖1 VMware系統架構
VMwarevSphere 主要組件及功能如下:
(1)VMwarevCenterServer:配置及管理虛擬化IT 環境的中樞節點。
(2)VMwarevSphereClient:用戶可以使用此Client 從WindowsPC連接到vCenter server 或者
ESXi。
(3)VMwarevSphereWebAccess:用戶可以通過此Web界面對虛擬機進行管理、對遠程控制臺進行訪問。
(4)VMware虛擬機文件系統(VMFS):ESXi虛擬機使用的高性能集群文件系統。
(5)VMwareVirtual SMP:允許單一的虛擬機同時使用多個物理處理器。
(6)VMwarevMotion和StoragevMotion:VMwarevMotion 可以將運行態的虛擬機從一個主機動態遷移到另一個主機,且遷移期間虛擬機不需要關機,業務不受影響。
(7)VMwareHighAvailability(HA):可為虛擬機提供高可用性的功能。如果服務器出現故障,會在其他空閑主機上重新啟動故障主機上的虛擬機。
(8)VMwareDistributedResourceScheduler(DRS):通過收集硬件資源,實現虛擬機的動態分配,同時平衡計算容量。
(9)VMwarevSphereSDK:用戶可以通過調用此接口來訪問VMwarevShpere的功能。
(10)VMware容錯:為虛擬機啟動容錯后,會為此虛擬機創建副本虛擬機。主虛擬機上的所有操作都會同步到副本虛擬機上。如果主虛擬機出現故障,則副本虛擬機將成為主活動虛擬機,保證業務連續可用性。
(11)vNetwork分布式交換機(vDS):實現了分布式的虛擬交換機功能,使得虛擬交換機可以跨多個ESXi主機,簡化網絡運維工作量,并提高網絡容量。同時,虛擬機在跨主機遷移時,保證網絡配置不變。
基于內核的虛擬機(KVM,Kernel-basedVirtual Machine)是一個Linux 的內核模塊,支持X86(32 bit 和64bit)、s390、Powerpc等CPU。KVM 的虛擬化需要硬件支持(如IntelVT 技術或者AMD 技術),是基于硬件的完全虛擬化[7-8]。
在KVM中,虛擬機被實現為普通的Linux進程,由標準的Linux 調度程序進行調度。但是,KVM 本身不執行任何硬件模擬,需要QEMU 提供硬件I/O虛擬化。
KVM系統架構,如圖2所示。
KVM支持的功能包括:
(1)支持CPU 和內存超分(Overcommit)。
(2)支持半虛擬化I/O(virtio)。
(3)支持熱插拔(CPU、塊設備、網絡設備等)。
(4)支持對稱多處理(SMP,SymmetricMulti-Processing)。
(5)支持實時遷移(LiveMigration)。
(6)支持PCI 設備直接分配和單根I/O 虛擬化(SR-IOV)。

圖2 KVM系統架構
(7)支持內核同頁合并(KSM)。
(8)支持非一致存儲訪問結構(NUMA,Non-Uniform Memory Access)。
測試環境說明,如表1所示。

表1 測試環境說明
使用sysbench 測試框架,運行尋找質數的程序,指定上限值,尋找該值范圍內的質數。上限分別取10000和100000000。上限是10000時,對比單位時間內(1s)程序的執行次數。上限是100000000 時,對比程序的運行時間。測試結果,如圖3、圖4 所示。
通過測試結果可以看出,不論是單位時間內程序的運行次數還是限定上限時程序的運行時間,物理機和兩個虛擬機的表現都不相上下。也就是說兩種虛擬化對于單進程的程序在CPU性能方面與物理機幾乎沒有差別。
RAMspeed 是一個用來測試計算機系統緩存和內存性能的開源的命令行工具。使用RAMspeed 分別對3類主機進行不同塊大小的整型和浮點型內存讀

圖3 上限是10000的測試結果

圖4 上限是100000000的測試結果
寫測試,結果如圖5~圖8。

圖5 整型寫內存測試

圖6 整型讀內存測試

圖7 浮點型寫內存測試

圖8 浮點型讀內存測試
由圖5~圖8可知,在數據塊小于64 KB時,VMware對于內存的讀寫速度要明顯高于KVM 和物理機;當數據塊大于64KB時,兩種虛擬化和物理機的表現相差不大。所以對那些需要頻繁讀寫內存里的小塊數據的應用,VMware 可以提供更高的性能。
使用fio進行測試,fio是一個非常靈活的I/O測試工具,用來對硬件進行壓力測試和驗證,它可以通過多線程或進程模擬各種I/O操作,支持13種不同的I/O引擎。本次測試分別對硬盤驅動器(HDD)和固態驅動器(SSD)做了壓力測試,測試結果如圖9~圖12所示。
通過以上測試結果可以看出,兩種虛擬化在HDD盤的隨機讀時會有10%的性能損耗,其他情況下,可以提供和物理機同樣的性能。

圖9 HDD盤4KB隨機讀寫測試結果(隊列深度32)

圖10 HDD盤512KB順序讀寫測試結果(隊列深度32)

圖11 SSD盤4KB隨機讀寫測試結果(隊列深度32)

圖12 SSD盤512KB順序讀寫測試結果(隊列深度32)
使用iperf 進行測試,iperf 是一個網絡性能測試工具,用來測試最大傳輸控制協議(TCP)和用戶數據報協議(UDP)帶寬性能。iperf 支持傳入多種參數,還支持UDP 特性,可以根據需要調整。同時,iperf 還可以測試帶寬,延遲抖動和數據包丟失。3種類型主機分別作為客戶端與服務器端,進行TCP 和UDP 帶寬測試。其中,UDP 測試指定單線程帶寬為1Gbps,用10個線程同時發送數據占滿帶寬[9-10]。測試結果如圖13~圖14所示。

圖13 TCP測試結果

圖14 UDP測試結果
通過以上測試結果可以看出,VMware虛擬機作為TCP 客戶端時,能提供的帶寬會比物理機和KVM 虛擬機少10%左右;而作為UDP 服務器端時,KVM虛擬機提供的總帶寬都要比物理機低60%,VMware虛擬機比物理機低10%左右;作為UDP 客戶端時,KVM虛擬機提供的總帶寬要比物理機低20%左右。所以如果應用系統以UDP 業務為主,選擇物理機或者VMware 虛擬機可以獲得比KVM 虛擬機更高的帶寬。
本文分別就CPU、內存、磁盤I/O,以及網絡帶寬對物理機、KVM虛擬機和VMware虛擬機進行了對比測試。通過測試發現,兩種虛擬化和物理機在CPU 性能方面并沒有很大差異;在內存方面,頻繁讀寫內存里的小塊數據時,VMware 的表現更加突出;在磁盤I/O方面,兩種虛擬化在HDD的隨機讀寫上表現稍差;在網絡帶寬方面,如果應用系統以UDP業務為主,KVM虛擬機提供的帶寬相對較小。
本文每項測試都是針對單項指標的測試,應用系統的運行經常需要同時使用這幾項指標,所以應用系統在選擇運行載體時需要綜合考慮這幾項指標的影響,根據應用特點選擇合適的運行載體。當然,為了保證應用系統的穩定性,建議在不影響性能的情況下,使用多種運行載體。