「PC UNIX登龍門」に,Linuxのカーネルコンフィグレーションを変更してIDEのバスマスタを使うことができると書いてありました。しかし,記事のとおり設定して再起動したのですが,速くなったようには思えません。Linuxは本当にバスマスタに対応しているのでしょうか?
Linuxは一部のチップセット(CMD640,インテル Triton PIIXなど)でIDEのバスマスタをサポートしていますが,記事では説明不足でした。カーネルにバスマスタドライバを組み込んだだけでは有効にはならず,起動後にhdparmユーティリティを使ってIDEドライブのDMA転送機能などを有効にしなければなりません。
hdparmコマンドの使い方はマニュアル(man hdparmで表示)を参照していただくとして,ここでは現在の一般的なFast ATA対応のドライブ+インテル PIIXでバスマスタを有効にする方法を紹介しておきます。
IDEドライブはメーカーや種類によってサポートしているDMAモード,PIOモードが異なります。そのため,hdparmでドライブごとにDMA機能やPIO機能を設定するようになっています。
まず,hdparmを使ってドライブがサポートしている機能を調べましょう(root権限が必要です)。
画面はMaxtorのIDEドライブ情報を表示させた例です(/dev/hdaに接続されています)。さまざまな情報が表示されていますが,この情報からドライブがDMAモード2(Fast ATA)をサポートしていることが分かります。
このドライブを使いバスマスタなどの機能を有効に機能させるには,コマンドラインで次のようにします。オプションごとに意味を解説していきます。
# /usr/sbin/hdparm -d1 -X34 -c1 -m16 /dev/hda |
-d1 |
-d1でバスマスタ有効,-d0でバスマスタ無効。 |
-X34 |
ドライブのモードをMultiword DMAモード2(Fast ATAで最も高速なDMAモード)に設定する(マニュアル参照)。 |
-c1 |
-c0で16ビットモード(デフォルト),-c1で32ビットモード。 |
-m16 |
マルチセクタリードの最大指定。この数値は画面で示したMultSect=部分の数値を使います。 |
# /usr/sbin/hdparm -i /dev/hda: Model=Maxtor 83240D4, FwRev=TAVX3322, SerialNo=R40CD5QA Config={ Fixed } RawCHS=6696/15/63, TrkSize=0, SectSize=0, ECCbytes=20 BuffType=3(DualPortCache), BuffSize=256kB, MaxMultSect=16, MultSect=16 DblWordIO=no, maxPIO=2(fast), DMA=yes, maxDMA=2(fast) CurCHS=6696/15/63, CurSects=6327720, LBA=yes, LBAsects=6328125 tDMA={min:120,rec:120}, DMA modes: mword0 mword1 *mword2 IORDY=on/off, tPIO={min:120,w/IORDY:120}, PIO modes: mode3 mode4 |