Search Linux Wireless

mac80211 QoS/aggregation questions, thoughts

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Ron,

I just noticed this:

        /* try to get a Qdisc from the pool */
        for (i = IEEE80211_TX_QUEUE_BEACON; i < local->hw.queues; i++)
                if (!test_and_set_bit(i, &q->qdisc_pool)) {

shouldn't that be i = IEEE80211_TX_QUEUE_BEACON + 1?

Or, more likely, something like adding
	IEEE80211_TX_QUEUE_FIRST_AMPDU = 8,

to enum ieee80211_tx_queue and using that above? This way it seems it'll
use the "beacon" queue which feels wrong, although that queue is only
"used" by mac80211 to configure IBSS beacon parameters...

To be honest, I'm totally unclear on how all this queue stuff is
supposed to work. Ivo pointed me to IEEE80211_TX_QUEUE_AFTER_BEACON
which is unused and duplicated with IEEE80211_TXCTL_SEND_AFTER_DTIM.

It seems to me that this queue stuff is mostly designed after atheros
hardware and we should be getting rid of it...

Ultimately, we only need four data queues as required by WMM and then
A-MPDU queues. Right now, you can only use 12 of the 16 queues iwl4965
hw offers (well actually 13 but I think using the BEACON queue ID is
wrong so 12 if that mistake is corrected) as far as I can tell, because
the qdisc_pool is only searched starting with IEEE80211_TX_QUEUE_BEACON
(but see above).

Here's a possible plan:

     1. move queue configuration for data queues to bss-config
        structure, it really is part of the bss configuration since it
        is mandated by the AP
     2. get rid of IEEE80211_TX_QUEUE_BEACON, it isn't used in mac80211
        and it's not hardware-independent, not all hardware actually
        uses a queue for beacons (b43 for example does beaconing
        differently), those drivers that do use a queue will have to do
        that internally. Also, the one place where it is used is the
        queue configuration for IBSS beacons, but that somewhat bogus
        anyway since we never reset that should we go back into AP mode
        after being in IBSS! Hence, I think the driver should handle
        that when an interface is brought up. Ivo, any comments?
     3. get rid of IEEE80211_TX_QUEUE_AFTER_BEACON, we have
        IEEE80211_TXCTL_SEND_AFTER_DTIM now and that is
        hardware-independent
     4. remove IEEE80211_TX_QUEUE_SVP, it's something strange and
        atheros specific
     5. remove IEEE80211_TX_QUEUE_DATA4, only rt61pci uses that and that
        use is strange, Ivo? We never submit frames to that queue...

This would leave us with the regular WMM four data queues. When hardware
announces more than four queues we would assume that the remaining
queues are usable for aggregation so that drivers for hardware that
needs a beacon queue (for example) would have to subtract that from the
number of available queues announced to mac80211.

An alternative that allows us to utilize hardware with more queues fully
w/o aggregation would be to have the drivers declare 'regular' and
'ampdu' queues in separate fields. Then, we'd be able to write the
multiqueue netdev support in a way that allows registers a queue for
each 'regular' queue.

That would possibly allow something I've thought about earlier: letting
users configure the queues with tc(8), i.e. having some sort of fixed
qdisc that is always on top of the master netdev and that is a simple
one-to-one mapping of bands to the hw queues, but allows per-band
configuration (like pfifo's limit) that sets the queue parameters, i.e.
AIFS, CW_min/max and burst time.

The effect of this would be to sort of externalise all of WMM support
into the qdisc configuration, by default you'd have a filter attached
that does the WMM classification. Of course, when operating in STA mode,
the queue parameters cannot be changed, but that can be handled in the
qdisc.

That seems mostly sane to me, opinions? We might have to write a new tc
module to allow accessing these things (although in STA mode it's not
changeable and in AP mode hostapd wants full control), but we should be
able to dump the config anyway. Also, I'm not sure whether it is
possible to make a qdisc non-removable, but that shouldn't be too hard
to add even if it is not currently possible. The simple 'wireless fifo'
qdisc that controls the queue parameters should always be present.

Phew, enough thinking for now, I'll wait for comments.

johannes

Attachment: signature.asc
Description: This is a digitally signed message part


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux