Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 29 Oct 2012 10:52:55 -0700
From:      Adrian Chadd <adrian@freebsd.org>
To:        PseudoCylon <moonlightakkiy@yahoo.ca>
Cc:        FreeBSD Net <freebsd-net@freebsd.org>, freebsd-wireless@freebsd.org, freebsd-arch@freebsd.org
Subject:   Re: request for help: 'fixing' the 802.11 TX path
Message-ID:  <CAJ-Vmo=9LE8AmLH8Ri0H4CGZBhGoSccPweXwyYVjmmaQnkM2Tw@mail.gmail.com>
In-Reply-To: <CAFZ_MY%2BZ-wtdqtTcqH2jKkpn=8nZatJ5qxp0oRpvXVietGwAmQ@mail.gmail.com>
References:  <CAFZ_MYL3v%2BhAea5RaBL4i9o_JjN6_u66znmXXcPsh11L7hHYEg@mail.gmail.com> <CAJ-Vmok5vJNYUbsUuk_Ps=7oLvpJutuyDZ7279bft1qYiYmeTA@mail.gmail.com> <508E50A3.1030008@networx.ch> <CAFZ_MY%2BZ-wtdqtTcqH2jKkpn=8nZatJ5qxp0oRpvXVietGwAmQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
The problem with this is that fragments need to be handed as an entire
list to the driver.

ath(4) looks ahead to the next fragment, calculates the rate, and then
adds that to the NAV of the previous frame.

So yeah what I'm thinking about for now is something like the following:

* say that wifi drivers have to move to if_transmit();
* "abuse" if_transmit() semantics to assume a m_nextpkt chain of mbufs
is a fragment list for a single frame;
* for now, figure out why the hell the ath(4) TX taskqueue setup is
providing crappy throughput and fix _that_;
* then migrate the net80211 TX to a taskqueue;
* .. and then just undo the ath(4) TX taskqueue since now TX is
serialised by if_transmit() inside the net80211 TX taskqueue.

There are other things to do, mostly surrounding fixing up the power
save queue handling to repopulate the queue packet-by-packet, rather
than doing if_snd gymnastics.

Once that's done, we can look at ways to implement serialisation
besides just using a taskqueue - eg, using the running/not-running
flag idea you've suggested.

The big problem here is that once TX completion occurs, drivers kick
off new TX. Now, if all TX is triggered by a frame TX, the TX will
stall until the next frame is attempted. What we'd have to do is tell
the drivers how to 'kick' the net80211 stack TX again.




Adrian



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-Vmo=9LE8AmLH8Ri0H4CGZBhGoSccPweXwyYVjmmaQnkM2Tw>