Search Linux Wireless

RE: [PATCH 24/25] wl1271: Optimize scan duration

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

 



On Tue, 2010-10-05 at 07:30 +0200, ext Gabay, Benzy wrote:
> Juuso,
> 
> > 
> > From: Juuso Oikarinen <juuso.oikarinen@xxxxxxxxx>
> > 
> > Currently then dwell times for each channel in scans is set to an
> > overly
> > long value, and excessive number of probe-requests are transmitted on
> > each
> > channel (for active scans.)
> > 
> > Based on testing, comparable results can be received with smaller
> > dwell-time,
> > and, with fever probe-requests - in fact, reducing the number of probe-
> > requests
> > to 2 seems to increase the number of found results.
> 
> I think that this does not making any sense. Less prob requests should give you back less results. As less beacons/prob responses are getting back to the station.
> I think also that office with 70 AP is not a normal environment to test and optimize numbers.
> I would suggest to re-test in a 1-6 AP environment which is making more sense for both home and enterprise environment.

We have actually performed more testing than just mentioned here, in
varied environments, and all of the testing seems to indicate that
reducing the number of probe-reqs per channel is not reducing the number
of acquired results. Instead, in some scenarios, it is increasing the
number of acquired results.

We did not see reduction in the probability of finding a specific AP in
a few (one or two) AP environment either.

The effect seems to be this way because reducing the number of
probe-req's dramatically reduces the noise generated by probe-responses
from AP's on neighbouring channels.

-Juuso



> 
> > 
> > Configure more optimal values for per channel dwell times. Comparison
> > for the
> > different scan configurations (in my current office environment):
> > 
> > dwell-time 60000   3x probe-req == ~60 results
> >            40000   3x probe-req == ~50 results
> >            30000   3x probe-req == ~40 results
> > 
> > dwell-time 60000   2x probe-req == ~70 results
> >            40000   2x probe-req == ~60 results
> >            30000   2x probe-req == ~58 results
> > 
> > The above are results for a cumulative 3 scan run. For individual
> > scans, the
> > number of results drop slightly more.
> > 
> > Signed-off-by: Juuso Oikarinen <juuso.oikarinen@xxxxxxxxx>
> > Reviewed-by: Teemu Paasikivi <ext-teemu.3.paasikivi@xxxxxxxxx>
> > Signed-off-by: Luciano Coelho <luciano.coelho@xxxxxxxxx>
> > ---
> >  drivers/net/wireless/wl12xx/wl1271_conf.h |   39
> > +++++++++++++++++++++++++++++
> >  drivers/net/wireless/wl12xx/wl1271_main.c |    9 ++++++-
> >  drivers/net/wireless/wl12xx/wl1271_scan.c |   18 +++++++++---
> >  drivers/net/wireless/wl12xx/wl1271_scan.h |    3 --
> >  4 files changed, 60 insertions(+), 9 deletions(-)
> > 
> > diff --git a/drivers/net/wireless/wl12xx/wl1271_conf.h
> > b/drivers/net/wireless/wl12xx/wl1271_conf.h
> > index feb493e..ab716f5 100644
> > --- a/drivers/net/wireless/wl12xx/wl1271_conf.h
> > +++ b/drivers/net/wireless/wl12xx/wl1271_conf.h
> > @@ -1016,6 +1016,44 @@ struct conf_roam_trigger_settings {
> >  	u8 avg_weight_snr_data;
> >  };
> > 
> > +struct conf_scan_settings {
> > +	/*
> > +	 * The minimum time to wait on each channel for active scans
> > +	 *
> > +	 * Range: 0 - 65536 tu
> > +	 */
> > +	u16 min_dwell_time_active;
> > +
> > +	/*
> > +	 * The maximum time to wait on each channel for active scans
> > +	 *
> > +	 * Range: 0 - 65536 tu
> > +	 */
> > +	u16 max_dwell_time_active;
> > +
> > +	/*
> > +	 * The maximum time to wait on each channel for passive scans
> > +	 *
> > +	 * Range: 0 - 65536 tu
> > +	 */
> > +	u16 min_dwell_time_passive;
> > +
> > +	/*
> > +	 * The maximum time to wait on each channel for passive scans
> > +	 *
> > +	 * Range: 0 - 65536 tu
> > +	 */
> > +	u16 max_dwell_time_passive;
> > +
> > +	/*
> > +	 * Number of probe requests to transmit on each active scan
> > channel
> > +	 *
> > +	 * Range: u8
> > +	 */
> > +	u16 num_probe_reqs;
> > +
> > +};
> > +
> >  struct conf_drv_settings {
> >  	struct conf_sg_settings sg;
> >  	struct conf_rx_settings rx;
> > @@ -1024,6 +1062,7 @@ struct conf_drv_settings {
> >  	struct conf_itrim_settings itrim;
> >  	struct conf_pm_config_settings pm_config;
> >  	struct conf_roam_trigger_settings roam_trigger;
> > +	struct conf_scan_settings scan;
> >  };
> > 
> >  #endif
> > diff --git a/drivers/net/wireless/wl12xx/wl1271_main.c
> > b/drivers/net/wireless/wl12xx/wl1271_main.c
> > index 3f4e154..dcbd6f5 100644
> > --- a/drivers/net/wireless/wl12xx/wl1271_main.c
> > +++ b/drivers/net/wireless/wl12xx/wl1271_main.c
> > @@ -232,7 +232,14 @@ static struct conf_drv_settings default_conf = {
> >  		.avg_weight_rssi_data         = 10,
> >  		.avg_weight_snr_beacon        = 20,
> >  		.avg_weight_snr_data          = 10
> > -	}
> > +	},
> > +	.scan = {
> > +		.min_dwell_time_active        = 7500,
> > +		.max_dwell_time_active        = 30000,
> > +		.min_dwell_time_passive       = 30000,
> > +		.max_dwell_time_passive       = 60000,
> > +		.num_probe_reqs               = 2,
> > +	},
> >  };
> > 
> >  static void __wl1271_op_remove_interface(struct wl1271 *wl);
> > diff --git a/drivers/net/wireless/wl12xx/wl1271_scan.c
> > b/drivers/net/wireless/wl12xx/wl1271_scan.c
> > index 37f9ccb..5c76b79 100644
> > --- a/drivers/net/wireless/wl12xx/wl1271_scan.c
> > +++ b/drivers/net/wireless/wl12xx/wl1271_scan.c
> > @@ -64,6 +64,7 @@ static int wl1271_get_scan_channels(struct wl1271
> > *wl,
> >  				    struct basic_scan_channel_params *channels,
> >  				    enum ieee80211_band band, bool passive)
> >  {
> > +	struct conf_scan_settings *c = &wl->conf.scan;
> >  	int i, j;
> >  	u32 flags;
> > 
> > @@ -91,10 +92,17 @@ static int wl1271_get_scan_channels(struct wl1271
> > *wl,
> >  			wl1271_debug(DEBUG_SCAN, "beacon_found %d",
> >  				     req->channels[i]->beacon_found);
> > 
> > -			channels[j].min_duration =
> > -				cpu_to_le32(WL1271_SCAN_CHAN_MIN_DURATION);
> > -			channels[j].max_duration =
> > -				cpu_to_le32(WL1271_SCAN_CHAN_MAX_DURATION);
> > +			if (!passive) {
> > +				channels[j].min_duration =
> > +					cpu_to_le32(c->min_dwell_time_active);
> > +				channels[j].max_duration =
> > +					cpu_to_le32(c->max_dwell_time_active);
> > +			} else {
> > +				channels[j].min_duration =
> > +					cpu_to_le32(c->min_dwell_time_passive);
> > +				channels[j].max_duration =
> > +					cpu_to_le32(c->max_dwell_time_passive);
> > +			}
> >  			channels[j].early_termination = 0;
> >  			channels[j].tx_power_att = req->channels[i]-
> > >max_power;
> >  			channels[j].channel = req->channels[i]->hw_value;
> > @@ -151,7 +159,7 @@ static int wl1271_scan_send(struct wl1271 *wl, enum
> > ieee80211_band band,
> >  	cmd->params.rx_filter_options =
> >  		cpu_to_le32(CFG_RX_PRSP_EN | CFG_RX_MGMT_EN |
> > CFG_RX_BCN_EN);
> > 
> > -	cmd->params.n_probe_reqs = WL1271_SCAN_PROBE_REQS;
> > +	cmd->params.n_probe_reqs = wl->conf.scan.num_probe_reqs;
> >  	cmd->params.tx_rate = cpu_to_le32(basic_rate);
> >  	cmd->params.tid_trigger = 0;
> >  	cmd->params.scan_tag = WL1271_SCAN_DEFAULT_TAG;
> > diff --git a/drivers/net/wireless/wl12xx/wl1271_scan.h
> > b/drivers/net/wireless/wl12xx/wl1271_scan.h
> > index bb7af2a..6d57127 100644
> > --- a/drivers/net/wireless/wl12xx/wl1271_scan.h
> > +++ b/drivers/net/wireless/wl12xx/wl1271_scan.h
> > @@ -40,11 +40,8 @@ void wl1271_scan_complete_work(struct work_struct
> > *work);
> >  #define WL1271_SCAN_OPT_ACTIVE         0
> >  #define WL1271_SCAN_OPT_PASSIVE	       1
> >  #define WL1271_SCAN_OPT_PRIORITY_HIGH  4
> > -#define WL1271_SCAN_CHAN_MIN_DURATION  30000  /* TU */
> > -#define WL1271_SCAN_CHAN_MAX_DURATION  60000  /* TU */
> >  #define WL1271_SCAN_BAND_2_4_GHZ 0
> >  #define WL1271_SCAN_BAND_5_GHZ 1
> > -#define WL1271_SCAN_PROBE_REQS 3
> > 
> >  #define WL1271_SCAN_TIMEOUT    10000 /* msec */
> > 
> > --
> 
> 
> 
> Thank You
> =========
> Benzy Gabay
> OMAP-WLAN Lead
> Texas Instruments


--
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 Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux