Skip to content

Commit

Permalink
mac80211: extend minstrel's rate sampling to avoid unsampled rates
Browse files Browse the repository at this point in the history
Minstrel's decision which rate should be directly sampled within the
1st mrr stage is limited to such rates faster than the current max
throughput rate. All rates below the current max. throughput rate
are indirectly sampled via the 2nd mrr stage.
This approach leads to deprecated per rate statistics and therfore
a deprecated mrr chain setup.

This patch uses the sampling approach from minstrel_ht. A counter is
added to sum all indirect sample attempts per rate. After 20 indirect
sampling attempts the rate is directly sampled within the 1st mrr stage.
Therefore more up-to-date statistics for all rates are maintained and
used to setup the mrr chain.

Acked-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: Thomas Huehn <thomas@net.t-labs.tu-berlin.de>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  • Loading branch information
Thomas Huehn authored and Johannes Berg committed Mar 6, 2013
1 parent 8f15761 commit 1e9c27d
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 4 deletions.
13 changes: 9 additions & 4 deletions net/mac80211/rc80211_minstrel.c
Original file line number Diff line number Diff line change
Expand Up @@ -85,15 +85,17 @@ minstrel_update_stats(struct minstrel_priv *mp, struct minstrel_sta_info *mi)
if (!usecs)
usecs = 1000000;

if (mr->attempts) {
if (unlikely(mr->attempts > 0)) {
mr->sample_skipped = 0;
mr->cur_prob = MINSTREL_FRAC(mr->success, mr->attempts);
mr->succ_hist += mr->success;
mr->att_hist += mr->attempts;
mr->probability = minstrel_ewma(mr->probability,
mr->cur_prob,
EWMA_LEVEL);
mr->cur_tp = mr->probability * (1000000 / usecs);
}
} else
mr->sample_skipped++;

mr->last_success = mr->success;
mr->last_attempts = mr->attempts;
Expand Down Expand Up @@ -282,9 +284,12 @@ minstrel_get_rate(void *priv, struct ieee80211_sta *sta,
rate_sampling = true;

/* Decide if direct ( 1st mrr stage) or indirect (2nd mrr stage)
* rate sampling method should be used */
* rate sampling method should be used.
* Respect such rates that are not sampled for 20 interations.
*/
if (mrr_capable &&
msr->perfect_tx_time > mi->r[ndx].perfect_tx_time)
msr->perfect_tx_time > mi->r[ndx].perfect_tx_time &&
msr->sample_skipped < 20)
indirect_rate_sampling = true;

if (!indirect_rate_sampling) {
Expand Down
1 change: 1 addition & 0 deletions net/mac80211/rc80211_minstrel.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ struct minstrel_rate {
u32 attempts;
u32 last_attempts;
u32 last_success;
u8 sample_skipped;

/* parts per thousand */
u32 cur_prob;
Expand Down

0 comments on commit 1e9c27d

Please sign in to comment.