[ale] kernel frustrations

Danny Cox danscox at mindspring.com
Mon Apr 1 09:45:49 EST 2002


Phrostie,

On Mon, 2002-04-01 at 09:04, phrostie wrote:
> for give my ignorance but what are DMA and PIO modes.

	DMA: Direct Memory Access.  A mode where the driver tells the card here
are some starting memory addresses.  Process this I/O using them, and
don't bother me until you're done.  The IDE chipset does all of the work
of transferring the data between memory and the disk.

	PIO: Programmed Input/Output.  The CPU performs the transfer of data
between memory and the chipset.  Under Intel, there is an instruction
that'll do it by itself.  You set the port, memory address, and # of
words, and the instruction (insw/outsw?) does the rest.  It can transfer
16 or 32 bit words, depending on the hdparm '-c' parameter.

> acctually it's slower in 2.4 with the errors than when i'm running the 2.2.
> i'm guessing it's spending a lot of time writting error messages.
> 
> anyway hdparm -i /dev/hda gives:
> 
> <snip>
> /dev/hda:
> 
>  Model=WDC WD300AB-00BVA0, FwRev=21.01H21, SerialNo=WD-WMA7H1453518
>  Config={ HardSect NotMFM HdSw>15uSec SpinMotCtl Fixed DTR>5Mbs FmtGapReq }
>  RawCHS=16383/16/63, TrkSize=57600, SectSize=600, ECCbytes=40
>  BuffType=DualPortCache, BuffSize=2048kB, MaxMultSect=16, MultSect=off
>  CurCHS=16383/16/63, CurSects=-66060037, LBA=yes, LBAsects=58633344
>  IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
>  PIO modes: pio0 pio1 pio2 pio3 pio4 
>  DMA modes: mdma0 mdma1 *mdma2 udma0 udma1 udma2 udma3 udma4 udma5 
>  AdvancedPM=no
>  Drive Supports : Reserved : ATA-1 ATA-2 ATA-3 ATA-4 ATA-5 
> </snip>

	The asterisk above shows the mode hda is currently using: mdma2, which
means "Multiple word DMA", as opposed to "Ultra" DMA.  So, my first
guess is wrong.  Someone else suggested checking the cables that connect
the chipset to the drive.  Pull 'em off, and push 'em back on
(carefully!).  This is also known as "reseating" the connector, and some
hardware maintainence types just do it to look like they're worth their
wages ;-).

	Try reseating the connectors first, then try PIO mode.  To set PIO
mode, type as root "hdparm -d0 /dev/hda", which turns off DMA mode. 
It'll probably be slower, but perhaps it'll actually work.

	If the reseat works, and you're feeling daring, you can try a higher
DMA mode.  It'd be good to know what your hard drive and chipset
supports, and knowing that, you can try (again as root): "hdparm -X66
/dev/hda".  That sets UDMA2.  See the discussion of the -X option in
"man hdparm" for more info.  If the drive or chipset won't support
UDMA2, it *should* simply refuse to set it.  OTOH, the above output sez
it supports up to UDMA5 (hdparm -X69).  Just be very carefull trying
this, okay?

-- 
kernel, n.: A part of an operating system that preserves the
medieval traditions of sorcery and black art.

Danny


---
This message has been sent through the ALE general discussion list.
See http://www.ale.org/mailing-lists.shtml for more info. Problems should be 
sent to listmaster at ale dot org.






More information about the Ale mailing list