diff options
author | Felix Fietkau <nbd@nbd.name> | 2020-12-29 18:23:29 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2021-01-03 12:56:40 +0100 |
commit | 3a12c6679eb184ca2a9a2b1266cc2d41f3f00bad (patch) | |
tree | 4c2a02dad4c0ebd8cbd90ad751841f3cedbdfd05 /package/kernel/mac80211/patches/subsys/340-mac80211-minstrel_ht-remove-old-ewma-based-rate-aver.patch | |
parent | 55e23f2c02ae95e84613ed7d1cbf8aba557b8682 (diff) | |
download | upstream-3a12c6679eb184ca2a9a2b1266cc2d41f3f00bad.tar.gz upstream-3a12c6679eb184ca2a9a2b1266cc2d41f3f00bad.tar.bz2 upstream-3a12c6679eb184ca2a9a2b1266cc2d41f3f00bad.zip |
mac80211: replace legacy minstrel with minstrel_ht, improve rate selection
Legacy minstrel is essentially unmaintained and was showing poor performance
Replace it with minstrel_ht and improve rate selection and sampling behavior
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'package/kernel/mac80211/patches/subsys/340-mac80211-minstrel_ht-remove-old-ewma-based-rate-aver.patch')
-rw-r--r-- | package/kernel/mac80211/patches/subsys/340-mac80211-minstrel_ht-remove-old-ewma-based-rate-aver.patch | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/subsys/340-mac80211-minstrel_ht-remove-old-ewma-based-rate-aver.patch b/package/kernel/mac80211/patches/subsys/340-mac80211-minstrel_ht-remove-old-ewma-based-rate-aver.patch new file mode 100644 index 0000000000..9b6a614aa8 --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/340-mac80211-minstrel_ht-remove-old-ewma-based-rate-aver.patch @@ -0,0 +1,96 @@ +From: Felix Fietkau <nbd@nbd.name> +Date: Sat, 26 Dec 2020 14:34:30 +0100 +Subject: [PATCH] mac80211: minstrel_ht: remove old ewma based rate average + code + +The new noise filter has been the default for a while now with no reported +downside and significant improvement compared to the old code. + +Signed-off-by: Felix Fietkau <nbd@nbd.name> +--- + +--- a/net/mac80211/rc80211_minstrel_ht.c ++++ b/net/mac80211/rc80211_minstrel_ht.c +@@ -769,17 +769,8 @@ minstrel_ht_calc_rate_stats(struct minst + if (unlikely(mrs->attempts > 0)) { + mrs->sample_skipped = 0; + cur_prob = MINSTREL_FRAC(mrs->success, mrs->attempts); +- if (mp->new_avg) { +- minstrel_filter_avg_add(&mrs->prob_avg, +- &mrs->prob_avg_1, cur_prob); +- } else if (unlikely(!mrs->att_hist)) { +- mrs->prob_avg = cur_prob; +- } else { +- /*update exponential weighted moving avarage */ +- mrs->prob_avg = minstrel_ewma(mrs->prob_avg, +- cur_prob, +- EWMA_LEVEL); +- } ++ minstrel_filter_avg_add(&mrs->prob_avg, ++ &mrs->prob_avg_1, cur_prob); + mrs->att_hist += mrs->attempts; + mrs->succ_hist += mrs->success; + } else { +@@ -913,10 +904,8 @@ minstrel_ht_update_stats(struct minstrel + /* Try to increase robustness of max_prob_rate*/ + minstrel_ht_prob_rate_reduce_streams(mi); + +- /* try to sample all available rates during each interval */ +- mi->sample_count *= 8; +- if (mp->new_avg) +- mi->sample_count /= 2; ++ /* try to sample half of all available rates during each interval */ ++ mi->sample_count *= 4; + + if (sample) + minstrel_ht_rate_sample_switch(mp, mi); +@@ -1040,7 +1029,7 @@ minstrel_ht_tx_status(void *priv, struct + struct ieee80211_tx_rate *ar = info->status.rates; + struct minstrel_rate_stats *rate, *rate2, *rate_sample = NULL; + struct minstrel_priv *mp = priv; +- u32 update_interval = mp->update_interval / 2; ++ u32 update_interval = mp->update_interval; + bool last, update = false; + bool sample_status = false; + int i; +@@ -1090,9 +1079,8 @@ minstrel_ht_tx_status(void *priv, struct + + switch (mi->sample_mode) { + case MINSTREL_SAMPLE_IDLE: +- if (mp->new_avg && +- (mp->hw->max_rates > 1 || +- mi->total_packets_cur < SAMPLE_SWITCH_THR)) ++ if (mp->hw->max_rates > 1 || ++ mi->total_packets_cur < SAMPLE_SWITCH_THR) + update_interval /= 2; + break; + +@@ -1832,8 +1820,7 @@ minstrel_ht_alloc(struct ieee80211_hw *h + mp->has_mrr = true; + + mp->hw = hw; +- mp->update_interval = HZ / 10; +- mp->new_avg = true; ++ mp->update_interval = HZ / 20; + + minstrel_ht_init_cck_rates(mp); + for (i = 0; i < ARRAY_SIZE(mp->hw->wiphy->bands); i++) +@@ -1853,8 +1840,6 @@ static void minstrel_ht_add_debugfs(stru + &mp->fixed_rate_idx); + debugfs_create_u32("sample_switch", S_IRUGO | S_IWUSR, debugfsdir, + &mp->sample_switch); +- debugfs_create_bool("new_avg", S_IRUGO | S_IWUSR, debugfsdir, +- &mp->new_avg); + } + #endif + +--- a/net/mac80211/rc80211_minstrel_ht.h ++++ b/net/mac80211/rc80211_minstrel_ht.h +@@ -60,7 +60,6 @@ + struct minstrel_priv { + struct ieee80211_hw *hw; + bool has_mrr; +- bool new_avg; + u32 sample_switch; + unsigned int cw_min; + unsigned int cw_max; |