mipselなLinkStation Debianサーバー 〜hdparmでHDD高速化〜

hdparm


SAMSUNG SP1604N hdparmはHDDのDMAを有効にしたり、readaheadの値を変更したりと、HDD動作の詳細を設定できる。
HDDに合った素敵な設定にすれば、HDDパフォーマンスの向上が望める。

まずは、hdparmをaptでインストール。

$ sudo apt-get install hdparm

無事インストールできたところで、HDDの詳細情報を確認。
以下、設定するHDDが/dev/hdaであるとする。

$ sudo hdparm -i /dev/hda

/dev/hda:
Model=SAMSUNG SP1604N, FwRev=TM100-24, SerialNo=******
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
RawCHS=16383/16/63, TrkSize=34902, SectSize=554, ECCbytes=4
BuffType=DualPortCache, BuffSize=2048kB, 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 udma3 udma4 *udma5 udma6
AdvancedPM=no WriteCache=enabled
Drive conforms to: ATA/ATAPI-7 T13 1532D revision 0: 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

この情報を元に、設定を行う。

hdparm 高速化設定


高速化に繋がるであろう設定パラメーターは次のあたり。

-A
(lookahead)
IDEドライブの先読み機能を無効・有効にする。(-A0:無効、-A1:有効)
これは有効にすべきだ。
-a
(read_ahead_sect)
ファイルシステムの先読みセクタ数を設定する。次に読み込まれそうなデータをこのパラメータで設定したセクタ数だけ先読みすることで高速アクセスを手助けする。
ランダムアクセスが多い場合は小さ目の値を設定し、大きなサイズのデータを読むことが多い場合は大き目の値を設定する。
デフォルト値を参考に設定すると良い。(例:-a512)
-c
(io32_support)
IDE の 32bit I/O サポートを設定する。ほとんどのHDDはsyncシーケンスを使った 32bitデータ転送に対応しているので、通常は -c3 と設定。
 0: 32bit I/O サポートを無効
 1: 32bit I/O サポートを有効
 3: syncシーケンスを使った 32bitデータ転送を有効
-d
using_dma)
DMAを有効にするか否かを設定。(-d0:無効、-d1:有効)
DMAをサポートしているHDDなら是が非でも有効にすべき。一桁違うパフォーマンスアップが望める。
-m
(mult_sect_io)
ドライブの複数セクタ I/O のセクタ数を設定する。一回の I/O 割り込みで指定したセクタ数の転送を可能にすることで、オペレーティングシステムのオーバーヘッドを軽減することができる。
Western Digital のHDD以外は、hdparm -i で取得した MaxMultSect の値をここに設定すると良い。(例:-m32)
-u
(interrupt_unmask)
ドライブの割り込み許可フラグを設定する。(-u0:無効、-u1:有効)
要求したデータがディスクから返ってくる待ち時間に、ネットワークトラフィックなど他の割り込みタスクに応答できるようになり、Linux の反応を大いに改善することができる。
-W
(write_cache)
IDE ドライブの書き込みキャッシュ機能を設定する。(-W0:無効、-W1:有効)
対応していれば、有効にしておきたい。ディスク書き込みの高速化が望める。
-X
(transfer_mode)
IDE 転送モードを設定する。DMA転送を利用する場合は、-u1 を設定する必要がある。 hdparm -i から得られる対応した最速のIDE 転送モードに設定すると良い。パラメータとモードの対応表は下を参照。
※必ずしも hdparm -i で表示される転送モードを有効にできるとは限らない

hdparm "-X" パラメータの対応表↓

-X08 PIOモード0
-X09 PIOモード1
-X10 PIOモード2
-X11 PIOモード3
-X12 PIOモード4
-X16 シングルワードDMAモード0
-X17 シングルワードDMAモード1
-X18 シングルワードDMAモード2
-X32 マルチワードDMAモード0
-X33 マルチワードDMAモード1
-X34 DMAモード2
-X67 UDMAモード3
-X66 UDMAモード2 (Ultra ATA33)
-X68 UDMAモード4 (Ultra ATA66)
-X69 UDMAモード5 (Ultra ATA100)
-X70 UDMAモード6 (Ultra ATA133)

これらのパラメータを、毎回OSが起動する度に設定するよう、/etc/hdparm.confに記述しておく。
今回は簡単にcommand_lineとして記述することにする。
/etc/hdparm.confに記述する前に、予め"hdparm -X69 /dev/hda"などとしてきちんと動作するかをチェックしておいた方が良い。

$ sudo vi /etc/hdparm.conf

# 次の赤字のように追記
command_line {
hdparm -W1 -c3 -m16 -a32 -A1 -d1 -X69 -u1 /dev/hda
}

設定が反映されているか念のためチェック。

$ sudo hdparm /dev/hda

/dev/hda:
multcount = 16 (on)
IO_support = 3 (32-bit w/sync)
unmaskirq = 1 (on)
using_dma = 1 (on)
keepsettings = 0 (off)
readonly = 0 (off)
readahead = 32 (on)
geometry = 19457/255/63, sectors = 312581808, start = 0

"-X" オプションの確認は"hdparm -i /dev/hda"の*マークで確認できる。

転送速度をチェックしてみる。

$ sudo hdparm -Tt /dev/hda

/dev/hda:
Timing cached reads: 234 MB in 2.01 seconds = 116.42 MB/sec
Timing buffered disk reads: 110 MB in 3.05 seconds = 36.07 MB/sec

必ずしも、この転送速度がHDDのパフォーマンスを表す訳ではない。
ランダムアクセスや書き込みのパフォーマンスは、実際に何か処理を行って体感するしかない。

また、hdparmではHDDアクセスがない場合に、HDDをスピンダウン(停止)するように設定することもできる。

$ sudo hdparm -S60 /dev/hda

このように"-S"オプションで指定する。×5秒 の時間アクセスがなければ、HDDをスピンダウンするというパラメータである。
上記では "60 * 5 = 300秒" つまり、5分間アクセスがなければスピンダウンと設定している。
/etc/hdparm.confに記述することもできる。

hdparmの"-S"オプションでもHDDを停止することができるが、noflushdというHDDのスピンダウンを制御する別のプログラムを使った方が良い。
noflushdはHDDへの書き込みを抑制し、HDDがスピンアップするのを極力抑えてくれるからだ。

AppleCare Protection Plan Mac Book Air iMac

RSS MarkRSS Mark 2
   
 


        ※このHPにより生じたトラブルについて、一切責任を負いません。