diff options
author | Thomas Huehn <thomas@net.t-labs.tu-berlin.de> | 2013-03-04 17:30:01 -0500 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-03-06 10:36:06 -0500 |
commit | a512d4b543ea20ec84f712f90a5229ab88a9709c (patch) | |
tree | d3c3f6354f371fff701a4b365964b155873ee544 /net/mac80211/rc80211_minstrel.c | |
parent | 52c00a37a323ded691b23538ef1181155f51aef3 (diff) |
mac80211: merge EWMA calculation of minstrel_ht and minstrel
Both rate control algorithms (minstrel and minstrel_ht) calculate
averages based on EWMA. Shift function minstrel_ewma() into
rc80211_minstrel.h and make use of it in both minstrel version.
Also shift the default EWMA level (75%) definition to the header file
and clean up variable usage.
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>
Diffstat (limited to 'net/mac80211/rc80211_minstrel.c')
-rw-r--r-- | net/mac80211/rc80211_minstrel.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/net/mac80211/rc80211_minstrel.c b/net/mac80211/rc80211_minstrel.c index eea45a2c7c35..d78f629179c7 100644 --- a/net/mac80211/rc80211_minstrel.c +++ b/net/mac80211/rc80211_minstrel.c | |||
@@ -76,7 +76,6 @@ minstrel_update_stats(struct minstrel_priv *mp, struct minstrel_sta_info *mi) | |||
76 | u32 max_tp = 0, index_max_tp = 0, index_max_tp2 = 0; | 76 | u32 max_tp = 0, index_max_tp = 0, index_max_tp2 = 0; |
77 | u32 max_prob = 0, index_max_prob = 0; | 77 | u32 max_prob = 0, index_max_prob = 0; |
78 | u32 usecs; | 78 | u32 usecs; |
79 | u32 p; | ||
80 | int i; | 79 | int i; |
81 | 80 | ||
82 | mi->stats_update = jiffies; | 81 | mi->stats_update = jiffies; |
@@ -90,14 +89,13 @@ minstrel_update_stats(struct minstrel_priv *mp, struct minstrel_sta_info *mi) | |||
90 | /* To avoid rounding issues, probabilities scale from 0 (0%) | 89 | /* To avoid rounding issues, probabilities scale from 0 (0%) |
91 | * to 18000 (100%) */ | 90 | * to 18000 (100%) */ |
92 | if (mr->attempts) { | 91 | if (mr->attempts) { |
93 | p = (mr->success * 18000) / mr->attempts; | 92 | mr->cur_prob = (mr->success * 18000) / mr->attempts; |
94 | mr->succ_hist += mr->success; | 93 | mr->succ_hist += mr->success; |
95 | mr->att_hist += mr->attempts; | 94 | mr->att_hist += mr->attempts; |
96 | mr->cur_prob = p; | 95 | mr->probability = minstrel_ewma(mr->probability, |
97 | p = ((p * (100 - mp->ewma_level)) + (mr->probability * | 96 | mr->cur_prob, |
98 | mp->ewma_level)) / 100; | 97 | EWMA_LEVEL); |
99 | mr->probability = p; | 98 | mr->cur_tp = mr->probability * (1000000 / usecs); |
100 | mr->cur_tp = p * (1000000 / usecs); | ||
101 | } | 99 | } |
102 | 100 | ||
103 | mr->last_success = mr->success; | 101 | mr->last_success = mr->success; |
@@ -542,9 +540,6 @@ minstrel_alloc(struct ieee80211_hw *hw, struct dentry *debugfsdir) | |||
542 | mp->lookaround_rate = 5; | 540 | mp->lookaround_rate = 5; |
543 | mp->lookaround_rate_mrr = 10; | 541 | mp->lookaround_rate_mrr = 10; |
544 | 542 | ||
545 | /* moving average weight for EWMA */ | ||
546 | mp->ewma_level = 75; | ||
547 | |||
548 | /* maximum time that the hw is allowed to stay in one MRR segment */ | 543 | /* maximum time that the hw is allowed to stay in one MRR segment */ |
549 | mp->segment_size = 6000; | 544 | mp->segment_size = 6000; |
550 | 545 | ||