HDDのDMA転送
この記事は最初の投稿日から20年経過しています。内容が古い可能性があります。
ふと、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
えらくはやくなってます。
もっと早く気づいていれば…コンパイルも少しは早かったでしょうに。
がくっ…。