Changeset 35847


Ignore:
Timestamp:
2013-03-02T22:00:58+01:00 (5 years ago)
Author:
nbd
Message:

mac80211: merge minstrel_ht rate control performance improvements

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/mac80211/patches/300-pending_work.patch

    r35846 r35847  
    624624  
    625625        rt2x00dev->hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN; 
     626--- a/net/mac80211/rc80211_minstrel_ht.c 
     627+++ b/net/mac80211/rc80211_minstrel_ht.c 
     628@@ -26,11 +26,11 @@ 
     629 /* Number of symbols for a packet with (bps) bits per symbol */ 
     630 #define MCS_NSYMS(bps) ((MCS_NBITS + (bps) - 1) / (bps)) 
     631  
     632-/* Transmission time for a packet containing (syms) symbols */ 
     633+/* Transmission time (nanoseconds) for a packet containing (syms) symbols */ 
     634 #define MCS_SYMBOL_TIME(sgi, syms)                                     \ 
     635        (sgi ?                                                          \ 
     636-         ((syms) * 18 + 4) / 5 :       /* syms * 3.6 us */             \ 
     637-         (syms) << 2                   /* syms * 4 us */               \ 
     638+         ((syms) * 18000 + 4000) / 5 : /* syms * 3.6 us */             \ 
     639+         ((syms) * 1000) << 2          /* syms * 4 us */               \ 
     640        ) 
     641  
     642 /* Transmit duration for the raw data part of an average sized packet */ 
     643@@ -64,9 +64,9 @@ 
     644 } 
     645  
     646 #define CCK_DURATION(_bitrate, _short, _len)           \ 
     647-       (10 /* SIFS */ +                                \ 
     648+       (1000 * (10 /* SIFS */ +                        \ 
     649         (_short ? 72 + 24 : 144 + 48 ) +               \ 
     650-        (8 * (_len + 4) * 10) / (_bitrate)) 
     651+        (8 * (_len + 4) * 10) / (_bitrate))) 
     652  
     653 #define CCK_ACK_DURATION(_bitrate, _short)                     \ 
     654        (CCK_DURATION((_bitrate > 10 ? 20 : 10), false, 60) +   \ 
     655@@ -211,7 +211,8 @@ static void 
     656 minstrel_ht_calc_tp(struct minstrel_ht_sta *mi, int group, int rate) 
     657 { 
     658        struct minstrel_rate_stats *mr; 
     659-       unsigned int usecs = 0; 
     660+       unsigned int nsecs = 0; 
     661+       unsigned int tp; 
     662  
     663        mr = &mi->groups[group].rates[rate]; 
     664  
     665@@ -221,10 +222,12 @@ minstrel_ht_calc_tp(struct minstrel_ht_s 
     666        } 
     667  
     668        if (group != MINSTREL_CCK_GROUP) 
     669-               usecs = mi->overhead / MINSTREL_TRUNC(mi->avg_ampdu_len); 
     670+               nsecs = 1000 * mi->overhead / MINSTREL_TRUNC(mi->avg_ampdu_len); 
     671  
     672-       usecs += minstrel_mcs_groups[group].duration[rate]; 
     673-       mr->cur_tp = MINSTREL_TRUNC((1000000 / usecs) * mr->probability); 
     674+       nsecs += minstrel_mcs_groups[group].duration[rate]; 
     675+       tp = 1000000 * ((mr->probability * 1000) / nsecs); 
     676+ 
     677+       mr->cur_tp = MINSTREL_TRUNC(tp); 
     678 } 
     679  
     680 /* 
     681@@ -243,6 +246,7 @@ minstrel_ht_update_stats(struct minstrel 
     682        struct minstrel_rate_stats *mr; 
     683        int cur_prob, cur_prob_tp, cur_tp, cur_tp2; 
     684        int group, i, index; 
     685+       int prob_max_streams = 1; 
     686  
     687        if (mi->ampdu_packets > 0) { 
     688                mi->avg_ampdu_len = minstrel_ewma(mi->avg_ampdu_len, 
     689@@ -308,8 +312,8 @@ minstrel_ht_update_stats(struct minstrel 
     690                } 
     691        } 
     692  
     693-       /* try to sample up to half of the available rates during each interval */ 
     694-       mi->sample_count *= 4; 
     695+       /* try to sample all available rates during each interval */ 
     696+       mi->sample_count *= 8; 
     697  
     698        cur_prob = 0; 
     699        cur_prob_tp = 0; 
     700@@ -320,20 +324,13 @@ minstrel_ht_update_stats(struct minstrel 
     701                if (!mg->supported) 
     702                        continue; 
     703  
     704-               mr = minstrel_get_ratestats(mi, mg->max_prob_rate); 
     705-               if (cur_prob_tp < mr->cur_tp && 
     706-                   minstrel_mcs_groups[group].streams == 1) { 
     707-                       mi->max_prob_rate = mg->max_prob_rate; 
     708-                       cur_prob = mr->cur_prob; 
     709-                       cur_prob_tp = mr->cur_tp; 
     710-               } 
     711- 
     712                mr = minstrel_get_ratestats(mi, mg->max_tp_rate); 
     713                if (cur_tp < mr->cur_tp) { 
     714                        mi->max_tp_rate2 = mi->max_tp_rate; 
     715                        cur_tp2 = cur_tp; 
     716                        mi->max_tp_rate = mg->max_tp_rate; 
     717                        cur_tp = mr->cur_tp; 
     718+                       prob_max_streams = minstrel_mcs_groups[group].streams - 1; 
     719                } 
     720  
     721                mr = minstrel_get_ratestats(mi, mg->max_tp_rate2); 
     722@@ -343,6 +340,23 @@ minstrel_ht_update_stats(struct minstrel 
     723                } 
     724        } 
     725  
     726+       if (prob_max_streams < 1) 
     727+               prob_max_streams = 1; 
     728+ 
     729+       for (group = 0; group < ARRAY_SIZE(minstrel_mcs_groups); group++) { 
     730+               mg = &mi->groups[group]; 
     731+               if (!mg->supported) 
     732+                       continue; 
     733+               mr = minstrel_get_ratestats(mi, mg->max_prob_rate); 
     734+               if (cur_prob_tp < mr->cur_tp && 
     735+                   minstrel_mcs_groups[group].streams <= prob_max_streams) { 
     736+                       mi->max_prob_rate = mg->max_prob_rate; 
     737+                       cur_prob = mr->cur_prob; 
     738+                       cur_prob_tp = mr->cur_tp; 
     739+               } 
     740+       } 
     741+ 
     742+ 
     743        mi->stats_update = jiffies; 
     744 } 
     745  
     746@@ -536,7 +550,7 @@ minstrel_calc_retransmit(struct minstrel 
     747        mr->retry_updated = true; 
     748  
     749        group = &minstrel_mcs_groups[index / MCS_GROUP_RATES]; 
     750-       tx_time_data = group->duration[index % MCS_GROUP_RATES] * ampdu_len; 
     751+       tx_time_data = group->duration[index % MCS_GROUP_RATES] * ampdu_len / 1000; 
     752  
     753        /* Contention time for first 2 tries */ 
     754        ctime = (t_slot * cw) >> 1; 
Note: See TracChangeset for help on using the changeset viewer.