Search Linux Wireless

Re: [PATCH v3 5/7] mac80211: add lowest rate into minstrel's randmon rate sampling table

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2013-03-04 7:48 PM, Thomas Huehn wrote:
> While minstrel bootstraps and fills the success probabilities of each
> rate the lowest rate has typically a very high success probability
> (often 100% in our tests).
> Its statistics are never updated but considered to setup the mrr chain.
> In our tests we see that especially the 3rd mrr stage (which is that
> rate providing highest success probability) is filled with the lowest rate
> because its initial high sucess probability is never updated. By design
> the 4th mrr stage is filled with the lowest rate so often 3rd and 4th
> mrr stage are equal.
> 
> This patch follows minstrels general approach of assuming as little
> as possible about rate dependencies. Consequently we include the
> lowest rate into the random sampling table to get balanced up-to-date
> statistics of all rates and therefore balanced decisions.
> 
> Signed-off-by: Thomas Huehn <thomas@xxxxxxxxxxxxxxxxxxxxxxx>
> ---
>  net/mac80211/rc80211_minstrel.c    | 20 +++++++-------------
>  net/mac80211/rc80211_minstrel.h    |  4 +++-
>  net/mac80211/rc80211_minstrel_ht.c |  1 -
>  3 files changed, 10 insertions(+), 15 deletions(-)
> 
> diff --git a/net/mac80211/rc80211_minstrel.c b/net/mac80211/rc80211_minstrel.c
> index aa59f29..aa1e81a 100644
> --- a/net/mac80211/rc80211_minstrel.c
> +++ b/net/mac80211/rc80211_minstrel.c
> @@ -370,26 +369,21 @@ static void
>  init_sample_table(struct minstrel_sta_info *mi)
>  {
>  	unsigned int i, col, new_idx;
> -	unsigned int n_srates = mi->n_rates - 1;
>  	u8 rnd[8];
>  
>  	mi->sample_column = 0;
>  	mi->sample_row = 0;
> -	memset(mi->sample_table, 0, SAMPLE_COLUMNS * mi->n_rates);
> +	memset(mi->sample_table, 0xff, SAMPLE_COLUMNS * mi->n_rates);
>  
>  	for (col = 0; col < SAMPLE_COLUMNS; col++) {
> -		for (i = 0; i < n_srates; i++) {
> +		for (i = 0; i < mi->n_rates; i++) {
>  			get_random_bytes(rnd, sizeof(rnd));
> -			new_idx = (i + rnd[i & 7]) % n_srates;
> +			new_idx = (i + rnd[i]) % mi->n_rates;
Don't remove the '& 7' part, otherwise the rnd array will overflow.
There's no need for it to be as big as the number of rates though.
Also, there's a typo in the subject line: 'randmon'.

- Felix
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux