From: Felix Fietkau <nbd@openwrt.org>
To: Thomas Huehn <thomas@net.t-labs.tu-berlin.de>,
linux-wireless@vger.kernel.org
Cc: johannes@sipsolutions.net
Subject: Re: [PATCH v2 07/10] mac80211: restructure per-rate throughput calculation into function
Date: Tue, 17 Mar 2015 09:24:04 +0100 [thread overview]
Message-ID: <5507E4A4.9020401@openwrt.org> (raw)
In-Reply-To: <1423839472-15625-8-git-send-email-thomas@net.t-labs.tu-berlin.de>
On 2015-02-13 15:57, Thomas Huehn wrote:
> This patch moves Minstrels and Minstrel-HTs per-rate throughput
> calculation (EWMA(thr)) into a dedicated function to be called.
> Therefore the variable "unsigned int cur_tp" within struct
> "minstrel_rate_stats" becomes obsolete. and is removed to free
> up its space.
>
> Signed-off-by: Thomas Huehn <thomas@net.t-labs.tu-berlin.de>
> ---
> net/mac80211/rc80211_minstrel.c | 46 +++++++++++------
> net/mac80211/rc80211_minstrel.h | 4 +-
> net/mac80211/rc80211_minstrel_debugfs.c | 12 ++---
> net/mac80211/rc80211_minstrel_ht.c | 79 ++++++++++++++++++------------
> net/mac80211/rc80211_minstrel_ht.h | 1 +
> net/mac80211/rc80211_minstrel_ht_debugfs.c | 12 ++---
> 6 files changed, 94 insertions(+), 60 deletions(-)
>
> diff --git a/net/mac80211/rc80211_minstrel.c b/net/mac80211/rc80211_minstrel.c
> index 89db6cf..28de2f7a 100644
> --- a/net/mac80211/rc80211_minstrel.c
> +++ b/net/mac80211/rc80211_minstrel.c
> @@ -69,13 +69,34 @@ rix_to_ndx(struct minstrel_sta_info *mi, int rix)
> return i;
> }
>
> +/* return current EMWA throughput */
> +int minstrel_get_tp_avg(struct minstrel_rate *mr)
> +{
> + int tp_avg, usecs;
> +
> + usecs = mr->perfect_tx_time;
> + if (!usecs)
> + usecs = 1000000;
> +
> + /* reset thr. below 10% success */
> + if (mr->stats.prob_ewma < MINSTREL_FRAC(10, 100))
> + tp_avg = 0;
You don't really need a variable, you can just do return 0 here and
reduce indentation of the line below.
> + else
> + tp_avg = MINSTREL_TRUNC(mr->stats.prob_ewma * (100000 / usecs));
> +
> + return tp_avg;
> +}
> +
> +
> +
> /* find & sort topmost throughput rates */
> static inline void
> minstrel_sort_best_tp_rates(struct minstrel_sta_info *mi, int i, u8 *tp_list)
> {
> int j = MAX_THR_RATES;
>
> - while (j > 0 && mi->r[i].stats.cur_tp > mi->r[tp_list[j - 1]].stats.cur_tp)
> + while (j > 0 && (minstrel_get_tp_avg(&mi->r[i]) >
> + minstrel_get_tp_avg(&mi->r[tp_list[j - 1]])))
Indentation seems off.
> j--;
> if (j < MAX_THR_RATES - 1)
> memmove(&tp_list[j + 1], &tp_list[j], MAX_THR_RATES - (j + 1));
> @@ -158,8 +179,7 @@ minstrel_update_stats(struct minstrel_priv *mp, struct minstrel_sta_info *mi)
> {
> u8 tmp_tp_rate[MAX_THR_RATES];
> u8 tmp_prob_rate = 0;
> - u32 usecs;
> - int i;
> + int i, tmp_cur_tp, tmp_prob_tp;
>
> for (i = 0; i < MAX_THR_RATES; i++)
> tmp_tp_rate[i] = 0;
> diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c
> index 6b07686..2a55f63 100644
> --- a/net/mac80211/rc80211_minstrel_ht.c
> +++ b/net/mac80211/rc80211_minstrel_ht.c
> @@ -312,23 +312,23 @@ minstrel_get_ratestats(struct minstrel_ht_sta *mi, int index)
> }
>
> /*
> - * Calculate throughput based on the average A-MPDU length, taking into account
> - * the expected number of retransmissions and their expected length
> + * Return current throughput based on the average A-MPDU length, taking into
> + * account the expected number of retransmissions and their expected length
> */
> -static void
> -minstrel_ht_calc_tp(struct minstrel_ht_sta *mi, int group, int rate)
> +int
> +minstrel_ht_get_tp_avg(struct minstrel_ht_sta *mi, int group, int rate)
> {
> struct minstrel_rate_stats *mrs;
> unsigned int nsecs = 0;
> - unsigned int tmp_prob_ewma;
> + unsigned int tmp_prob_ewma, tp_avg;
>
> mrs = &mi->groups[group].rates[rate];
> tmp_prob_ewma = mrs->prob_ewma;
>
> /* do not account throughput if sucess prob is below 10% */
> if (mrs->prob_ewma < MINSTREL_FRAC(10, 100)) {
> - mrs->cur_tp = 0;
> - return;
> + tp_avg = 0;
> + return tp_avg;
No need for the tp_avg variable.
> }
>
> /*
> @@ -344,7 +344,9 @@ minstrel_ht_calc_tp(struct minstrel_ht_sta *mi, int group, int rate)
> nsecs += minstrel_mcs_groups[group].duration[rate];
>
> /* prob is scaled - see MINSTREL_FRAC above */
> - mrs->cur_tp = MINSTREL_TRUNC(1000000 * ((tmp_prob_ewma * 1000) / nsecs));
> + tp_avg = MINSTREL_TRUNC(100000 * ((tmp_prob_ewma * 1000) / nsecs));
> +
> + return tp_avg;
> }
>
> /*
next prev parent reply other threads:[~2015-03-17 8:24 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-13 14:57 [PATCH v2 0/10] Improve Minstrels & Minstrel-HTs common code base & statistics Thomas Huehn
2015-02-13 14:57 ` [PATCH v2 01/10] mac80211: enhance readability of Minstrels rc_stats output Thomas Huehn
2015-02-13 14:57 ` [PATCH v2 02/10] mac80211: enhance readability of Minstrel-HTs " Thomas Huehn
2015-02-13 14:57 ` [PATCH v2 03/10] mac80211: add new Minstrel statistic output via csv Thomas Huehn
2015-03-17 8:16 ` Felix Fietkau
2015-02-13 14:57 ` [PATCH v2 04/10] mac80211: add new Minstrel-HT " Thomas Huehn
2015-03-17 8:18 ` Felix Fietkau
2015-02-13 14:57 ` [PATCH v2 05/10] mac80211: unify Minstrel & Minstrel-HTs calculation of rate statistics Thomas Huehn
2015-02-13 14:57 ` [PATCH v2 06/10] mac80211: improve Minstrel variable & function naming Thomas Huehn
2015-02-13 14:57 ` [PATCH v2 07/10] mac80211: restructure per-rate throughput calculation into function Thomas Huehn
2015-03-17 8:24 ` Felix Fietkau [this message]
2015-02-13 14:57 ` [PATCH v2 08/10] mac80211: add max. lossless throughput per rate to rc_stats Thomas Huehn
2015-03-17 8:32 ` Felix Fietkau
2015-02-13 14:57 ` [PATCH v2 09/10] mac80211: reduce calculation costs of EWMA Thomas Huehn
2015-02-13 14:57 ` [PATCH v2 10/10] mac80211: add standard deviation to Minstrels throughput statistic Thomas Huehn
2015-02-25 21:00 ` [PATCH v2 0/10] Improve Minstrels & Minstrel-HTs common code base & statistics Bastian Bittorf
2015-02-25 21:18 ` Bastian Bittorf
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=5507E4A4.9020401@openwrt.org \
--to=nbd@openwrt.org \
--cc=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
--cc=thomas@net.t-labs.tu-berlin.de \
/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).