From: Peter Seiderer <ps.report@gmx.net>
To: Sebastian Gottschall <s.gottschall@dd-wrt.com>
Cc: Petrosilius <petrosilius@posteo.de>,
Koen Vandeputte <koen.vandeputte@citymesh.com>,
linux-wireless@vger.kernel.org
Subject: Re: [Bugreport] ath9k dynack not working/low performance on 5 & 10MHz Bandwidth
Date: Fri, 9 Jul 2021 00:02:21 +0200 [thread overview]
Message-ID: <20210709000221.59899317@gmx.net> (raw)
In-Reply-To: <b98ffbe2-7995-9783-c74f-af1b5f32f575@dd-wrt.com>
Hello *,
On Tue, 22 Jun 2021 12:40:31 +0200, Sebastian Gottschall <s.gottschall@dd-wrt.com> wrote:
> just some cents from me. i modified the algorithm a long time ago since
> the dynack way ath9k was going was not correct.
> i will look if it can make a patch out of my experiences, but dont
> expect it within the next 2 days.
>
> Am 22.06.2021 um 12:12 schrieb Petrosilius:
> > On 22.06.21 11:54, Koen Vandeputte wrote:
> >> On 18.06.21 13:13, Petrosilius wrote:
> >>> Hello Lorenzo Bianconi,
> >>>
> >>> we are running a set of R11e-2HPnD devices and having trouble getting
> >>> dynack working properly.
> >>> Setup:
> >>> * linux-5.4.123
> >>> * OpenWRT (current development branch) with wireless backports-5.10.34-1
> >>> * distance 2m between ap and sta
> >>> * Low ambient noise wifi environment
> >>> We experienced some non working dynack or low performance in the
> >>> connection due to too high calculated ackto's.
> >>>
> >>> Here is a ath9k debug output example for a non working dynack @ 10Mhz
> >>> BW:
> >>>
> >>> Wed Jun 2 19:08:50 2021 kern.debug kernel: [ 400.500427] ath: phy0:
> >>> {48:8f:5a:3c:bb:03} tx sample 44905341 [dur 8720][h 29-t 30]
> >>> Wed Jun 2 19:08:50 2021 kern.debug kernel: [ 400.500437] ath: phy0:
> >>> ack_ts 44844835 st_ts 44905341 st_dur 8720 [17-29]
> >>> Wed Jun 2 19:08:50 2021 kern.debug kernel: [ 400.500445] ath: phy0:
> >>> ack_ts 44923425 st_ts 44905341 st_dur ackto.tar8720 [18-29]
> >>> Wed Jun 2 19:08:50 2021 kern.debug kernel: [ 400.554642] ath: phy0: rx
> >>> sample 44977693 [h 18-t 20]
> >>> Wed Jun 2 19:08:50 2021 kern.debug kernel: [ 400.554701] ath: phy0:
> >>> {48:8f:5a:3c:bb:03} tx sample 44964984 [dur 6032][h 30-t 31]
> >>> Wed Jun 2 19:08:50 2021 kern.debug kernel: [ 400.554710] ath: phy0:
> >>> ack_ts 44923425 st_ts 44964984 st_dur 6032 [18-30]
> >>> Wed Jun 2 19:08:50 2021 kern.debug kernel: [ 400.554718] ath: phy0:
> >>> ack_ts 44977693 st_ts 44964984 st_dur 6032 [19-30]
> >>> Wed Jun 2 19:08:50 2021 kern.debug kernel: [ 400.577890] ath: phy0: rx
> >>> sample 45000939 [h 19-t 21]
> >>> Wed Jun 2 19:08:50 2021 kern.debug kernel: [ 400.577946] ath: phy0:
> >>> {48:8f:5a:3c:bb:03} tx sample 44998471 [dur 912][h 31-t 32]
> >>> Wed Jun 2 19:08:50 2021 kern.debug kernel: [ 400.577956] ath: phy0:
> >>> ack_ts 44977693 st_ts 44998471 st_dur 912 [19-31]
> >>> Wed Jun 2 19:08:50 2021 kern.debug kernel: [ 400.577964] ath: phy0:
> >>> ack_ts 45000939 st_ts 44998471 st_dur 912 [20-31]
> >>>
> >>> THe above output is generated in dynack.c by
> >>>
> >>> ath_dbg(ath9k_hw_common(ah), DYNACK,
> >>> "ack_ts %u st_ts %u st_dur %u [%u-%u]\n",
> >>> ack_ts, st_ts->tstamp, st_ts->dur,
> >>> da->ack_rbf.h_rb, da->st_rbf.h_rb);
> >>>
> >>> The ackto is afterwards calculated by
> >>>
> >>> if (ack_ts > st_ts->tstamp + st_ts->dur) {
> >>> ackto = ack_ts - st_ts->tstamp - st_ts->dur;
> >>>
> >>> Filling in the values of the first sample:
> >>>
> >>> (ack_ts > st_ts->tstamp + st_ts->dur) ?
> >>> (44844835 > 44905341+8720) ?
> >>> (44844835 > 44914061) ? ... not given
> >>>
> >>> Therefore a new ackto is not calculated and i can also see that in the
> >>> ack_to file:
> >>>
> >>> 600 A
> >>> 600 A
> >>> 600 A
> >>> ...
> >>>
> >>> These look like the default values to me (and do not change), but
> >>> ath_dynack_get_max_to() should return 750 A for our 10MHz BW case - this
> >>> looks also suspecious to me.
> >>>
> >>> For 5 MHz bandwidth there is a ackto calculated (~382 A, looks a bit too
> >>> high to me) but the performance is way below expectation (<1MBit)
> >>> For 20 MHz bandwidth there is a ackto calculated (51 A) and the
> >>> performance is fitting the expectation.
> >>> If you want to take a look at the logs for each of these cases for ap
> >>> and sta, you can download them here:
> >>> https://cloud.hs-augsburg.de/s/eworxkJoL6JXYzZ
> >>>
> >>> Did anyone else experience such a behaviour on non 20MHz Channels or
> >>> does anyone have an idea on where this behaviour might originate from?
> >>> I am not experienced in the ath9k driver code, but a uneducated guess
> >>> might be that the ring buffer where the dynack algorithm is taking its
> >>> frame-samples from is not behaving as expected for the 5&10MHz case.
> >>>
> >>> regards,
> >>> julian dorner
> >> Are you stressing the link?
> >> I'll try to simulate this later on
> >>
> >> Regards,
> >>
> >> Koen
> >>
> > Hi Koen,
> >
> > we didnt stress the link that much.
> >
> > There was only SSH from the ap to the sta running to get access to the sta.
> >
> > regards,
> >
> > Julian
> >
> >
Did observe same/similar problem, in my case with IBSS mode and three nodes/
stations A, B, C. IP traffic only between A, B. Node C is 'passive' (sending
only beacons and broadcasts), but the current algorithm keeps ackto at 600
(no update of the ackto value for node/station C - added an debugfs entry
ack_to_detailed dumping the ackto values per station which are evaluated
in ath_dynack_compute_ackto() where the highest value wins).
Fixed it by setting the initial ackto value to zero for new nodes/stations:
diff --git a/drivers/net/wireless/ath/ath9k/dynack.c b/drivers/net/wireless/ath/ath9k/dynack.c
index fbeb4a739..ebf7800bd 100644
--- a/drivers/net/wireless/ath/ath9k/dynack.c
+++ b/drivers/net/wireless/ath/ath9k/dynack.c
@@ -235,7 +235,7 @@ void ath_dynack_sample_tx_ts(struct ath_hw *ah, struct sk_buff *skb,
struct ath_node *an;
an = (struct ath_node *)sta->drv_priv;
- an->ackto = -1;
+ an->ackto = 0; /* do not vote for ackto until real value is known */
}
da->lto = jiffies + LATEACK_DELAY;
}
@@ -323,7 +323,7 @@ void ath_dynack_node_init(struct ath_hw *ah, struct ath_node *an)
{
struct ath_dynack *da = &ah->dynack;
- an->ackto = da->ackto;
+ an->ackto = 0; /* do not vote for ackto until real value is known */
spin_lock_bh(&da->qlock);
list_add_tail(&an->list, &da->nodes);
@@ -368,7 +368,7 @@ void ath_dynack_reset(struct ath_hw *ah)
da->ackto = ath_dynack_get_max_to(ah);
list_for_each_entry(an, &da->nodes, list)
- an->ackto = da->ackto;
+ an->ackto = 0; /* do not vote for ackto until real value is known */
/* init acktimeout */
ath_dynack_set_timeout(ah, da->ackto);
Another observation is that the initial/default ackto value is dependent on
the order of the interface configure commands, e.g.:
$ iw phy0 set distance auto
$ iw wlan0 set type ibss
$ ifconfig wlan0 10.11.0.3 up
$ iw wlan0 ibss join test-ibss1 5180 1a:2b:3c:4d:5e:6f
results in an initial ackto value of 300,
$ iw wlan0 set type ibss
$ ifconfig wlan0 10.11.0.3 up
$ iw wlan0 ibss join test-ibss1 5180 1a:2b:3c:4d:5e:6f
$ iw phy0 set distance auto
results in an initial ackto value of 600...
Regards,
Peter
next prev parent reply other threads:[~2021-07-08 22:02 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-18 11:13 [Bugreport] ath9k dynack not working/low performance on 5 & 10MHz Bandwidth Petrosilius
2021-06-22 9:54 ` Koen Vandeputte
2021-06-22 10:12 ` Petrosilius
2021-06-22 10:40 ` Sebastian Gottschall
2021-06-22 11:54 ` Koen Vandeputte
2021-07-08 22:02 ` Peter Seiderer [this message]
2021-06-22 11:52 ` Koen Vandeputte
2021-06-22 11:53 ` Petrosilius
2021-06-22 12:03 ` Koen Vandeputte
2021-06-22 18:54 ` Petrosilius
2021-06-22 21:01 ` Koen Vandeputte
2021-07-13 14:34 ` Koen Vandeputte
2021-07-14 5:38 ` Sebastian Gottschall
2021-11-09 11:55 ` petrosilius
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=20210709000221.59899317@gmx.net \
--to=ps.report@gmx.net \
--cc=koen.vandeputte@citymesh.com \
--cc=linux-wireless@vger.kernel.org \
--cc=petrosilius@posteo.de \
--cc=s.gottschall@dd-wrt.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;
as well as URLs for NNTP newsgroup(s).