2007年6月30日 星期六

Ubuntu_硬碟調教

Linux上有很多需要使用者手動設定的地方,包括硬碟的調整,硬碟需要調整的地方包括了:傳輸的速率、buff大小、存取的模式...等等,過去都是要自己手動設定,但是隨著Linux個人桌面系統化,很多近期的系統也會自動進行最佳化設定,不過還是可以自己檢查,並且加一些沒有被加進去的項目。(以下似乎不適用SATA之後的傳輸模式,僅供IDE介面參考)

首先檢查且測試更改前硬碟的效能,最好登出桌面系統,在單純的文字模式底下測試,並且不要執行任何程式,這樣可以單純的測出硬碟的效率,

sudo hdparm -tT /dev/hdc(更改成你要測試的硬碟代號)

會出現像
Timing cached reads: 1172 MB in 2.00 seconds = 586.08 MB/sec
Timing buffered disk reads: 160 MB in 3.01 seconds = 53.16 MB/sec
/dev/hdc:
這樣的東西,紀錄一下這些數值,接著

sudo hdparm -i /dev/hda

出現的是
/dev/hdc:

Model=ST3802110A, FwRev=2AAA, SerialNo=3LR08MM0
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=unknown, BuffSize=2048kB, MaxMultSect=16, MultSect=16
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=156301488
IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2

UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5
AdvancedPM=no WriteCache=enabled
Drive conforms to: Unspecified: ATA/ATAPI-1 ATA/ATAPI-2 ATA/ATAPI-3 ATA/ATAPI-4
ATA/ATAPI-5 ATA/ATAPI-6 ATA/ATAPI-7

* signifies the current active mode
重點在紅色的部份,MaxMultSec指的是你能用到的MultiSect的最大值,後面的就是你目前的數值,
而PIO/DMA/UDMA顯示的是你能用的傳輸模式,最下面最後面一個就是最佳的模式,把這兩個記下來,
然後開始進行調整~

參數 -d
這個參數開啟硬碟的DMA模式,目前的硬碟都有支援DMA,用 -d1 開了可以增加效率。

參數 -X(大寫)
這是DMA的傳輸模式設定,就是設定剛剛的PIO/DMA/UDMA你所記下最好的那個,假設是udma5,那就下參數 -X69 ,就可以打開硬碟的UDMA5模式,其他的模式設定如下,聽一個相對應的,

012345
PIO0809101112
SDMA161718
MDMA323334
UDMA646566676869

參數 -c
這是設定輸出入位元,
0預設 16 位元
132 位元
216 位元
332 位元 + sync
一般來說可選擇3當然是最好,所以下 -c3

參數 -m
這就是設定MultiSect的數值,將剛剛你所看到的Max
MultiSect數值加到後面,我的是 -m16

參數 -u
Wiki上的說明是「
啟用 unmasking 之後,磁碟中斷時 Linux 便可取消其他中斷遮罩,讓系統同時進行類似的工作,應該能提升系統整體反應。」,而根據man hdparm的說法, -u 參數在一些特定的硬體會造成不良的影響,在舊的核心上也支援不良,不過目前真的很舊的硬體應該大家也很少用了,核心絕大部分人應該也是最新次新或是次次新,不會舊到哪裡去,所以就下 -u1 把他打開吧,

參數 -W
開啟寫入快取,有好無壞...應該吧.... -W1 打開,

整個下來就是

sudo hdparm -d1 -X69 -c3 -m16 -W1 /dev/hdc

然後再 sudo hdparm -tT /dev/hdc 測試看看有沒有比之前的快。

不過這樣每次開機之後就得自己手動打一次指令,所以我們把他加到 /etc/hdparm.conf 裡,
/dev/hdc {
mult_sect_io = 16
write_cache = on
dma = on
interrupt_unmask = on
io32_support = 3
transfer_mode = 69
}
我將指令加到 command_line 下,結果無效,不知道為什麼,不過我參照上方的設定說明,自己設定成上面的樣子就可以了,將你的硬碟都設定好,重開機就可以了。

不知道哪裡聽來的,Ubuntu6.10還是7.04不再去讀hdparm.conf,不知道是不是真的....

如果hdparm -i有顯示UDMA,例如UDMA5,但是設定之後卻只是UDMA2或是沒變化,那可能就是主機板不支援這個模式,以下是對照表,拿主機板說明書參考看看。
UDMAATA
0ATA 16
1ATA24
2ATA33
3ATA44
4ATA66
5ATA100

沒有留言: