umcs (4-Port-USB-serial) triggering way too much ehci IRQs
Hans Petter Selasky
hans.petter.selasky at bitfrost.no
Tue Sep 17 16:04:01 UTC 2013
On 09/17/13 17:38, Harald Schmalzbauer wrote:
> Bezüglich Hans Petter Selasky's Nachricht vom 17.09.2013 11:24
>> On 09/17/13 11:06, Harald Schmalzbauer wrote:
>>> Shall we switch to non-list-comm?
>> That's OK.
>>> Hmm, in my case, this 4-port-serial-USB-hub will be used as console
>>> concentrator. So most time it's doing nothing, just feeding tmux with
>>> consoles output. What latency are we talking about? Less than a some
>>> milliseconds should be fine.
>>> What I'm curious about is why my prolific USB-serial converter doesn't
>>> generate these high irqs.
>> Try this patch and see what happens:
>> --- umcs.c (revision 255492)
>> +++ umcs.c (local)
>> @@ -230,6 +230,7 @@
>> .bufsize = 0, /* use wMaxPacketSize */
>> .callback = &umcs7840_intr_callback,
>> .if_index = 0,
>> + .interval = 20, /* ms */
>> BTW: I see that the umcs driver shouldn't do synchronous control
>> transfers from the USB interrupt transfer callback. This should be
>> postponed into some worker thread, for example the USB explore thread.
>> See USB audio driver for an example.
> I tried your patch and it works as expected: IRQs decreased to ~64/s
> when idle/disconnected.
> One interesting thing I never measured before:
> Console connection with 115k2 via umcs and 'while ( 2>1 ) echo "---..."
> end' results in 8000 irqs/s :-( But that's also true for the prolific
> (uplcom). The latter just goes down to 0.0 irqs/s when idle.
> Doing the same with uart0 results in 1444irqs/s.
> Is it by design/unavoidable that transfering the same via USB multiplies
> by factor 5-6?
I think the adapters use very small buffers. You can try adding
".interval = 4" to the other USB configs, above the one you patched, and
see what happens. I cannot tell if you will loose characters or not.
More information about the freebsd-stable