On Wed, 13 Feb 2002 [EMAIL PROTECTED] wrote:
> transfers for incoming data. I've already reported here performance
> problems with BULK IN on UHCI chipsets. These performance problems do
> not go away with the 2.4.18.pre9 build. Can anyone comment on the
> maturity/robustness of the ISO handling code for UHCI (for either UHCI
> driver)? I don't want to go down the path of implementing ISO if I'm
> going to have to deal with lots of driver issues at this point?

I experience somewhat similar performance problems in ISOC mode on UHCI
controllers.  I wrote a driver for a telephony device that uses ISOC
transfers to transfer audio data.  It is supposed to tx/rx 1000 times a
second a 16 byte (8 16bit slinear samples) quantity of data in each
transfer (8 * 1000 = 8000hz, or 8000 16bit slinear samples of data).  I
developed it originally on a UHCI bus (my motherboard's built in
controller).  The way it was originally done was a single tx urb and a
single rx urb.  Each of these in turn would kick another urb off in the
completion routine.  However, when doing this, I would get awful
throughput (probably half of my 1000 transfers a second) on these
transfers, so I began to ponder.  I noticed that the USB audio driver used
a sort of "double buffering" of URBs, and so I tried to implement this.  I
bumped the number of tx urbs and rx urbs up to two each, and magically I
got normal throughput. (all of this is background for what I'm about to
say)

Now, my only significant problem now is this:

Using the UHCI controllers, I get pops and gaps in the audio
data I'm transferring, like it's dropping urbs, or not getting the ISOC
transfer requests sent out onto the bus 1000 times a second, kind of like
it's skipping sending out a transfer on one of the host controller
interrupts or something crazy like that.

However:  On OHCI controllers, I have none of these problems.  Sound is
clear as a crystal (in a manner of speaking :-) ).

More data: IIRC, on the vanilla uhci.c driver, ISOC sucks.  Sucks really
badly.  Kind of funny though, 'cause I was helping somebody with writing a
driver for something that used BULK transfers, and the usb-uhci driver
kept on Oops!'ing his system (dereferencing a NULL pointer in the host
controller code) whenever he tried to initiate his transfer.  Switching to
the uhci.c driver corrected this.  Go Figure.  So both drivers are
good/bad at different things, though the usb-uhci driver seems to
perform/behave better for most cases I've seen.

I have not as yet tested the new hcd stuff in 2.5, so that is still
unknown for me (mostly because whenever I tried 2.5, something important
that I needed to boot or operate somewhat normally seemed to be broken 
so I quickly rebooted back into 2.4.17).  However, I suspect if I did
quite a bit of looking through the usb-uhci code and did a little bit of
tweaking, I could eliminate the gaps and pops from occuring with my
device.  Probably some timing issue in the driver somewhere.

Anyway, hope this helps.  By the time I get done with emails like this, I
always seem to forget something important I intended to put in, so if this
seems incomplete, or you have any questions, feel free to reply :-)

Matthew Fredrickson


_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to