HDDのDMA転送

2018年2月18日

この記事は最初の投稿日から19年経過しています。内容が古い可能性があります。

 ふと、HDD が DMA転送になっているかどうか確認してみました。

# 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    = 256 (on)
geometry     = 16383/255/63, sectors = 40007761920, start = 0

なってません。(涙)

ベンチマークしてみます。

# /sbin/hdparm -t /dev/hda
/dev/hda:
Timing buffered disk reads:   10 MB in  3.72 seconds =   2.69 MB/sec

当たり前ですが、遅いです。(涙)

カーネルのコンフィグレーションを確認してみます。

Device Drivers  --->
ATA/ATAPI/MFM/RLL support  --->
Use PCI DMA by default when available

は、Y になっています。

しかし、

Intel PIIXn chipsets support

にチェックがはいっています。何か違う気がします。

VIA82CXXX chipset support

にチェックを入れて、カーネルをリコンパイル、再起動。

/etc/init.d/hdparm は、すでに rc-update add hdparm default 済み。

# hdparm /dev/hda
/dev/hda:
multcount    = 16 (on)
IO_support   =  1 (32-bit)
unmaskirq    =  1 (on)
using_dma    =  1 (on)
keepsettings =  0 (off)
readonly     =  0 (off)
readahead    = 256 (on)
geometry     = 16383/255/63, sectors = 40007761920, start = 0

DMA転送が ON になりました。

もうちょっと詳しい情報も見てみます。

# hdparm -i /dev/hda
/dev/hda:
Model=HTS541040G9AT00, FwRev=MB2OA56J, SerialNo=MPB210X2G0ZMYB
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=DualPortCache, BuffSize=7539kB, MaxMultSect=16, MultSect=16
CurCHS=65535/1/63, CurSects=4128705, LBA=yes, LBAsects=78140160
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=yes: mode=0x80 (128) WriteCache=enabled
Drive conforms to: ATA/ATAPI-6 T13 1410D revision 3a:
* signifies the current active mode

udma5 にチェックがついています。

ベンチマークしてみます。

# hdparm -t /dev/hda
/dev/hda:
Timing buffered disk reads:  100 MB in  3.05 seconds =  32.81 MB/sec

えらくはやくなってます。

もっと早く気づいていれば…コンパイルも少しは早かったでしょうに。

がくっ…。

gentoo

Posted by toshyon