所有的文件系統(tǒng)隨著時(shí)間的推移都趨向于碎片化。linux文件系統(tǒng)減少了碎片化,但是并沒(méi)有消除。由于它不經(jīng)常出現(xiàn),所以對(duì)于一個(gè)單用戶(hù)的工作站來(lái)說(shuō),可能根本不是問(wèn)題。然而在繁忙的服務(wù)器中,隨著時(shí)間的過(guò)去,文件碎片化將降低硬盤(pán)性能,硬盤(pán)性能只有從硬盤(pán)讀出或?qū)懭霐?shù)據(jù)時(shí)才能注意到。下面是優(yōu)化linux系統(tǒng)硬盤(pán)性能的一些具體措施。一、清理磁盤(pán) 這種方法看上去很簡(jiǎn)單:清理磁盤(pán)驅(qū)動(dòng)器,刪除不需要的文件,清除所有需要被保存但將不被使用的文件。如果可能的話(huà),清除多余的目錄,并減少子目錄的數(shù)目。這些建議似乎顯而易見(jiàn),但是你會(huì)驚訝地發(fā)現(xiàn),每個(gè)磁盤(pán)上確實(shí)積累了非常多的垃圾。釋放磁盤(pán)空間可以幫助系統(tǒng)更好地工作。二、整理磁盤(pán)碎片 linux系統(tǒng)上的磁盤(pán)碎片整理程序與windows 98或windows nt系統(tǒng)中的磁盤(pán)碎片整理程序不同。windows 98引入fat 32文件系統(tǒng),雖然運(yùn)行windows 98不必轉(zhuǎn)換為fat 32文件系統(tǒng)。windows可以被設(shè)置為使用fat或一個(gè)叫ntfs的增強(qiáng)文件系統(tǒng)。所有這些文件系統(tǒng)以本質(zhì)上相同的方式處理文件存儲(chǔ)。 linux最好的整理磁盤(pán)碎片的方法是做一個(gè)完全的備份,重新格式化分區(qū),然后從備份恢復(fù)文件。當(dāng)文件被存儲(chǔ)時(shí),它們將被寫(xiě)到連續(xù)的塊中,它們不會(huì)碎片化。這是一個(gè)大工作,可能對(duì)于像/usr之類(lèi)不經(jīng)常改變的程序分區(qū)是不必要的,但是它可以在一個(gè)多用戶(hù)系統(tǒng)的/home分區(qū)產(chǎn)生奇跡。它所花費(fèi)的時(shí)間與windows nt服務(wù)器磁盤(pán)碎片整理花費(fèi)的時(shí)間大致上相同。 如果硬盤(pán)性能仍不令人滿(mǎn)意,還有許多其它的步驟可以考慮,但是任何包含升級(jí)或購(gòu)買(mǎi)新設(shè)備的硬件解決方案可能會(huì)是昂貴的。三、從ide升級(jí)到scsi 如果你的硬盤(pán)是一個(gè)ide驅(qū)動(dòng)器,可以通過(guò)升級(jí)到scsi驅(qū)動(dòng)器獲得更好的整體性能。因?yàn)閕de控制器必須訪問(wèn)cpu,cpu和磁盤(pán)密集型操作可能變得非常緩慢。scsi控制器不用通過(guò)cpu處理讀寫(xiě)。當(dāng)ide驅(qū)動(dòng)器在讀或?qū)憰r(shí),用戶(hù)可能會(huì)因?yàn)閏pu周期被ide驅(qū)動(dòng)器占用而抱怨系統(tǒng)的緩慢。 獲取更快的控制器和磁盤(pán)驅(qū)動(dòng)器 標(biāo)準(zhǔn)的scsi控制器不能比標(biāo)準(zhǔn)的ide控制器更快地讀寫(xiě)數(shù)據(jù),但是一些非常快的“ultrawide”scsi控制器能夠使讀寫(xiě)速度有一個(gè)真正的飛躍。 eide和udma控制器是非常快的ide控制器。新的udma控制器能夠接近scsi控制器的速度。udma控制器的頂級(jí)速度是猝發(fā)速度,但持續(xù)傳輸?shù)乃俣让黠@慢得多。ide控制器包括udma,是嵌入在驅(qū)動(dòng)器本身中的。不需要購(gòu)買(mǎi)一個(gè)控制器,只要購(gòu)買(mǎi)一個(gè)驅(qū)動(dòng)器,它就包含了控制器,可以獲得 udma性能。 磁盤(pán)驅(qū)動(dòng)器經(jīng)常忽視的一個(gè)方面是磁盤(pán)本身的速度。磁盤(pán)的速度以rpm為單位給出,它代表每分鐘旋轉(zhuǎn)多少次。rpm越大,磁盤(pán)速度也越快。如果你有這方面的預(yù)算,大多數(shù)服務(wù)器系統(tǒng)廠商可提供7500rpm甚至10000rpm scsi磁盤(pán)。標(biāo)準(zhǔn)scsi和ide磁盤(pán)提供5400rpm速度。四、使用多個(gè)控制器 ide和scsi磁盤(pán)可以被鏈接。ide鏈最多包括兩個(gè)設(shè)備,標(biāo)準(zhǔn)scsi鏈最多包括七個(gè)設(shè)備。如果在系統(tǒng)中有兩個(gè)或更多scsi磁盤(pán),很可能被鏈接到同一個(gè)控制器。這樣對(duì)大多數(shù)操作是足夠的,尤其是把計(jì)算機(jī)當(dāng)作單用戶(hù)的工作站時(shí)。但是如果有一個(gè)服務(wù)器,那么就能夠通過(guò)對(duì)每個(gè)scsi驅(qū)動(dòng)器提供一個(gè)控制器改善性能。當(dāng)然,好的控制器是昂貴的。五、調(diào)整硬盤(pán)參數(shù) 使用hdparm工具可以調(diào)整ide硬盤(pán)性能,它設(shè)計(jì)時(shí)專(zhuān)門(mén)考慮了使用udma驅(qū)動(dòng)器。在缺省情況下,linux使用是最安全的,但是設(shè)置訪問(wèn)ide驅(qū)動(dòng)器是最慢的。缺省模式?jīng)]有利用udma可能的最快的性能。 使用hdparm工具,通過(guò)激活下面的特性可以顯著地改善性能:◆ 32位支持 缺省設(shè)置是16位;◆ 多部分訪問(wèn) 缺省設(shè)置是每次中斷單部分傳送。 注意:在使用hdparm之前,確保對(duì)系統(tǒng)已經(jīng)做了完全的備份。使用hdparm改變ide參數(shù),如果出錯(cuò)可能會(huì)引起驅(qū)動(dòng)器上全部數(shù)據(jù)的丟失。 hdparm可以提供關(guān)于硬盤(pán)的大量信息。打開(kāi)一個(gè)終端窗口,輸入下面命令獲取系統(tǒng)中第一個(gè)ide驅(qū)動(dòng)器的信息(改變?cè)O(shè)備名獲取其它ide驅(qū)動(dòng)器的信息): hdparm -v /dev/had
上面命令顯示出當(dāng)系統(tǒng)啟動(dòng)時(shí)從驅(qū)動(dòng)器獲得的信息,包括驅(qū)動(dòng)器操作在16位或32位模式(i/o support)下,是否為多部分訪問(wèn)(multcount)。關(guān)于磁盤(pán)驅(qū)動(dòng)器的更詳細(xì)信息的顯示可使用-i參數(shù)。 hdparm也可以測(cè)試驅(qū)動(dòng)器傳輸速率。輸入命令測(cè)試系統(tǒng)中第一個(gè)ide驅(qū)動(dòng)器: hdparm -tt /dev/hda
此測(cè)試可測(cè)量驅(qū)動(dòng)器直接讀和高速緩沖存儲(chǔ)器讀的速度。結(jié)果是一個(gè)優(yōu)化的“最好的事例”數(shù)字。改變驅(qū)動(dòng)器設(shè)置,激活32位傳輸,輸入下面的命令: hdparm -c3 /dev/hda
-c3參數(shù)激活32位支持,使用-c0可以取消它。-c1參數(shù)也可激活32位支持并使用更少的內(nèi)存開(kāi)銷(xiāo),但是在很多驅(qū)動(dòng)器下它不工作。 大多數(shù)新ide驅(qū)動(dòng)器支持多部分傳輸,但是linux缺省設(shè)置為單部分傳輸。注意:這個(gè)設(shè)置在一些驅(qū)動(dòng)器上,激活多部分傳輸能引起文件系統(tǒng)的完全崩潰。這個(gè)問(wèn)題大多數(shù)發(fā)生在較老的驅(qū)動(dòng)器上。輸入下面的命令激活多部分傳輸: hdparm -m16 /dev/hda
-m16參數(shù)激活16部分傳輸。除了西部數(shù)據(jù)的驅(qū)動(dòng)器外,大多數(shù)驅(qū)動(dòng)器設(shè)置為16或32部分是最合適的。西部數(shù)據(jù)的驅(qū)動(dòng)器緩沖區(qū)小,當(dāng)設(shè)置大于8部分時(shí)性能將顯著下降。對(duì)西部數(shù)據(jù)驅(qū)動(dòng)器來(lái)說(shuō),設(shè)置為4部分是最合適的。 激活多部分訪問(wèn)能夠減少cpu負(fù)載30%~50%,同時(shí)可以增加數(shù)據(jù)傳輸速率到50%。使用-m0參數(shù)可以取消多部分傳輸。 hdparm還有許多選項(xiàng)可設(shè)置硬盤(pán)驅(qū)動(dòng)器,在此不詳述。六、使用軟件raid raid廉價(jià)驅(qū)動(dòng)器的冗余陣列,也可以改善磁盤(pán)驅(qū)動(dòng)器性能和容量。linux支持軟件raid和硬件raid。軟件raid嵌入在linux 內(nèi)核中,比硬件raid花費(fèi)要少得多。軟件raid的惟一花費(fèi)就是購(gòu)買(mǎi)系統(tǒng)中的磁盤(pán),但是軟件raid不能使硬件raid的性能增強(qiáng)。硬件raid使用特殊設(shè)計(jì)的硬件,控制系統(tǒng)的多個(gè)磁盤(pán)。硬件raid可能是昂貴的,但是得到的性能改善與之相匹配。raid的基本思想是組合多個(gè)小的、廉價(jià)的磁盤(pán)驅(qū)動(dòng)器成為一個(gè)磁盤(pán)驅(qū)動(dòng)器陣列,提供與大型計(jì)算機(jī)中單個(gè)大驅(qū)動(dòng)器相同的性能級(jí)別。raid驅(qū)動(dòng)器陣列對(duì)于計(jì)算機(jī)來(lái)說(shuō)像單獨(dú)一個(gè)驅(qū)動(dòng)器,它也可以使用并行處理。磁盤(pán)讀寫(xiě)在raid磁盤(pán)陣列的并行數(shù)據(jù)通路上同時(shí)進(jìn)行。 ibm公司在加利福尼亞大學(xué)發(fā)起一項(xiàng)研究,得到raid級(jí)別的一個(gè)最初定義。現(xiàn)在有六個(gè)已定義的raid級(jí)別,如下所示。 raid 0:級(jí)別0只是數(shù)據(jù)帶。在級(jí)別0中,數(shù)據(jù)被拆分到多于一個(gè)的驅(qū)動(dòng)器,結(jié)果是更高的數(shù)據(jù)吞吐量。這是raid的最快和最有效形式。但是,在這個(gè)級(jí)別沒(méi)有數(shù)據(jù)鏡像,所以在陣列中任何磁盤(pán)的失敗將引起所有數(shù)據(jù)的丟失。 raid 1:級(jí)別1是完全磁盤(pán)鏡像。在獨(dú)立的磁盤(pán)上創(chuàng)建和支持?jǐn)?shù)據(jù)兩份拷貝。級(jí)別1陣列與一個(gè)驅(qū)動(dòng)器相比讀速度快、寫(xiě)速度慢,但是如果任一個(gè)驅(qū)動(dòng)器錯(cuò)誤,不會(huì)有數(shù)據(jù)丟失。這是最昂貴的raid級(jí)別,因?yàn)槊總(gè)磁盤(pán)需要第二個(gè)磁盤(pán)做它的鏡像。這個(gè)級(jí)別提供最好的數(shù)據(jù)安全。 raid 2:級(jí)別2設(shè)想用于沒(méi)有內(nèi)嵌錯(cuò)誤檢測(cè)的驅(qū)動(dòng)器。因?yàn)樗械膕csi驅(qū)動(dòng)器支持內(nèi)嵌錯(cuò)誤檢測(cè),這個(gè)級(jí)別已過(guò)時(shí),基本上沒(méi)用了。linux不使用這個(gè)級(jí)別。 raid 3:級(jí)別3是一個(gè)有奇偶校驗(yàn)磁盤(pán)的磁盤(pán)帶。存儲(chǔ)奇偶校驗(yàn)信息到一個(gè)獨(dú)立的驅(qū)動(dòng)器上,允許恢復(fù)任何單個(gè)驅(qū)動(dòng)器上的錯(cuò)誤。linux不支持這個(gè)級(jí)別。 raid 4:級(jí)別4是擁有一個(gè)奇偶校驗(yàn)磁盤(pán)的大塊帶。奇偶校驗(yàn)信息意味著任何一個(gè)磁盤(pán)失敗數(shù)據(jù)可以被恢復(fù)。級(jí)別4陣列的讀性能非常好,寫(xiě)速度比較慢,因?yàn)槠媾夹r?yàn)數(shù)據(jù)必須每次更新。 raid 5:級(jí)別5與級(jí)別4相似,但是它將奇偶校驗(yàn)信息分布到多個(gè)驅(qū)動(dòng)器中。這樣提高了磁盤(pán)寫(xiě)速度。它每兆字節(jié)的花費(fèi)與級(jí)別4相同,提高了高水平數(shù)據(jù)保護(hù)下的高速隨機(jī)性能,是使用最廣泛的raid系統(tǒng)。 軟件raid是級(jí)別0,它使多個(gè)硬盤(pán)看起來(lái)像一個(gè)磁盤(pán),但是速度比任何單個(gè)磁盤(pán)快得多,因?yàn)轵?qū)動(dòng)器被并行訪問(wèn)。軟件raid可以用ide或scsi控制器,也可以使用任何磁盤(pán)組合。七、配置內(nèi)核參數(shù) 通過(guò)調(diào)整系統(tǒng)內(nèi)核參數(shù)改善性能有時(shí)是很明顯的。如果你決定要這樣做一定要小心,因?yàn)橄到y(tǒng)內(nèi)核的改變可能優(yōu)化系統(tǒng),也可能引起系統(tǒng)崩潰。 注意:不要在一個(gè)正在使用的系統(tǒng)上改變內(nèi)核參數(shù),因?yàn)橛邢到y(tǒng)崩潰的危險(xiǎn)。因此,必須在一個(gè)沒(méi)有人使用的系統(tǒng)上進(jìn)行測(cè)試。設(shè)置一個(gè)測(cè)試機(jī)器,對(duì)系統(tǒng)進(jìn)行測(cè)試,確保所有工作正常。 tweak內(nèi)存性能 在linux中,可以tweak系統(tǒng)內(nèi)存。如果遇到內(nèi)存不足錯(cuò)誤或者系統(tǒng)是用于網(wǎng)絡(luò)的,可以調(diào)整內(nèi)存分配設(shè)置。 內(nèi)存一般以每頁(yè)4千字節(jié)分配。調(diào)整“空白頁(yè)”設(shè)置,可以在性能上有顯著的改善。打開(kāi)終端窗口,輸入下面的命令查看系統(tǒng)的當(dāng)前設(shè)置: cat /proc/sys/vm/freepages
這樣將獲得三個(gè)數(shù)字,就像下面這樣: 128 256 384
這些是最小空白頁(yè)、空白頁(yè)低和空白頁(yè)高設(shè)置。這些值在啟動(dòng)時(shí)決定。最小設(shè)置是系統(tǒng)中內(nèi)存數(shù)量的兩倍;低設(shè)置是內(nèi)存數(shù)量的4倍;高設(shè)置是系統(tǒng)內(nèi)存的6倍;自由內(nèi)存不能小于最小空白頁(yè)數(shù)。 如果空白頁(yè)數(shù)目低于空白頁(yè)高設(shè)置,則交換(使用磁盤(pán)空間分配到交換文件)開(kāi)始。當(dāng)達(dá)到空白頁(yè)低設(shè)置時(shí),密集型交換開(kāi)始。 增加空白頁(yè)高設(shè)置有時(shí)可以改善整體性能,比如試試增加高設(shè)置到1mb,用echo命令可以調(diào)整這個(gè)設(shè)置。使用樣本設(shè)置,輸入這個(gè)命令增加空白頁(yè)高設(shè)置到1mb: echo "128 256 1024" > /proc/sys/vm/freepages
注意:當(dāng)系統(tǒng)還沒(méi)有被使用時(shí)測(cè)試這個(gè)設(shè)置,以確保在做任何調(diào)整時(shí)監(jiān)視系統(tǒng)性能。這樣可以確定哪個(gè)設(shè)置對(duì)系統(tǒng)是最好的。