From: Felix Fietkau <nbd@nbd.name>
To: Johannes Berg <johannes@sipsolutions.net>,
Benjamin Beichler <Benjamin.Beichler@uni-rostock.de>
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 14:00:48 +0200 [thread overview]
Message-ID: <3a4bcfc7-1bd3-b2a0-5341-3aec0f5e44b4@nbd.name> (raw)
In-Reply-To: <5e9323647bfc25cf4e09f107348a4e79e9d5c371.camel@sipsolutions.net>
On 21.04.23 13:13, Johannes Berg wrote:
> 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"?
No, 'internal' is the correct value. The name is confusing though - I
intended it to be short for 'initalized', but it should probably be
renamed to 'valid' or something like that.
- Felix
next prev parent reply other threads:[~2023-04-21 12:01 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
2023-04-21 11:51 ` Benjamin Beichler
2023-04-21 12:00 ` Felix Fietkau [this message]
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=3a4bcfc7-1bd3-b2a0-5341-3aec0f5e44b4@nbd.name \
--to=nbd@nbd.name \
--cc=Benjamin.Beichler@uni-rostock.de \
--cc=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
--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