[LHR]: IDE HDD の設定を変更する (hdparm)

<Home> → <LHR> → <[LHR]: IDE HDD の設定を変更する (hdparm)>

はじめに

hdparm は、IDE HDD/driver の設定を確認・変更を行う Linux 専用の Tool です。

通常、多くの Linux distributor では IDE の転送方式を PIO(Programmed Input/Output) モードに設定されています。この PIO モードは CPU が直接 I/O を制御しており、IDE 転送方式では最も安定した方式ではありますが、反面、転送効率は悪く、CPU 使用率が上がり転送速度も頭打ちになります。

hdparm では IDE の転送方式をより高速で効率的な DMA 転送方式(UltraDMA) に変更することが出来ます。しかし、全ての PC で問題が無いとは言い切れませんので、変更には細心の注意が必要です。


使用例

使用例の環境は以下の通り。

1. IDE driver の設定を確認する

以下は Knoppix の起動状態でのデフォルト設定を出力しています。デフォルトでは DMA 転送は Off に設定されているのが確認できます。

# hdparm /dev/hda
/dev/hda:
multcount = 16 (on)
IO_support = 0 (default 16-bit)
unmaskirq = 0 (off)
using_dma = 0 (off)
keepsettings = 0 (off)
readonly = 0 (off)
readahead = 8 (on)
geometry = 4865/255/63, sectors = 78165360, start = 0

2. IDE HDD の情報を取得する

-i parameter は IDE の Inquery command 結果を出力します。

よって、例え以下の結果で udma5 をサポートしていると出力されても、それは IDE がサポートしているだけであって、Mother board 側の IDE Controller が udma5 をサポートしているわけではないことに注意してください。

# hdparm -i /dev/hda

/dev/hda:

Model=ST340016A, FwRev=3.05, SerialNo=3HS05JD1
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=78165360
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: device does not report version: 1 2 3 4 5

-I parameter は、-i parameter よりも人の分かりやすい出力になります(分かる人にとっては、ですが)。

# hdparm -I /dev/hda

/dev/hda:

ATA device, with non-removable media
Model Number: ST340016A
Serial Number: 3HS05JD1
Firmware Revision: 3.05
Standards:
Supported: 5 4 3 2
Likely used: 6
Configuration:
Logical max current
cylinders 16383 16383
heads 16 16
sectors/track 63 63
--
CHS current addressable sectors: 16514064
LBA user addressable sectors: 78165360
device size with M = 1024*1024: 38166 MBytes
device size with M = 1000*1000: 40020 MBytes (40 GB)
Capabilities:
LBA, IORDY(can be disabled)
bytes avail on r/w long: 4 Queue depth: 1
Standby timer values: spec'd by Standard
R/W multiple sector transfer: Max = 16 Current = 16
Recommended acoustic management value: 128, current value: 128
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=240ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* READ BUFFER cmd
* WRITE BUFFER cmd
* Host Protected Area feature set
* Look-ahead
* Write cache
* Power Management feature set
Security Mode feature set
* SMART feature set
Device Configuration Overlay feature set
* Automatic Acoustic Management feature set
SET MAX security extension
* DOWNLOAD MICROCODE cmd
Security:
Master password revision code = 65534
supported
not enabled
not locked
not frozen
not expired: security count
not supported: enhanced erase
HW reset results:
CBLID- above Vih
Device num = 1
Checksum: correct

3. IDE HDD の Benchmark を計測する

-t parameter で IDE HDD の転送速度が計測できます。この結果は単純な Sector Read なので設定の変更が行われたかどうかの簡易的な目的以外では信用しない方が良いと思っています。。-T parameter は多分、あまり役に立たないかも。

デフォルト状態では DMA 転送が Off なだけに 4.07 MB/sec と速くはないです。

# hdparm -tT /dev/hda

/dev/hda:
Timing buffer-cache reads: 128 MB in 0.87 seconds =147.13 MB/sec
Timing buffered disk reads: 64 MB in 15.73 seconds = 4.07 MB/sec

4. IDE HDD の転送をチューニングする

※注意:下記の設定は危険を伴う設定です。この設定が有効かどうかは各システムによって異なります。また、昔から Linux では何故か IDE の DMA 転送は安定していない環境があります。stress test 等、十分に行ってから実装することをお勧めします。

考えられるありとあらゆる parameter を設定してみました。

# hdparm -t /dev/hda

/dev/hda:
Timing buffered disk reads: 64 MB in 15.68 seconds = 4.08 MB/sec
# hdparm -A1 -c3 -d1 -m16 -X69 /dev/hda

/dev/hda:
setting 32-bit IO_support flag to 3
setting multcount to 16
setting using_dma to 1 (on)
setting xfermode to 69 (UltraDMA mode5)
setting drive read-lookahead to 1 (on)
multcount = 16 (on)
IO_support = 3 (32-bit w/sync)
using_dma = 1 (on)
# hdparm -t /dev/hda

/dev/hda:
Timing buffered disk reads: 64 MB in 1.59 seconds = 40.25 MB/sec

#Read 転送速度、約 10 倍 up ですか、、、
#止められまへんなあ

以下は「bonnie++ -d /mnt/hda6 -u root」の結果です。

DMA 転送 Off:

Version 1.03       ------Sequential Output------ --Sequential Input- --Random-
                   -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine       Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
Knoppix         1G  3882  23  4668  13  2124  40  3224  73  4259  60 129.3   0
                   ------Sequential Create------ --------Random Create--------
                   -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
             files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                16   860  99 +++++ +++ +++++ +++   965  96 +++++ +++  3067  91

DMA 転送 On (-A1 -c3 -d1 -m16 -X69 /dev/hda):

Version 1.03       ------Sequential Output------ --Sequential Input- --Random-
                   -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine       Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
Knoppix         1G 19479  97 45159  31 19169  12 18248  90 41430  10 183.5   0
                   ------Sequential Create------ --------Random Create--------
                   -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
             files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                16   856  99 +++++ +++ +++++ +++   913  99 +++++ +++  2962 100

5. IDE HDD を Standby させる

※注意:この設定は危険です。十分前テストを行ってから実装してください。

HDD の motor が止まり静音化が実現できます。-S0 だとその場で、-S1 だと 5 秒後に Standby mode へ移行します。

# hdparm -S0 /dev/hda

Resource

お勧め

関連情報


<Home> → <LHR> → <[LHR]: IDE HDD の設定を変更する (hdparm)>
Copyright (c) 2003 Makoto NARA(Mc.N), All rights reserved.
<Terms of Use>

Valid CSS! Valid HTML 4.01!