IDEバスマスター(UltraDMA)を使うには

提供: SmileLogicWiki

Linuxメモに戻る。

前書き

最近の一般的なマザーボードに載っているチップセットでは、IDEコントローラーがUltraDMAモードやDMAモードと呼ばれる高速にデータ転送を行う手段が選択できます。Windows 系OSでは一般的なようですが、残念ながら Linux ではそうではないようです。しかし、Linux カーネルには仕組みが実装されているのでそれを有効にしてみましょう。

設定方法

まず、hdparm のパッケージが必要です。apt-get install hdparm とするのが楽かな?この hdparm は以下の書式が可能です。

hdparm [-d [0または1] ] [-i] [-t] [-y] [-Y] [-C] デバイス名

このうち [-y][Y][C] はスタンバイモード・スリープモード・活動状態表示等なので、ちょっと怖いので触れない方がいいかも。

使い方としては、hdparm -i /dev/hda でディスクの詳細情報が表示されます。

# hdparm -i /dev/hda
/dev/hda:
Model=IBM-DTLA-307030, FwRev=TX4OA50C, SerialNo=YKDYKV9Q999
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=40
BuffType=3(DualPortCache), BuffSize=1916kB, MaxMultSect=16, MultSect=off
DblWordIO=no, OldPIO=2, DMA=yes, OldDMA=2
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=60036480
tDMA={min:120,rec:120}, DMA modes: mword0 mword1 mword2
IORDY=on/off, tPIO={min:240,w/IORDY:120}, PIO modes: mode3 mode4
UDMA modes: mode0 mode1 mode2 mode3 mode4 *mode5 

このPCには、かなり高速なHDDが載っているようです。UDMA mode5 という事は ATA100 という規格のものですね。次にベンチマークを行ってみます。 hdparm -t /dev/hda です。

# hdparm -t /dev/hda
/dev/hda:
Timing buffered disk reads: 64 MB in 15.72 seconds = 4.07 MB/sec 

遅(T_T) まあ、PIOモードではこの程度でしょう。では、設定を変えてみます。簡単です。以下のようにしてください。

hdparm -d 1 /dev/hda
# hdparm -d 1 /dev/hda
/dev/hda:
setting using_dma to 1 (on)
using_dma = 1 (on) 

と表示されたら、PIOモードからDMAモードに変更されました。では、上記と同じようにベンチマークを行ってみましょう。 hdparm -t /dev/hda です

# hdparm -t /dev/hda
/dev/hda:
Timing buffered disk reads: 64 MB in 1.79 seconds = 35.75 MB/sec 

すごい高速化ですね。このテスト用PCのマザーボード(チップセット)が Intel 815E(ATA100対応)+ATA100対応HDDという組み合わせの結果かもしれませんが、440BX+ATA33なHDDな組み合わせでも数%は高速化されるようです。

Debian GNU/Linux を使う事によって眠ってしまった本来の性能を生かすという意味では、いい設定だと思います。

書き忘れました

hdparm は再起動すると設定が無効になります。よって、以下のスクリプトを /etc/init.d/hdparm にコピーして、chmod a+x /etc/init.d/hdparm とした後に update-rc.d hdparm defaults として下さい。自動的に rc*.d にシンボリックリンクを張ります。ちなみに削除する場合は update-rc.d hdparm remove でシンボリックリンクが削除されます。

#! /bin/sh
#
# Setting IDE Bus Master
#
# chmod a+x /etc/init.d/hdparm
#
DAEMON=/sbin/hdparm
# DAEMON check
test -x $DAEMON || exit 0
# Select Working
case "$1" in
	start)
		$DAEMON -d 1 /dev/hda
		;;
	stop)
		$DAEMON -d 0 /dev/hda
		;;
	status)
		$DAEMON -i /dev/hda
		$DAEMON -d /dev/hda
		;;
	bench)
		$DAEMON -t /dev/hda
		;;
	*)
		echo "Usage: /etc/init.d/hdparm {start|stop|status|bench}"
		exit 1
		;;
esac

exit 0

Linuxメモに戻る。

個人用ツール