VM性能的快速測試方法
核心提示: 經常有同行問怎么樣去做這些性能評測。其實這些性能評測都很簡單,任何一個具備Linux基礎知識的工程師都可以完成。我們通常使用UnixBench來評估虛擬機CPU性能,mbw來評估內存性能,iozone來評估文件IO性能,iperf來評估網絡性能,pgbench來評估數據庫性能。在這里我將我自己做性能測試的過程整理一下,供各位同行參考。
中國IDC圈10月30日報道 前段時間陸續發布了一些對公有云服務性能評測的數據。經常有同行問怎么樣去做這些性能評測。其實這些性能評測都很簡單,任何一個具備Linux基礎知識的工程師都可以完成。我們通常使用UnixBench來評估虛擬機CPU性能,mbw來評估內存性能,iozone來評估文件IO性能,iperf來評估網絡性能,pgbench來評估數據庫性能。在這里我將我自己做性能測試的過程整理一下,供各位同行參考。
(0)安裝必要的軟件
假定VM的操作系統是Ubuntu,可以按照如下步驟安裝必要的軟件:
(1)CPU性能測試
我們使用UnixBench來進行CPU性能測試。UnixBench是一套具有悠久歷史的性能測試工具,其測試結果反映的是一臺主機的綜合性能。從理論上來說UnixBench測試結果與被測試主機的CPU、內存、存儲、操作系統都有直接的關系。但是根據我們的觀察,對于現代的計算機系統來說,UnixBench測試結果受CPU 處理能力的影響更大一些。因此,在這里我們用UnixBench測試結果來代表虛擬機的vCPU 處理能力。每個UnixBench測試結果包括兩個數據,一個是單線程測試結果,另一個是多線程測試結果(虛擬機上有幾顆虛擬CPU,就有幾個并發的測試線程)。
cd ~/UnixBench
./Run
下面是一個可供參考的測試結果。在這個測試中使用了兩臺物理機,每臺物理機各配置一顆Intel Core i3 540 @ 3.07 GHz (雙核四線程),16 GB內存(DDR3 @ 1333 MHz),一塊Seagate ST2000DL003-9VT1硬盤(SATA,2TB,5900RPM),運行Ubuntu 10.04 AMD64 Server操作系統,使用的文件系統為ext4,使用的Hypervisor為KVM(qemu-kvm-0.12.3)。我們分別測試了宿主機、磁盤映像以文件格式(RAW格式,沒有啟用virtio)存儲在本地磁盤上的虛擬機、磁盤映像以文件格式(RAW格式,沒有啟用virtio)存儲在NFS上的虛擬機的CPU性能。虛擬機的配置為2 顆vCPU(占用兩個物理線程,也就是一個物理核心)和4 GB內存,運行Ubuntu 12.04 AMD64 Server操作系統。在這個測試中沒有對操作系統、文件系統、NFS、KVM等等進行任何性能調優。
從如上測試結果可以看出,在沒有進行任何性能調優的情況下,在單線程CPU性能方面,宿主機 >> 本地磁盤上的虛擬機 >> NFS服務上的虛擬機;在多線程CPU性能方面,宿主機 >> 本地磁盤上的虛擬機 = NFS服務上的虛擬機。需要注意的是,在多線程測試結果方面,宿主機所占的優勢完全是由于宿主機比虛擬機多占用了兩個物理線程,也就是一個物理核心。可以認為,在如上所述測試中,物理機和虛擬機的CPU性能基本上是一致的,虛擬化基本上沒有導致CPU性能損失。
(2)文件IO性能測試
我們使用iozone來進行文件IO性能測試。iozone性能測試結果表示的是文件IO的吞吐量(KBps),但是通過吞吐量可以估算出IOPS.在如下命令中,我們評估的是以256K為數據塊大小對文件進行寫、重寫、讀、重讀、隨機讀、隨機寫性能測試,在測試過程當中使用/io.tmp作為臨時測試文件,該測試文件的大小是4 GB.需要注意的是,命令中所指定的測試文件是帶路徑的,因此我們可以測試同一虛擬機上不同文件系統的性能。例如我們通過NFS將某一網絡共享文件系統掛載到虛擬機的/mnt目錄,那么我們可以將該測試文件的路徑設定為/mnt/io.tmp.
cd ~/iozone3_414/src/current
./iozone -Mcew -i0 -i1 -i2 -s4g -r256k -f /io.tmp
下面是一個可供參考的測試結果。在這個測試中使用了兩臺物理機,每臺物理機各配置一顆Intel Core i3 540 @ 3.07 GHz (雙核四線程),16 GB內存(DDR3 @ 1333 MHz),一塊Seagate ST2000DL003-9VT1硬盤(SATA,2TB,5900RPM),運行Ubuntu 10.04 AMD64 Server操作系統,使用的文件系統為ext4,使用的Hypervisor為KVM(qemu-kvm-0.12.3)。我們分別測試了宿主機、NFS、磁盤映像以文件格式(RAW格式,沒有啟用virtio)存儲在本地磁盤上的虛擬機、磁盤映像以文件格式(RAW格式,沒有啟用virtio)存儲在NFS上的虛擬機、以及從虛擬機內部掛載宿主機NFS服務(虛擬網卡啟用了virtio)的磁盤IO性能。虛擬機的配置為2 顆vCPU(占用兩個物理線程,也就是一個物理核心)和4 GB內存,運行Ubuntu 12.04 AMD64 Server操作系統。在這個測試中沒有對操作系統、文件系統、NFS、KVM等等進行任何性能調優。
從如上測試結果可以看出,在如上所述特定測試場景中,在文件IO性能方面,宿主機 > NFS > 虛擬機中的NFS > 本地磁盤上的虛擬機 >NFS服務上的虛擬機。值得注意的是,即使是從虛擬機中掛載NFS服務,其文件IO性能也遠遠超過本地磁盤上的虛擬機。
[特別說明]需要注意的是,當我們說文件(或者磁盤)IO性能的時候,我們指的通常是應用程序(例如iozone)進行文件讀寫操作時所看到的IO性能。這個性能通常是與系統相關的,包括了多級緩存(磁盤自身的緩存機制、操作系統的緩存機制)的影響,而不僅僅是磁盤本身。利用iozone進行文件IO性能測試時,測試結果與主機的內存大小、測試數據塊的大小、測試文件的大小都有很大的關系。如果要全面地描述一個特定系統(CPU、內存、硬盤)的文件IO性能,往往需要對測試數據塊的大小和測試文件的大小進行調整,進行一系列類似的測試并對測試結果進行全面分析。本文所提供的僅僅是一個快速測試方法,所提供的測試參數并沒有針對任何特定系統進行優化,僅僅是為了說明iozone這個工具的使用方法。如上所述之測試數據,僅僅在如上所述之測試場景下是有效的,并不足以定性地說明任何虛擬化場景下宿主機和虛擬機的文件IO性能差異。建議讀者在掌握了iozone這個工具的使用方法的基礎上,對被測試對象進行更加全面的測試。(感謝saphires網友的修改建議。)
(3)內存性能測試
我們使用mbw來測試虛擬機的內存性能。mbw通常用來評估用戶層應用程序進行內存拷貝操作所能夠達到的帶寬(MBps)。
mbw 128
下面是一個可供參考的測試結果。在這個測試中使用了兩臺物理機,每臺物理機各配置一顆Intel Core i3 540 @ 3.07 GHz (雙核四線程),16 GB內存(DDR3 @ 1333 MHz),一塊Seagate ST2000DL003-9VT1硬盤(SATA,2TB,5900RPM),運行Ubuntu 10.04 AMD64 Server操作系統,使用的文件系統為ext4,使用的Hypervisor為KVM(qemu-kvm-0.12.3),虛擬機運行Ubuntu 12.04 AMD64 Server操作系統。我們分別測試了宿主機、磁盤映像以文件格式(RAW格式,沒有啟用virtio)存儲在本地磁盤上的虛擬機、磁盤映像以文件格式(RAW格式,沒有啟用virtio)存儲在NFS上的虛擬機的內存性能。虛擬機的配置為2 顆vCPU(占用兩個物理線程,也就是一個物理核心)和4 GB內存。在這個測試中沒有對操作系統、文件系統、NFS、KVM等等進行任何性能調優。
從如上測試結果可以看出,在沒有進行任何性能調優的情況下,宿主機、本地磁盤上的虛擬機、NFS服務上的虛擬機在內存性能方面基本上是一致的,虛擬化基本上沒有導致內存性能損失。
(4)網絡帶寬測試
我們使用iperf來測試虛擬機之間的網絡帶寬(Mbps)。測試方法是在一臺虛擬機上運行iperf服務端,另外一臺虛擬機上運行iperf客戶端。假設運行服務端的虛擬機的IP地址是192.168.1.1,運行客戶端的虛擬機的IP地址是192.168.1.2.
在服務端執行如下命令:
iperf -s
在客戶端執行如下命令:
iperf -c 192.168.1.1
測試完成后,在客戶端會顯示兩臺虛擬機之間的網絡帶寬。
下面是一個可供參考的測試結果。在這個測試中使用了兩臺物理機,每臺物理機各配置一顆Intel Core i3 540 @ 3.07 GHz (雙核四線程),16 GB內存(DDR3 @ 1333 MHz),一塊Seagate ST2000DL003-9VT1硬盤(SATA,2TB,5900RPM),運行Ubuntu 10.04 AMD64 Server操作系統,使用的文件系統為ext4,使用的Hypervisor為KVM(qemu-kvm-0.12.3)。我們分別測試了宿主機之間、宿主機與虛擬機之間、虛擬機與虛擬機之間的內網帶寬。虛擬機的配置為2 顆vCPU(占用兩個物理線程,也就是一個物理核心)和4 GB內存。虛擬機的配置為2 顆vCPU(占用兩個物理線程,也就是一個物理核心)和4 GB內存,運行Ubuntu 12.04 AMD64 Server操作系統。在這個測試中沒有對操作系統、文件系統、NFS、KVM等等進行任何性能調優,但是虛擬機的網卡啟用了virtio.
從如上測試結果可以看出,宿主機之間的內網帶寬接近內網交換
機的極限。在啟用了virtio的情況下,宿主機與虛擬機之間內網帶寬有小幅度的性能損失,基本上不會影響數據傳輸能力;虛擬機與虛擬機之間的內網帶寬有接近15%的損失,對數據傳輸能力影響也不是很大。
(5)數據庫性能測試
postgresql是一個著名的開源數據庫系統。在MySQL被Sun 公司收購并進一步被Oracle公司收購之后,越來越多的公司正在從MySQL遷移到postgresql.pgbench是一個針對postgresql的性能測試工具,其測試結果接近于TPC-B.pgbench的優點之一在于它能夠輕易地進行多線程測試,從而充分利用多核處理器的處理能力。
在虛擬機上以postgres用戶登錄:
su -l postgres
將/usr/lib/postgresql/9.1/bin加入到路徑PATH當中。
創建測試數據庫:
createdb pgbench
初始化測試數據庫:
pgbench -i -s 16 pgbench
執行單線程測試:
pgbench -t 2000 -c 16 -U postgres pgbench
執行多線程測試,在下面的命令中將N替換為虛擬機的vCPU數量:
pgbench -t 2000 -c 16 -j N -U postgres pgbench
下面是一個可供參考的測試結果。在這個測試中使用了兩臺物理機,每臺物理機各配置一顆Intel Core i3 540 @ 3.07 GHz (雙核四線程),16 GB內存(DDR3 @ 1333 MHz),一塊Seagate ST2000DL003-9VT1硬盤(SATA,2TB,5900RPM),運行Ubuntu 10.04 AMD64 Server操作系統,使用的文件系統為ext4,使用的Hypervisor為KVM(qemu-kvm-0.12.3),虛擬機運行Ubuntu 12.04 AMD64 Server操作系統。我們分別測試了宿主機、磁盤映像以文件格式(RAW格式,沒有啟用virtio)存儲在本地磁盤上的虛擬機、磁盤映像以文件格式(RAW格式,沒有啟用virtio)存儲在NFS上的虛擬機的數據庫性能。虛擬機的配置為2 顆vCPU(占用兩個物理線程,也就是一個物理核心)和4 GB內存,運行Ubuntu 12.04 AMD64 Server操作系統。在這個測試中沒有對操作系統、文件系統、NFS、KVM等等進行任何性能調優。
從如上測試結果可以看出,在沒有進行任何性能調優的情況下,在數據庫性能方面,宿主機 >> 本地磁盤上的虛擬機 >> NFS服務上的虛擬機。