2011/6/11 Rafał Miłecki <zaj...@gmail.com>:
> 2011/6/11 Michael Büsch <m...@bues.ch>:
>> On Sat, 11 Jun 2011 22:28:00 +0200
>> Rafał Miłecki <zaj...@gmail.com> wrote:
>>
>>> 2011/4/21  <francesco.gring...@ing.unibs.it>:
>>> > Hello Michael,
>>> >
>>> > I'm doing experiments sending greedy udp traffic from a b43 station to a 
>>> > b43 access point. I have noticed that switching from 2.6.34-rc7 to 2.6.35 
>>> > the sendmsg call becomes "almost" non blocking when sending from a 
>>> > Broadcom nic while it is still as usual with other nics.
>>> >
>>> > If I load the channel with a 54Mb/s iperf stream (iperf -b54M ...) on < 
>>> > 2.6.35 I see that the application is blocked times to times when calling 
>>> > sendmsg() so that it is slowed down to the channel capabilities and 
>>> > packets are not internally dropped. Clearly they can still be lost on the 
>>> > air :-)
>>> >
>>> > With >= 2.6.35 the application is never blocked and all the packets 
>>> > exceeding the channel capabilities are internally lost by the kernel: in 
>>> > particular it is the asynchronous tx worker (b43_tx_work) that drops 
>>> > them, since it calls b43_dma_tx even if the interface has been stopped 
>>> > because the dma FIFO queue was full. Apart from packets being lost, the 
>>> > CPU load increases since packets cross all the kernel code, from 
>>> > udp_sendmsg down to b43_dma_tx even if they will be dropped.
>>> >
>>> > I don't think this is the expected behavior on Linux: I did some testing 
>>> > to check what happens with other devices and I can experience only the 
>>> > first behavior on Intel and Atheros WiFi nics as well as on Fast Ethernet 
>>> > nics (in this case I run iperf -b100M :-) independently of the kernel 
>>> > version.
>>> >
>>> > Strangely the b43 sources in 2.6.35 are really similar to those in 
>>> > 2.6.34-rc7 and the differences do not seem to justify the different 
>>> > behavior. There are also other weird observations (like qdisc never used 
>>> > in < 2.6.34-rc7) but I would like to have a first opinion from your side.
>>> >
>>> > Many thanks,
>>> > -Francesco
>>> >
>>> > P.S. what reported does not depend on the firmware version. I also tried 
>>> > a few cards (4306, 4311 and 4318) and nothing changed.
>>>
>>> I have (finally) found some time to dig into it. First of all, I
>>> reproduced this on wireless-testing (3.0-rc2) on my BCM4312. I
>>> "achieved" 34 Gb/s of UDP traffic.
>>>
>>> The problem is that we do not stop any queue. I've been transferring
>>> UDP stream for 10 seconds, and queued was not stopped even once.
>>>
>>> We stop queue when the ring is full, so I've added debugging message
>>> every time "used_slots" changes for TX ring. Over that 10 seconds the
>>> maximal value of "used_slots" was 14.
>>>
>>> Does it mean firmware lies us about transmitted packages? Any hints anyone?
>
>> I'd rather say that we are dropping packets somewhere before they even reach 
>> DMA.
>
> Weird, every problem should be reported, especially with DMAVERBOSE.
> I'll try to trace packets starting with b43_op_tx anyway.

I've added some simple
"Queuing skb prot:0x%X len:%d data:%d\n", skb->proto, skb->len, skb->data_len
to b43_op_tx.

iperf says to send UDP stream with speed 34.4 Gb/s.
dmesg | grep "4225" | grep Queuing | wc -l
gives me 90 lines (4225 is a timestamp).

So it seems something before b43 eats our packets. What any why? :|

-- 
Rafał

_______________________________________________
b43-dev mailing list
b43-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/b43-dev

Reply via email to