mac80211/minstrel_ht: improve rate selection stability
Under load, otherwise stable rates can easily fluctuate because of collisions. In my tests on a clean channel, the success probability of the max throughput rate often stays somewhere between 90% and 100% under load. This can cause some unnecessary switching to lower rates. This patch improves stability by treating success probability values between 90% and 100% the same. In my tests on a 3x3 HT20 link with lots of TCP traffic, it improves the average throughput by a few mbit/s. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
d260ff12e7
commit
3e8b1eb21c
1 changed files with 10 additions and 1 deletions
|
@ -202,14 +202,23 @@ minstrel_ht_calc_tp(struct minstrel_ht_sta *mi, int group, int rate)
|
|||
struct minstrel_rate_stats *mr;
|
||||
unsigned int nsecs = 0;
|
||||
unsigned int tp;
|
||||
unsigned int prob;
|
||||
|
||||
mr = &mi->groups[group].rates[rate];
|
||||
prob = mr->probability;
|
||||
|
||||
if (mr->probability < MINSTREL_FRAC(1, 10)) {
|
||||
if (prob < MINSTREL_FRAC(1, 10)) {
|
||||
mr->cur_tp = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* For the throughput calculation, limit the probability value to 90% to
|
||||
* account for collision related packet error rate fluctuation
|
||||
*/
|
||||
if (prob > MINSTREL_FRAC(9, 10))
|
||||
prob = MINSTREL_FRAC(9, 10);
|
||||
|
||||
if (group != MINSTREL_CCK_GROUP)
|
||||
nsecs = 1000 * mi->overhead / MINSTREL_TRUNC(mi->avg_ampdu_len);
|
||||
|
||||
|
|
Loading…
Reference in a new issue