On Tue, 30 Dec 2003, Johannes Erdfelt wrote:

> On Tue, Dec 30, 2003, David Brownell <[EMAIL PROTECTED]> wrote:
> > Axel Waggershauser wrote:
> > > I have a problem with inadequate throughput when submitting bulk urbs
> > > with transfer buffers greater than about 128kB. ...
> > > 
> > > The system looks like this:
> > > kernel 2.6.0 with the uhci-hcd module driving a Via controller
> > 
> > Try using a non-UHCI controller.  UHCI needs one DMA descriptor (TD)
> > per packet, so you may be hitting a limitation there:  the descriptors
> > aren't very much smaller than those (64 byte) packets, and they're
> > all pre-allocated.
> 
> Any limitation would show up at submit time. Either it will work or it
> won't work. If it fails, it's most likely a memory allocation problem.
> 
> > You'll find that EHCI has the lowest load of that type (up to 24 KB
> > per descriptor), and OHCI is also low (4 KB per descriptor, it could
> > often handle up to 8 KB but the driver doesn't bother).
> 
> One thing where UHCI might differ is scanning the list of TDs to find
> out of the transfer finished.
> 
> UHCI rescans the entire list every time it checks.
> 
> However, 256KB is still only 4096 TDs which shouldn't take that long to
> remove.
> 
> I wonder if there is some other problem. Maybe adding some timing
> information to the software portion of the TD would be interesting to
> see if there are any delays between completing each individual TD.
> 
> Either way, the difference between UHCI, OHCI and EHCI in this matter,
> is likely to be CPU utilization and I can't believe that we would be
> using enough to make a difference on a modern CPU.
> 
> Axel, can you try it again, but this time, use the time command to see
> what the CPU utilization looks like?

In addition to what Johannes has mentioned, an important factor is the 
overhead during submission of new requests.  Axel didn't say explicitly 
how his test program works, but if it waits for each URB to complete 
before submitting the next URB then this could be an important factor.  I 
can easily imagine it explaining the difference between the desktop and 
laptop timings.

Axel, I would expect that if you keep several requests active 
simultaneously then the size of the buffers will hardly make any 
difference at all.  What I mean is something like this:

        Submit enough URBs to account for 512 KB of data, without
        waiting for anything to finish.

        Thereafter, each time an URB completes submit an additional URB, 
        until all the data has been queued.

This will practically eliminate all the overhead, leaving nothing but 
actual wire speed in the equation.

Alan Stern



-------------------------------------------------------
This SF.net email is sponsored by: IBM Linux Tutorials.
Become an expert in LINUX or just sharpen your skills.  Sign up for IBM's
Free Linux Tutorials.  Learn everything from the bash shell to sys admin.
Click now! http://ads.osdn.com/?ad_id=1278&alloc_id=3371&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to