個人心情和 Linux / FreeBSD 等技術

2007/04/04

利用hdparm調整硬碟

hdparm 是用來查詢ATA/IDE 裝置參數用的工具
語法: hdparm [flags] [device]
如果沒有給予任何flags,hdparm會假設以-acdgkmnru來查詢硬碟

ex: $ sudo hdparm /dev/hdb
/dev/hdb:
multcount = 16 (on)
IO_support = 3 (32-bit w/sync)
unmaskirq = 1 (on)
using_dma = 1 (on)
keepsettings = 0 (off)
readonly = 0 (off)
readahead = 256 (on)
geometry = 20023/255/63, sectors = 321672960, start = 0

先查查有無安裝
$ sudo hdparm -V
hdparm v6.9 (會看到工具版本)

取得硬碟資訊
$ sudo hdparm -i /dev/hdb
Model=HDT722516DLAT80, FwRev=V43OA96A, SerialNo=VD071GTE0D4TNK
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=51
BuffType=DualPortCache, BuffSize=7674kB,
MaxMultSect=16, MultSect=16
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=268435455
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 *udma6

AdvancedPM=yes: disabled (255) WriteCache=enabled
Drive conforms to: ATA/ATAPI-7 T13 1532D revision 1: ATA/ATAPI-2
ATA/ATAPI-3 ATA/ATAPI-4 ATA/ATAPI-5 ATA/ATAPI-6 ATA/ATAPI-7

* signifies the current active mode (星號表現在正使用的模式)


光碟機資訊
$ sudo hdparm -i /dev/cdrom

Model=ASUS DRW-1612BL, FwRev=1.10, SerialNo=
Config={ Fixed Removeable DTR<=5Mbs DTR>10Mbs nonMagnetic }
RawCHS=0/0/0, TrkSize=0, SectSize=0, ECCbytes=0
BuffType=unknown, BuffSize=0kB, MaxMultSect=0
(maybe): CurCHS=0/0/0, CurSects=0, LBA=yes, LBAsects=0
IORDY=yes, tPIO={min:383,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

AdvancedPM=no
Drive conforms to: unknown: ATA/ATAPI-3 ATA/ATAPI-4 ATA/ATAPI-5
ATA/ATAPI-6 ATA/ATAPI-7

* signifies the current active mode


參數要特別記下MaxMultSect 和 UDMA的模式可支援到多高
1. 設定DMA模式 "-d" flag (1/0 | 打開/關閉)
DMA 模式很重要,例如要播放 DVD 或是燒錄光碟片的話,
就最好開啟 DVD-ROM/RW 的 DMA 模式,不然很可能播放會跳格,
燒錄速度一直拉不上去,甚至可能燒錄失敗。
一般光碟機和硬碟開啟 DMA 模式也很有幫助,
可以大幅提升速度,降低 CPU 負載。
$ sudo hdparm -d1 /dev/hdb
$ sudo hdparm -d1 /dev/cdrom

2.傳輸模式 (PIO/SDMA/MDMA/UDMA) "-X" flag
由於其他模式的傳輸直遠低於UDMA,所以以UDMA模式為最先考量
模式:udma0 udma1 udma2 udma3 udma4 udma5 udma6
參數: 64 65 66 67 68 69 70
由於我的硬碟可支援到udma6,光碟機則可到udma4
$ sudo hdparm -X70 /dev/hdb
$ sudo hdparm -X68 /dev/cdrom
hdparm也支援以傳輸模式為名稱的寫法 ex:
$ sudo hdparm -X udma6 /dev/hdb
$ sudo hdparm -X udma4 /dev/cdrom

3.32位元的I/O支援 ("-c" flag)
I/O 支援的4個層級
0預設 16 位元
132 位元
216 位元
332 位元 + sync
能使用32位元是最好的 so
$ sudo hdparm -c3 /dev/hdb

4.設定同步讀取多個sector ("-m" flag)
一般來說,設定此模式,可降低系統因為讀取磁碟而損耗的效能,
這裡要用到MaxMultSect這個值,以"-i" flag可以查詢的到

$ sudo hdparm -m16 /dev/hdb
大多數新碟磁機應該都能用 MultSect 16,比較舊的用 8。
修改這個設定之後應該能減少磁碟存取消耗的系統資源,增加磁碟頻寬。
**注意** man page中提到
Some drives claim to support multiple mode, but lose dataat some
set‐tings. Under rare circumstances, such failurescan result in
massive filesystem corruption.


XD...鳥哥網頁上有寫到WD的硬碟最好別開...

5. unmaskirq ("-u" flag)
對裝置查詢或設定interrupt-unmask,啟用umask (-u1) 會大大提升
linux反應和消除"serial port overrun"的錯誤。

**注意** 某些IDE crontroler在開啟此選項後會導致嚴重
filesystem corruption特別是CMD-640BRZ1000 IDE crontroler

6.寫入快取 ("-W" flag)
-W 是關閉/開啟(0/1)寫入快取功能

**注意**不是小寫w選項,小寫w是reset功能。且gentoo的wiki
上寫了writing-cache功能被人發現在journaling filesystem
ext3,Reiser fs建議別開啟 ~.~,看來不管是大小寫的w
最好都別用


7.read-lookahead功能 ("-A" flag)
關閉/開啟 (0/1) IDE driver的read-lookahead 功能,在預設值通常是開啟的

8.開啟read-ahead功能 ("-a" flag)
此flag可為檔案系統開啟/設定磁區預讀功能。能夠增進系統讀取大檔案的
連續驅段。
$sudo hdparm -a256 /dev/hdb

9.最後在開機後馬上啟用最佳化
Debian在/etc/hdparm.conf可讓我們設定硬碟的最佳化參數,我的參數有
command_line {
hdparm -a256 -A1 -c3 -d1 -m16 -u1 -X69 /dev/hda
}
command_line {
hdparm -a256A1c3d1m16u1X70 /dev/hdb
}
command_line {
hdparm -d1c1X68 /dev/cdrom
}
command_line {
hdparm -d1c1X68 /dev/cdrom1
}

P.S 事實上寫在 /etc/default/hdparm似乎也可以,摘錄裡面的註解
# This is run before the configuration in hdparm.conf. Do not use
# this arrangement if you need modules loaded for your hard disks,
# or need udev to create the nodes, or have some other local quirk
# These are better addressed with the options in /etc/hdparm.conf



最後,裝置測試
$sodo hdparm -Tt /dev/hdb

Timing cached reads: 1924 MB in 2.00 seconds = 962.25 MB/sec
Timing buffered disk reads: 180 MB in 3.00 seconds = 59.98 MB/sec

結論:hdparm還是有一些淺在危險的參數XD,要開啟前一定要查閱
manpage。

參考網站
1. man hdparm
2. man hdparm.conf
3.http://www.gentoo-wiki.com/
4.鳥哥
5.Linux Tunning Guide

沒有留言: