From: Johannes Berg <johannes@sipsolutions.net>
To: "John W. Linville" <linville@tuxdriver.com>
Cc: bloat-devel@lists.bufferbloat.net,
linux-wireless@vger.kernel.org,
"Nathaniel J. Smith" <njs@pobox.com>
Subject: Re: [RFC] mac80211: implement eBDP algorithm to fight bufferbloat
Date: Thu, 17 Feb 2011 09:31:09 +0100 [thread overview]
Message-ID: <1297931469.3750.9.camel@jlt3.sipsolutions.net> (raw)
In-Reply-To: <1297907356-3214-1-git-send-email-linville@tuxdriver.com>
On Wed, 2011-02-16 at 20:49 -0500, John W. Linville wrote:
> @@ -212,6 +216,11 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
> if (memcmp(hdr->addr2, sta->sdata->vif.addr, ETH_ALEN))
> continue;
>
> + atomic_dec(&sta->sdata->enqueued);
Note that TX status isn't reliable under any circumstances. Many drivers
will reliably return the SKB if it was enqueued correctly to the device,
but that may already fail (failure to allocate URBs, DMA memory etc.) In
this case, the counter will continually be too high, leading the code
below to drop many more packets than necessary. This is what I was
referring to earlier :-)
> @@ -1323,6 +1325,20 @@ static int __ieee80211_tx(struct ieee80211_local *local,
>
> sdata = vif_to_sdata(info->control.vif);
>
> + /* test for queue admission qualifications */
> + tserv_ns_avg = ewma_read(&sdata->tserv_ns_avg);
> + /* constants 2 msec and offset 5 should be tunable? */
> + max_enqueued = 2 * NSEC_PER_MSEC / tserv_ns_avg + 5;
> + if (atomic_read(&sdata->enqueued) > max_enqueued) {
> + /* silently drop */
> + dev_kfree_skb(skb);
> + return IEEE80211_TX_OK;
> + }
As Nathaniel pointed out, this should instead stop the queue to give
normal QoS mechanisms a chance (this one packet can be kept for later,
or transmitted anyway, or the code to test all this can be after the
packet is sent).
However, since "sdata->enqueued" will drift as explained above, this
isn't feasible anyhow.
> + /* timestamp queue entry and increment queue length */
> + skb->tstamp = ktime_get();
> + atomic_inc(&sdata->enqueued);
Additionally, this assumes that tx() cannot fail -- it can until my void
patch.
Sorry, this approach just won't work because we don't have perfect skb
accounting across the stack.
johannes
next prev parent reply other threads:[~2011-02-17 8:31 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1297619803-2832-1-git-send-email-njs@pobox.com>
2011-02-17 1:49 ` John W. Linville
2011-02-17 3:31 ` Ben Greear
2011-02-17 4:26 ` Nathaniel Smith
2011-02-17 8:31 ` Johannes Berg [this message]
2011-02-18 21:21 ` [RFC v2] " John W. Linville
2011-02-19 3:44 ` Nathaniel Smith
2011-02-21 18:47 ` John W. Linville
2011-02-21 23:26 ` Nathaniel Smith
2011-02-23 22:28 ` John W. Linville
2011-02-25 18:21 ` Nathaniel Smith
2011-02-25 18:27 ` Nathaniel Smith
2011-02-20 0:37 ` Nathaniel Smith
2011-02-20 0:51 ` Jim Gettys
2011-02-20 15:24 ` Dave Täht
2011-02-21 18:52 ` John W. Linville
2011-02-21 15:28 ` Johannes Berg
2011-02-21 16:12 ` Jim Gettys
2011-02-21 19:15 ` John W. Linville
2011-02-21 19:06 ` John W. Linville
2011-02-21 19:29 ` [RFC v2] mac80211: implement eBDP algorithm to fight bufferbloat - AQM on hosts Jim Gettys
2011-02-21 20:26 ` [RFC v2] mac80211: implement eBDP algorithm to fight bufferbloat Tianji Li
2011-02-28 13:07 ` Johannes Berg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1297931469.3750.9.camel@jlt3.sipsolutions.net \
--to=johannes@sipsolutions.net \
--cc=bloat-devel@lists.bufferbloat.net \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=njs@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox