A-MPDU transmission in net80211 on FreeBSD 8

Alexander Egorenkov egorenar at googlemail.com
Sun Feb 14 20:30:28 UTC 2010


Wow, 160-180 Mb/s. That's great :-)

No, it's HT40 but my AP is not very good, it sends to me only A-MSDUs but no
A-MPDUs (don't know why, i guess because it's cheap), and there are many
WLANs in my neighbourhood in 2.4GHZ and no WLANs in 5GHZ but unfortunately i
have an 2GHZ only AP. Furthermore, i don't have any documentation about the
Ralink chip i have, only Linux source code from Ralink  which i study in
order to learn how the device works :-) But it's OK, i'm making progress.

For which devices did you develop 802.11n drivers ? And what AP did you use
in your tests ?

Alex.

On Sun, Feb 14, 2010 at 8:57 PM, Sam Leffler <sam at errno.com> wrote:

> That's great to hear.  I take it this is HT20?  I believe you can get 40-60
> Mb/s @ MCS15 w/o AMPDU and 80-100 Mb/s w/ AMPDU.  In HT40 I've gotten
> 160-180 Mb/s for TCP netperf (5GHz) and 220+ Mb/s for unidirectional streams
> (netperf -t UDP_STREAM).  Note that once you get to these higher rates
> things like TCP window sizes become important and doing things like TSO in
> s/w can give noticeable speed boosts.
>
>        Sam
>
> Alexander Egorenkov wrote:
>
>> Hi,
>>
>> thanks for your help, I implemented A-MPDU Tx in my Ralink driver now and
>> it works very good.
>> I have average Tx rate about 4.5~5 MBytes/s now :-) The Ralink chip that i
>> have implements the frame queue in hardware so i had only to assign sequence
>> numbers, set BA window size and MPDU density and it worked, lucky me :-)
>>
>> Alex.
>>
>> On Sun, Jan 31, 2010 at 8:20 PM, Sam Leffler <sam at errno.com <mailto:
>> sam at errno.com>> wrote:
>>
>>    Alexander Egorenkov wrote:
>>
>>        Why doesn't 802.11 stack assign sequence numbers to A-MPDU frames ?
>>
>>
>>    Because if net80211 does the assignment it may be wrong.  As the
>>    comment says, if tx aggregation causes frames to be q'd above the
>>    h/w then by the time they are sent OTA the pre-assigned seq# may be
>>    invalidated by other frames going out ahead of it.
>>
>>
>>        When sequence numbers are not assigned to A-MPDU frames, then BA
>>        doesn't work with my AP.
>>        I tried to assign sequence numbers to A-MPDU frames in my device
>>        driver and then BAs worked
>>        with my AP.
>>
>>
>>    That is what the comment says to do.
>>
>>
>>        And what is meant by aggregation queue ? Where is that queue anf
>>        how do i use it ?
>>
>>
>>    The aggregation q is the mechanism used to hold frames waiting for
>>    additional frames to aggregated into an A-MSDU/A-MPDU.  The queue is
>>    typically wherever the aggregation work is done.  Some devices do
>>    this in h/w, others require the host handle this.  When done in the
>>    host it can be done in the driver or above.  The intent has always
>>    been to have net80211 implement tx aggregation that a driver can
>>    fallback on but I never did the work.  All the 11n drivers I've done
>>    have either handled tx aggregation in h/w or in the driver.
>>
>>
>>        Thanks.
>>
>>
>>        On Sun, Jan 31, 2010 at 4:43 AM, Sam Leffler <sam at errno.com
>>        <mailto:sam at errno.com> <mailto:sam at errno.com
>>
>>        <mailto:sam at errno.com>>> wrote:
>>
>>           Alexander Egorenkov wrote:
>>
>>               Sorry, i posted the wrong comment.
>>               Here is the comment which i don't understand:
>>
>>               /*
>>                           * NB: don't assign a sequence # to potential
>>                           * aggregates; we expect this happens at the
>>                           * point the frame comes off any aggregation q
>>                           * as otherwise we may introduce holes in the
>>                           * BA sequence space and/or make window accouting
>>                           * more difficult.
>>                           *
>>                           * XXX may want to control this with a driver
>>                           * capability; this may also change when we pull
>>                           * aggregation up into net80211
>>                */
>>
>>               Thanks.
>>
>>
>>           What is unclear?
>>
>>                  Sam
>>
>>
>>
>>               On Wed, Jan 27, 2010 at 8:04 PM, Alexander Egorenkov <
>>               egorenar at googlemail.com <mailto:egorenar at googlemail.com>
>>        <mailto:egorenar at googlemail.com
>>
>>        <mailto:egorenar at googlemail.com>>> wrote:
>>
>>                   Hi,
>>
>>                   i'm implementing a device driver for a 802.11n NIC under
>>                   FreeBSD 8
>>                   und experimented with A-MPDU transmission. I looked into
>>                   net80211 code
>>                   and there is some code which implements this feature
>>        but it
>>                   worked not very
>>                   well for me.
>>                   I noticed e.g. that sequence numbers are not assigned to
>>                   A-MPDU frames
>>                   and found this comment in file ieee80211_output.c :
>>
>>
>>                   /*
>>                           * Check if A-MPDU tx aggregation is setup or
>>        if we
>>                           * should try to enable it.  The sta must be
>>        associated
>>                           * with HT and A-MPDU enabled for use.  When
>>        the policy
>>                           * routine decides we should enable A-MPDU we
>>        issue an
>>                           * ADDBA request and wait for a reply.  The
>>        frame being
>>                           * encapsulated will go out w/o using A-MPDU,
>>        or possibly
>>                           * it might be collected by the driver and
>>                   held/retransmit.
>>                           * The default ic_ampdu_enable routine handles
>>        staggering
>>                           * ADDBA requests in case the receiver NAK's
>>        us or we are
>>                           * otherwise unable to establish a BA stream.
>>                    */
>>
>>                   Can somebody elaborate this description to me please.
>>
>>                   Thanks.
>>
>>                   ALex.
>>
>>
>>               _______________________________________________
>>               freebsd-net at freebsd.org <mailto:freebsd-net at freebsd.org>
>>        <mailto:freebsd-net at freebsd.org
>>        <mailto:freebsd-net at freebsd.org>> mailing
>>
>>               list
>>               http://lists.freebsd.org/mailman/listinfo/freebsd-net
>>               To unsubscribe, send any mail to
>>               "freebsd-net-unsubscribe at freebsd.org
>>        <mailto:freebsd-net-unsubscribe at freebsd.org>
>>               <mailto:freebsd-net-unsubscribe at freebsd.org
>>        <mailto:freebsd-net-unsubscribe at freebsd.org>>"
>>
>>
>>
>>
>>
>>
>>
>


More information about the freebsd-net mailing list