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