Thread (1 message) 1 message, 1 author, 2011-05-03

Re: carl9170.ko RX - DMA, TX - COPY.

From: Christian Lamparter <chunkeey@googlemail.com>
Date: 2011-05-03 19:22:24

On Tuesday 03 May 2011 17:41:49 Andrew V. Stepanov wrote:
On Tue, May 3, 2011 at 11:18 PM, Christian Lamparter
[off-list ref] wrote:
quoted
(readded ML -  KEEP IT in your replies/use reply all)
quoted
quoted
quoted
carl9170.ko shows only 16 MBit/sec emit speed from kernel space,
without touching user space.

Other driver rt3070sta.ko (another USB wifi device) shows 166Mb/sec.
The staging rt3070sta driver is no more, for a comparison you would
have to use rt2800usb.
quoted
At this time 'top' command shows 100 % CPU load by  "kpktgend_0"
thread: 2477 root      20   0     0    0    0 R 94.8  0.0   6:10.23
kpktgend_0

I concluded that carl9170.ko doesn't uses DMA.
Also, in source code drivers/net/wireless/ath/carl9170, i didn't find
DMA functions.
That's because the USB subsystem takes care of that entirely, so
unless your musb ehci highspeed host does PIO because of
incompatibility, there's no "manual copy" in the TX path [except in
cases where there's not enough headroom/tailroom, or a second virtual
interface, etc...].
I believe my musb host support HIGH SPEED protocol.
True, but the USB-core in the device[AR9170] is a little bit picky, Also
users have told me that they had problems in "low-power" conditions.
Which is not that unlikely and maybe one of the reasons AR9170 was
replaced so quickly. [Note: some vendors [Unex?] can sell you other
solutions which have some nifty protocol offload capabilities, so why
not get one of those for the setup instead?]
I'm looking for any solutions that capable to emit with 8MBytes/sec
speed from DDR2 from my board.
Wait, wait wait... haven't you said in your previous mail that a USB 2.0
flash stick "maxed" at just 6MB/s? I don't think you will come anywhere
close to 8MB/s with this setup then, unless you can swap the USB WIFI
for a AHB/PCI(e) device and even it might struggle.
Can you give me more information about this solutions ?
Well, dnua-93f for example, however I doubt it will do better than 6MB/s
in the same setup [also note: this is a 1x1 dongle]. So, you'll have to
do some "research" first this time...
quoted
quoted
rt3070sta.ko - also shows up to 6Mbytes/sec output throughput on this
board.
Again: rt3070sta is gone/obsolete, test with rt2800usb instead!
I have tested all tree drivers:

[...]
rt2800usb - from compat-wireless

All drivers shows poor performance even on Intel platform
(6 Mbytes/sec).
Uh, last time I checked I had no problems getting 80Mbit TCP tp out of
a WUSB600 (rt3070, I think?) with an old Pentium M laptop. Maybe you
should contact Ivo/Helmut about the "poor" performance.
quoted
quoted
carl9170.ko - shows only 2 Mbytes/sec output throughput with 100%
CPU utilization (kpktgend_0 thread).
Well, looks like you will have to enable profiling to find the
bottleneck. Is oprofile available for your target, or are there any
other profiling tools you can use [there should be some, given that you
have a DEV board]?
I can compile kernel with any configuration.
I have board http://support.spectrumdigital.com/boards/evmdm365/reve/
Ok? So what are you waiting for? Get your profiling tool working and 
look for the bottleneck, you certainly can't miss it! Good Luck!

Oh, just a sec, before you start: there's a possibility that the attached 
patch [below the cut line] from a different user helps a bit as well.

Regards,
     Chr
---
diff --git a/drivers/net/wireless/ath/carl9170/usb.c 
b/drivers/net/wireless/ath/carl9170/usb.c
index 2fb53d0..b5e73ae 100644
--- a/drivers/net/wireless/ath/carl9170/usb.c
+++ b/drivers/net/wireless/ath/carl9170/usb.c
@@ -485,7 +485,7 @@ static int carl9170_usb_send_rx_irq_urb(struct ar9170 *ar)
 
 	usb_fill_int_urb(urb, ar->udev, usb_rcvintpipe(ar->udev,
 			 AR9170_USB_EP_IRQ), ibuf, AR9170_USB_EP_CTRL_MAX,
-			 carl9170_usb_rx_irq_complete, ar, 1);
+			 carl9170_usb_rx_irq_complete, ar, 10);
 
 	urb->transfer_flags |= URB_FREE_BUFFER;
 
@@ -614,7 +614,7 @@ int __carl9170_exec_cmd(struct ar9170 *ar, struct 
carl9170_cmd *cmd,
 
 	usb_fill_int_urb(urb, ar->udev, usb_sndintpipe(ar->udev,
 		AR9170_USB_EP_CMD), cmd, cmd->hdr.len + 4,
-		carl9170_usb_cmd_complete, ar, 1);
+		carl9170_usb_cmd_complete, ar, 10);
 
 	if (free_buf)
 		urb->transfer_flags |= URB_FREE_BUFFER;
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help