在VMware中對(duì)SUSE Linux的性能優(yōu)化手冊(cè)
由于現(xiàn)在VMware向購(gòu)買(mǎi)Vsphere的客戶(hù)免費(fèi)提供SUSE Linux Enterprise Server(SLES),所以許多公司針對(duì)他們的Linux需求都部署了SUSE Linux。然而正如本文所描述的一樣,即使你已經(jīng)安裝了專(zhuān)門(mén)針對(duì)VMware環(huán)境使用而開(kāi)發(fā)的SUSE內(nèi)核,你仍然可以通過(guò)進(jìn)一步的性能優(yōu)化來(lái)獲得意想不到的收獲。
對(duì)VMware環(huán)境中的SUSE進(jìn)行性能優(yōu)化需要兩步:***步,你必須對(duì)VMware環(huán)境進(jìn)行優(yōu)化。第二步,對(duì)虛擬主機(jī)的優(yōu)化完成后,你還可以使用其它技術(shù)對(duì)虛擬機(jī)進(jìn)行優(yōu)化。
評(píng)估性能優(yōu)化
有很多先進(jìn)技術(shù)可用來(lái)評(píng)估性能優(yōu)化的效果。其中一個(gè)是Bonnie腳本,它是一套shell腳本,它用不同的方法測(cè)試讀寫(xiě)性能。如果你真想看到性能優(yōu)化結(jié)果的詳細(xì)信息,使用Bonnie腳本是一個(gè)不錯(cuò)的主意。但如果你只是想了解虛擬機(jī)的基本狀況,你可以使用更簡(jiǎn)單的方法讓你一目了然。
你可以在Linux shell環(huán)境下使用下面的命令來(lái)獲得當(dāng)前系統(tǒng)性能的基本狀況:
time dd if=/dev/zero of=/1gfile bs=1M count=1024
使用此命令,你將可以在指定的位置創(chuàng)建一個(gè)1 GB的文件。例如,你可以把它放在根文件系統(tǒng)來(lái)測(cè)試根文件系統(tǒng)的性能, 或者把它放在一個(gè)掛載的SAN分區(qū)中來(lái)測(cè)量SAN設(shè)備的性能。這個(gè)命令的輸出如下所示:
root@lassen:/# time dd if=/dev/zero of=/1gfile bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 8.86777 s, 121 MB/s real 0m8.931s user 0m0.000s sys 0m1.890s
過(guò)去,你可以看到內(nèi)核在處理此命令時(shí)真正花費(fèi)的時(shí)間。找到“real 0m8.931s” 這一行,你可以看到你的計(jì)算機(jī)完成這項(xiàng)任務(wù)耗費(fèi)的時(shí)間。這個(gè)時(shí)間指的是這項(xiàng)任務(wù)從開(kāi)始到結(jié)束花費(fèi)的時(shí)間。在此期間,調(diào)度器也在其它任務(wù)之間進(jìn)行切換。所以如果你的服務(wù)器在多個(gè)任務(wù)的作用下處于非常繁忙的狀態(tài)時(shí),這個(gè)參數(shù)便不能給出一個(gè)非常準(zhǔn)確的讀數(shù)。但是,如果你的計(jì)算機(jī)沒(méi)有運(yùn)行任何重要的進(jìn)程,它便可以給你提供一個(gè)不錯(cuò)的指導(dǎo)。這種情況可以用下面的公式來(lái)表示:
real – sys = overhead(實(shí)際-系統(tǒng)=開(kāi)銷(xiāo))
在任何時(shí)候系統(tǒng)都會(huì)有一些開(kāi)銷(xiāo),上面顯示的數(shù)字實(shí)際上是相當(dāng)不錯(cuò)。但是,顯示的這兩個(gè)數(shù)字也往往有巨大的差異,在VMware中虛擬SUSE Linux時(shí)往往就是這樣。舉例來(lái)說(shuō),寫(xiě)1GB的文件,實(shí)際時(shí)間有可能超過(guò)一分鐘,但系統(tǒng)的時(shí)間卻仍是兩秒鐘!
優(yōu)化VMware
為發(fā)揮SUSE Linux的***性能而對(duì)VMware的優(yōu)化其實(shí)很簡(jiǎn)單。默認(rèn)情況下,VMware為虛擬磁盤(pán)設(shè)備安裝的是LSI Logic控制器。這個(gè)控制器可以捕獲并模擬所有由虛擬機(jī)生成的數(shù)據(jù)并對(duì)它們進(jìn)行處理,為了處理這些數(shù)據(jù),控制器需要做很多的工作。如果要解決這個(gè)問(wèn)題,您應(yīng)該將LSI Logic控制器替換為VMware半虛擬化磁盤(pán)設(shè)備。由于VMware 半虛擬化磁盤(pán)驅(qū)動(dòng)器專(zhuān)門(mén)針對(duì)在VMware中的SUSE 內(nèi)核進(jìn)行過(guò)優(yōu)化,你會(huì)發(fā)現(xiàn)當(dāng)采用了這種驅(qū)動(dòng)器,性能將會(huì)有巨大的提升。但也不要忘記在虛擬機(jī)中安裝VMware工具。所有這些都是為了在虛擬機(jī)中使用***的驅(qū)動(dòng)器,以便你可以在VMware這一端獲得***的性能。
優(yōu)化SUSE
對(duì)于SUSE Linux來(lái)說(shuō)也有一些優(yōu)化建議。其中***個(gè)就是I/O調(diào)度器的行為設(shè)置, 它對(duì)于Linux操作系統(tǒng)來(lái)說(shuō)就是如何讓磁盤(pán)控制器進(jìn)行工作。共有四種設(shè)置方式:
CFQ:始終公平排隊(duì)。這意味著,控制器使用***的平均設(shè)置,這在一個(gè)讀寫(xiě)請(qǐng)求或多或少算均衡以及不同進(jìn)程之間帶寬平均分配的系統(tǒng)中效果非常好。
Anticipatory:采用這個(gè)參數(shù),I/O調(diào)度器將試著猜測(cè)下一次的讀請(qǐng)求,也就意味著它會(huì)預(yù)讀一些數(shù)據(jù)塊。這意味著一部分內(nèi)存緩沖區(qū)會(huì)被用來(lái)進(jìn)行讀取優(yōu)化。這對(duì)于讀取密集型環(huán)境非常有利,但是處理寫(xiě)請(qǐng)求就會(huì)變得很糟糕。 在最近的一些內(nèi)核版本中(2.6.33和更高版本),更推薦使用CFQ。
Deadline:在這個(gè)設(shè)定中,I/O調(diào)度器在將數(shù)據(jù)從緩沖區(qū)真正寫(xiě)入到磁盤(pán)之前會(huì)等待盡可能長(zhǎng)的時(shí)間以確保找到***需要寫(xiě)入的請(qǐng)求。使用此設(shè)置,調(diào)度器會(huì)盡可能的對(duì)I/O進(jìn)行實(shí)時(shí)調(diào)度,這種方式是數(shù)據(jù)庫(kù)環(huán)境的理想選擇。
Noop:因?yàn)楹芏喱F(xiàn)代的磁盤(pán)控制器,RAID控制器或SAN設(shè)備都已經(jīng)對(duì)磁盤(pán)的讀/寫(xiě)優(yōu)化過(guò)了,所以不做任何基于Linux層面的I/O優(yōu)化也很有意義。你至少可以嘗試一下這個(gè)選項(xiàng),以了解您的存儲(chǔ)控制器對(duì)I/O的優(yōu)化程度。
I/O調(diào)度器的設(shè)置會(huì)寫(xiě)入到系統(tǒng)的一個(gè)文件中。 在目錄/sys/block中,你會(huì)發(fā)現(xiàn)服務(wù)器上的每一個(gè)存儲(chǔ)設(shè)備都對(duì)應(yīng)著一個(gè)子目錄,在該目錄下,有文件queue/scheduler。使用cat命令可以查看其當(dāng)前設(shè)置:
root@lassen:/# cat /sys/block/sda/queue/scheduler noop anticipatory deadline [cfq]
正如你看到的,I/O調(diào)度器的當(dāng)前設(shè)置是CFQ。當(dāng)然如果你找到了其它更好的設(shè)置參數(shù),只要執(zhí)行echo命令將新的參數(shù)寫(xiě)入配置文件即可。
echo deadline > /sys/block/sda/queue/scheduler
接下來(lái),你可以測(cè)試其它參數(shù)對(duì)性能的影響。***的做法是把所有四個(gè)參數(shù)都測(cè)試一遍并找出最適合你的服務(wù)器負(fù)載類(lèi)型的那一個(gè)。然后,你就可以將它設(shè)為啟動(dòng)加載。例如,使用echo命令將配置寫(xiě)入文件/etc/init.d /boot.local中,這樣就保證了每次重新啟動(dòng)服務(wù)器時(shí)這個(gè)設(shè)置也同時(shí)生效。
優(yōu)化日志
在文件系統(tǒng)中,日志的設(shè)置對(duì)于性能優(yōu)化也很有用。所有當(dāng)今的Linux文件系統(tǒng)都使用日志的方式以便在服務(wù)器崩潰后使恢復(fù)數(shù)據(jù)更加容易。日志的基本概念是:在寫(xiě)一個(gè)文件時(shí),日志將這個(gè)事務(wù)記錄下來(lái),如果操作失敗,它可以很容易地回滾到寫(xiě)入前的狀態(tài)。但是如果你的服務(wù)器是寫(xiě)密集型應(yīng)用,默認(rèn)的日志設(shè)置可能會(huì)對(duì)寫(xiě)性能產(chǎn)生負(fù)面影響。相反,如果你的服務(wù)器是讀密集型應(yīng)用,你大可不必關(guān)心日志的設(shè)置,因?yàn)槿罩静魂P(guān)心讀事務(wù)。
在寫(xiě)負(fù)荷很重的服務(wù)器上,通過(guò)修改文件fstab來(lái)掛載文件系統(tǒng)時(shí),你可以使用參數(shù)data=journal。使用此參數(shù)可以給予文件系統(tǒng)一定程度的保護(hù),但它是輕量級(jí)的,這樣可以確保寫(xiě)入文件時(shí)損失盡可能少的時(shí)間。下面幾行顯示的內(nèi)容就類(lèi)似于文件/etc / fstab中的設(shè)置:
/dev/sdg1 / ext3 user_xattr,data=writeback 1 1
應(yīng)用此更改后,重啟服務(wù)器讓更改生效。
在這里,我們已經(jīng)討論了如何在VMware服務(wù)器上優(yōu)化SUSE Linux Enterprise Server的性能。使用本文所討論的相關(guān)參數(shù)可以?xún)?yōu)化存儲(chǔ)通道,從而讓你的虛擬機(jī)運(yùn)行速度更快。
【編輯推薦】