From: Johannes Berg <johannes@sipsolutions.net>
To: Benjamin Beichler <Benjamin.Beichler@uni-rostock.de>,
Felix Fietkau <nbd@nbd.name>
Cc: Karthik M <quic_karm@quicinc.com>,
linux-wireless@vger.kernel.org,
Tamizh Chelvam Raja <quic_tamizhr@quicinc.com>
Subject: Re: [PATCH v1] wifi: mac80211: Initialize EWMA fail avg to 1
Date: Fri, 21 Apr 2023 13:13:09 +0200 [thread overview]
Message-ID: <5e9323647bfc25cf4e09f107348a4e79e9d5c371.camel@sipsolutions.net> (raw)
In-Reply-To: <f562b221-b702-21ac-eedf-3a428e29844d@uni-rostock.de>
On Fri, 2023-04-21 at 12:34 +0200, Benjamin Beichler wrote:
> > >
> > > So then let's say we want to fix the existing code. I can think of these
> > > possible ways:
> > >
> > > * splitting off a bit for initialized from the unsigned long
> > > (which at least for 64-bit should be OK since presumably most code
> > > using this will run on 32-bit systems too)
> > > * adding another value for it, e.g. making it u32 and adding a bool
> > > for
> > > "first value"
> > > * biasing the value, like Felix proposes, could be by 1 or -1 for
> > > example
> You forgot the possibility to introduce a separate init function, which
> boils down to a shift with an assignment statement for code, and no
> further data memory cost. Even simply extending the current init
> function (which simply always set 0) would be enough.
Sort of. Yeah I should've mentioned it, but that means you actually have
to know the first value, and track "first time usage" separately in the
user code.
Or you init to something useful at the first value, e.g. saying for
signal strength "let's assume -45dBm average if we don't know". That
doesn't seem very practical?
The behaviour of "first value inserted will init" seems sensible.
> > > As for biasing the value, couldn't that lead to a similar problem? It's
> > > clearly less likely that the end of the range is reached rather than
> > > zero, but still?
> > I don't see how it can reduce the range in any way, since the bias is
> > added to the fractional part. A range reduction would seem to imply
> > having an average value that's bigger than the maximum allowed shifted
> > input (top bits cut off), and I don't think that's possible.
> >
> It does not reduce the range, but it does not matter whether your
> internal state is 0 or 2^(-precision), the non-intuitive behavior stays
> the same.
OK I was sort of handwaving ... :-)
To have a problem, basically the +1 has to overflow the value, so that
we think that the next time around we should init, rather than add.
That means the existing average has to be 0xffff'ffff (let's take 32
bits, its easier to type). Clearly that can't happen on the first time
since then the precision bits are all 0.
But I think Felix is right (thought not sure about the reasoning) and
that cannot happen, because the add calculation does a ">>weight_rcp"
shift at the end, so there are always some top bits that are non-zero,
and _weight_rcp has to be a power of two. Now, 1 is a power of two, but
that'd be really stupid, and nobody is using it ... So I think if we
prohibit 1 for that, we're fine?
Btw, Felix, shouldn't your patch have said "bool init = !internal"?
johannes
next prev parent reply other threads:[~2023-04-21 11:13 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-17 10:02 [PATCH v1] wifi: mac80211: Initialize EWMA fail avg to 1 Karthik M
2023-04-18 13:04 ` Johannes Berg
2023-04-20 9:30 ` Benjamin Beichler
2023-04-20 10:27 ` Johannes Berg
2023-04-20 11:12 ` Benjamin Beichler
2023-04-20 12:22 ` Felix Fietkau
2023-04-20 13:00 ` Benjamin Beichler
2023-04-20 13:15 ` Felix Fietkau
2023-04-21 9:35 ` Johannes Berg
2023-04-21 9:53 ` Felix Fietkau
2023-04-21 10:34 ` Benjamin Beichler
2023-04-21 11:13 ` Johannes Berg [this message]
2023-04-21 11:51 ` Benjamin Beichler
2023-04-21 12:00 ` Felix Fietkau
2023-04-21 10:23 ` Benjamin Beichler
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=5e9323647bfc25cf4e09f107348a4e79e9d5c371.camel@sipsolutions.net \
--to=johannes@sipsolutions.net \
--cc=Benjamin.Beichler@uni-rostock.de \
--cc=linux-wireless@vger.kernel.org \
--cc=nbd@nbd.name \
--cc=quic_karm@quicinc.com \
--cc=quic_tamizhr@quicinc.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