最佳化Linux伺服器硬碟性能的七個實用技巧

  所有的檔案系統隨著時間的推移都趨向於碎片化。linux檔案系統減少了碎片化,但是並沒有消除。由於它不經常出現,所以對於一個單用戶的工作站來說,可能根本不是問題。然而在繁忙的伺服器中,隨著時間的過去,檔案碎片化將降低硬碟性能,硬碟性能只有從硬碟讀出或寫入數據時才能注意到。下面是最佳化linux系統硬碟性能的一些具體措施。一、清理磁碟

這種方法看上去很簡單:清理磁碟驅動器,刪除不需要的檔案,清除所有需要被保存但將不被使用的檔案。如果可能的話,清除多餘的目錄,並減少子目錄的數目。這些建議似乎顯而易見,但是你會驚訝地發現,每個磁碟上確實積累了非常多的垃圾。釋放磁碟空間可以幫助系統更好地工作。

二、整理磁碟碎片

linux系統上的磁碟碎片整理程式與windows 98或windows nt系統中的磁碟碎片整理程式不同。windows 98引入fat 32檔案系統,雖然運行windows 98不必轉換為fat 32檔案系統。windows可以被設定為使用fat或一個叫ntfs的增強檔案系統。所有這些檔案系統以本質上相同的方式處理檔案存儲。

linux最好的整理磁碟碎片的方法是做一個完全的備份,重新格式化分區,然後從備份恢復檔案。當檔案被存儲時,它們將被寫到連續的塊中,它們不會碎片化。這是一個大工作,可能對於像/usr之類不經常改變的程式分區是不必要的,但是它可以在一個多用戶系統的/home分區產生奇蹟。它所花費的時間與windows nt伺服器磁碟碎片整理花費的時間大致上相同。

如果硬碟性能仍不令人滿意,還有許多其它的步驟可以考慮,但是任何包含升級或購買新設備的硬體解決方案可能會是昂貴的。

三、從ide升級到scsi

如果你的硬碟是一個ide驅動器,可以通過升級到scsi驅動器獲得更好的整體性能。因為ide控制器必須訪問cpu,cpu和磁碟密集型操作可能變得非常緩慢。scsi控制器不用通過cpu處理讀寫。當ide驅動器在讀或寫時,用戶可能會因為cpu周期被ide驅動器占用而抱怨系統的緩慢。

獲取更快的控制器和磁碟驅動器

標準的scsi控制器不能比標準的ide控制器更快地讀寫數據,但是一些非常快的“ultrawide”scsi控制器能夠使讀寫速度有一個真正的飛躍。

eide和udma控制器是非常快的ide控制器。新的udma控制器能夠接近scsi控制器的速度。udma控制器的頂級速度是猝發速度,但持續傳輸的速度明顯慢得多。ide控制器包括udma,是嵌入在驅動器本身中的。不需要購買一個控制器,只要購買一個驅動器,它就包含了控制器,可以獲得 udma性能。

磁碟驅動器經常忽視的一個方面是磁碟本身的速度。磁碟的速度以rpm為單位給出,它代表每分鐘鏇轉多少次。rpm越大,磁碟速度也越快。如果你有這方面的預算,大多數伺服器系統廠商可提供7500rpm甚至10000rpm scsi磁碟。標準scsi和ide磁碟提供5400rpm速度。

四、使用多個控制器

ide和scsi磁碟可以被連結。ide鏈最多包括兩個設備,標準scsi鏈最多包括七個設備。如果在系統中有兩個或更多scsi磁碟,很可能被連結到同一個控制器。這樣對大多數操作是足夠的,尤其是把計算機當作單用戶的工作站時。但是如果有一個伺服器,那么就能夠通過對每個scsi驅動器提供一個控制器改善性能。當然,好的控制器是昂貴的。

五、調整硬碟參數

使用hdparm工具可以調整ide硬碟性能,它設計時專門考慮了使用udma驅動器。在預設情況下,linux使用是最安全的,但是設定訪問ide驅動器是最慢的。預設模式沒有利用udma可能的最快的性能。

使用hdparm工具,通過激活下面的特性可以顯著地改善性能:

◆ 32位支持 預設設定是16位;

◆ 多部分訪問 預設設定是每次中斷單部分傳送。

注意:在使用hdparm之前,確保對系統已經做了完全的備份。使用hdparm改變ide參數,如果出錯可能會引起驅動器上全部數據的丟失。

hdparm可以提供關於硬碟的大量信息。打開一個終端視窗,輸入下面命令獲取系統中第一個ide驅動器的信息(改變設備名獲取其它ide驅動器的信息): hdparm -v /dev/had


上面命令顯示出當系統啟動時從驅動器獲得的信息,包括驅動器操作在16位或32位模式(i/o support)下,是否為多部分訪問(multcount)。關於磁碟驅動器的更詳細信息的顯示可使用-i參數。

hdparm也可以測試驅動器傳輸速率。輸入命令測試系統中第一個ide驅動器: hdparm -tt /dev/hda


此測試可測量驅動器直接讀和高速緩衝存儲器讀的速度。結果是一個最佳化的“最好的事例”數字。改變驅動器設定,激活32位傳輸,輸入下面的命令: hdparm -c3 /dev/hda


-c3參數激活32位支持,使用-c0可以取消它。-c1參數也可激活32位支持並使用更少的記憶體開銷,但是在很多驅動器下它不工作。

大多數新ide驅動器支持多部分傳輸,但是linux預設設定為單部分傳輸。注意:這個設定在一些驅動器上,激活多部分傳輸能引起檔案系統的完全崩潰。這個問題大多數發生在較老的驅動器上。輸入下面的命令激活多部分傳輸: hdparm -m16 /dev/hda


-m16參數激活16部分傳輸。除了西部數據的驅動器外,大多數驅動器設定為16或32部分是最合適的。西部數據的驅動器緩衝區小,當設定大於8部分時性能將顯著下降。對西部數據驅動器來說,設定為4部分是最合適的。

激活多部分訪問能夠減少cpu負載30%~50%,同時可以增加數據傳輸速率到50%。使用-m0參數可以取消多部分傳輸。

hdparm還有許多選項可設定硬碟驅動器,在此不詳述。

六、使用軟體raid

raid廉價驅動器的冗餘陣列,也可以改善磁碟驅動器性能和容量。linux支持軟體raid和硬體raid。軟體raid嵌入在linux 核心中,比硬體raid花費要少得多。軟體raid的惟一花費就是購買系統中的磁碟,但是軟體raid不能使硬體raid的性能增強。硬體raid使用特殊設計的硬體,控制系統的多個磁碟。硬體raid可能是昂貴的,但是得到的性能改善與之相匹配。raid的基本思想是組合多個小的、廉價的磁碟驅動器成為一個磁碟驅動器陣列,提供與大型計算機中單個大驅動器相同的性能級別。raid驅動器陣列對於計算機來說像單獨一個驅動器,它也可以使用並行處理。磁碟讀寫在raid磁碟陣列的並行數據通路上同時進行。

ibm公司在加利福尼亞大學發起一項研究,得到raid級別的一個最初定義。現在有六個已定義的raid級別,如下所示。

raid 0:級別0隻是數據帶。在級別0中,數據被拆分到多於一個的驅動器,結果是更高的數據吞吐量。這是raid的最快和最有效形式。但是,在這個級別沒有數據鏡像,所以在陣列中任何磁碟的失敗將引起所有數據的丟失。

raid 1:級別1是完全磁碟鏡像。在獨立的磁碟上創建和支持數據兩份拷貝。級別1陣列與一個驅動器相比讀速度快、寫速度慢,但是如果任一個驅動器錯誤,不會有數據丟失。這是最昂貴的raid級別,因為每個磁碟需要第二個磁碟做它的鏡像。這個級別提供最好的數據安全。

raid 2:級別2構想用於沒有內嵌錯誤檢測的驅動器。因為所有的scsi驅動器支持內嵌錯誤檢測,這個級別已過時,基本上沒用了。linux不使用這個級別。

raid 3:級別3是一個有奇偶校驗磁碟的磁碟帶。存儲奇偶校驗信息到一個獨立的驅動器上,允許恢復任何單個驅動器上的錯誤。linux不支持這個級別。

raid 4:級別4是擁有一個奇偶校驗磁碟的大塊帶。奇偶校驗信息意味著任何一個磁碟失敗數據可以被恢復。級別4陣列的讀性能非常好,寫速度比較慢,因為奇偶校驗數據必須每次更新。

raid 5:級別5與級別4相似,但是它將奇偶校驗信息分布到多個驅動器中。這樣提高了磁碟寫速度。它每兆位元組的花費與級別4相同,提高了高水平數據保護下的高速隨機性能,是使用最廣泛的raid系統。

軟體raid是級別0,它使多個硬碟看起來像一個磁碟,但是速度比任何單個磁碟快得多,因為驅動器被並行訪問。軟體raid可以用ide或scsi控制器,也可以使用任何磁碟組合。

七、配置核心參數

通過調整系統核心參數改善性能有時是很明顯的。如果你決定要這樣做一定要小心,因為系統核心的改變可能最佳化系統,也可能引起系統崩潰。

注意:不要在一個正在使用的系統上改變核心參數,因為有系統崩潰的危險。因此,必須在一個沒有人使用的系統上進行測試。設定一個測試機器,對系統進行測試,確保所有工作正常。

tweak記憶體性能

在linux中,可以tweak系統記憶體。如果遇到記憶體不足錯誤或者系統是用於網路的,可以調整記憶體分配設定。

記憶體一般以每頁4千位元組分配。調整“空白頁”設定,可以在性能上有顯著的改善。打開終端視窗,輸入下面的命令查看系統的當前設定: cat /proc/sys/vm/freepages


這樣將獲得三個數字,就像下面這樣: 128 256 384


這些是最小空白頁、空白頁低和空白頁高設定。這些值在啟動時決定。最小設定是系統中記憶體數量的兩倍;低設定是記憶體數量的4倍;高設定是系統記憶體的6倍;自由記憶體不能小於最小空白頁數。

如果空白頁數目低於空白頁高設定,則交換(使用磁碟空間分配到交換檔案)開始。當達到空白頁低設定時,密集型交換開始。

增加空白頁高設定有時可以改善整體性能,比如試試增加高設定到1mb,用echo命令可以調整這個設定。使用樣本設定,輸入這個命令增加空白頁高設定到1mb: echo "128 256 1024" > /proc/sys/vm/freepages


注意:當系統還沒有被使用時測試這個設定,以確保在做任何調整時監視系統性能。這樣可以確定哪個設定對系統是最好的。