mac80211: improve minstrel_ht performance by reducing the impact of slow sampling
authorFelix Fietkau <nbd@openwrt.org>
Sun, 7 Mar 2010 17:00:43 +0000 (17:00 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Sun, 7 Mar 2010 17:00:43 +0000 (17:00 +0000)
SVN-Revision: 20038

package/mac80211/patches/560-minstrel_ht.patch

index bc50ca67e27b66deb4f46122ed9e5f62ffc1590b..9fa9e05c526fcb70fa886e6f7ba41baf3d97b115 100644 (file)
@@ -68,7 +68,7 @@
  
 --- /dev/null
 +++ b/net/mac80211/rc80211_minstrel_ht.c
  
 --- /dev/null
 +++ b/net/mac80211/rc80211_minstrel_ht.c
-@@ -0,0 +1,800 @@
+@@ -0,0 +1,807 @@
 +/*
 + * Copyright (C) 2010 Felix Fietkau <nbd@openwrt.org>
 + *
 +/*
 + * Copyright (C) 2010 Felix Fietkau <nbd@openwrt.org>
 + *
 +      int cur_prob, cur_prob_tp, cur_tp, cur_tp2;
 +      int group, i, index;
 +
 +      int cur_prob, cur_prob_tp, cur_tp, cur_tp2;
 +      int group, i, index;
 +
++      mi->sample_slow = 0;
 +      mi->sample_count = 0;
 +      mi->max_tp_rate = 0;
 +      mi->max_tp_rate2 = 0;
 +      mi->sample_count = 0;
 +      mi->max_tp_rate = 0;
 +      mi->max_tp_rate2 = 0;
 +      if (!mr->retry_updated)
 +              minstrel_calc_retransmit(mp, mi, index);
 +
 +      if (!mr->retry_updated)
 +              minstrel_calc_retransmit(mp, mi, index);
 +
-+      if (rtscts)
++      if (mr->probability < MINSTREL_FRAC(20, 100))
++              rate->count = 2;
++      else if (rtscts)
 +              rate->count = mr->retry_count_rtscts;
 +      else
 +              rate->count = mr->retry_count;
 +              rate->count = mr->retry_count_rtscts;
 +      else
 +              rate->count = mr->retry_count;
 +       * if the link is working perfectly.
 +       */
 +      if (minstrel_get_duration(sample_idx) >
 +       * if the link is working perfectly.
 +       */
 +      if (minstrel_get_duration(sample_idx) >
-+          minstrel_get_duration(mi->max_tp_rate) &&
-+          mr->sample_skipped < 10)
-+              goto next;
++          minstrel_get_duration(mi->max_tp_rate)) {
++          if (mr->sample_skipped < 10)
++                      goto next;
++
++              if (mi->sample_slow++ > 2)
++                      goto next;
++      }
 +
 +      return sample_idx;
 +
 +
 +      return sample_idx;
 +
 +}
 --- /dev/null
 +++ b/net/mac80211/rc80211_minstrel_ht.h
 +}
 --- /dev/null
 +++ b/net/mac80211/rc80211_minstrel_ht.h
-@@ -0,0 +1,120 @@
+@@ -0,0 +1,121 @@
 +/*
 + * Copyright (C) 2010 Felix Fietkau <nbd@openwrt.org>
 + *
 +/*
 + * Copyright (C) 2010 Felix Fietkau <nbd@openwrt.org>
 + *
 +      u8 sample_wait;
 +      u8 sample_tries;
 +      u8 sample_count;
 +      u8 sample_wait;
 +      u8 sample_tries;
 +      u8 sample_count;
++      u8 sample_slow;
 +
 +      /* current MCS group to be sampled */
 +      u8 sample_group;
 +
 +      /* current MCS group to be sampled */
 +      u8 sample_group;