Return to BSD News archive
Xref: sserve comp.os.os2.programmer:13322 comp.os.linux:53363 comp.os.mach:3187 comp.os.minix:22573 comp.periphs:4156 comp.unix.bsd:12444 comp.unix.pc-clone.32bit:4097 comp.os.386bsd.development:1103 Newsgroups: comp.os.os2.programmer,comp.os.linux,comp.os.mach,comp.os.minix,comp.periphs,comp.unix.bsd,comp.unix.pc-clone.32bit,comp.os.386bsd.development Path: sserve!newshost.anu.edu.au!munnari.oz.au!news.Hawaii.Edu!ames!agate!spool.mu.edu!wupost!csus.edu!netcom.com!adler From: adler@netcom.com (Bruce Adler) Subject: Re: More on the DMA timing problem Message-ID: <adlerCBy8o4.I9v@netcom.com> Organization: Netcom Online Communications Services (408-241-9760 login: guest) References: <jmonroyCBKrE9.76n@netcom.com> <jmonroyCBopts.KM8@netcom.com> <1993Aug16.072355.292@ica.philips.nl> Date: Wed, 18 Aug 1993 09:50:28 GMT Lines: 27 In article <1993Aug16.072355.292@ica.philips.nl> adrie@ica.philips.nl (Adrie Koolen) writes: >When using 8 bits wide DMA in Single Transfer mode, each DMA transfer >takes about 3 ms. 64 KB then takes 192 ms, which certainly is longer ^^^^ ^^^^^^ >than the refresh period, although most DRAMs will operate with refresh >periods of 192 ms (though not guaranteed!). I assume in first instance you meant "ms" to be microseconds and in the second instance it means milliseconds. Regardless, your timing numbers are way to high and conflict with your later estimate of a max thruput of 5 MB/s. >When using Demand Transfer mode and 16 bits wide DMA, transfer speed >maxes out at some 5 MB/s, so 64 KB would take some 13 ms. This is still ^^^^^^ >longer than the refresh period (4 or 8 ms, I believe). I always assume that a DMA /transfer takes four or five cycles (depending whether it's a zero wait state device and/or how quickly your memory controller recognizes the DMA request from the device). Therefore, on a 10MHz bus that's about 500 nsecs per transfer, not 3 usecs. And 64KB would take atleast 35 milliseconds, but since the CPU gets to use the bus inbetween each byte transfer figure 70 to 100 msecs typically. My guess is that a 10MHz bus probably maxes out at 1 to 1.5 million transfers per second and might go as high as 2 to 2.5 million transfers per second if you put the CPU to sleep.