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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.