Search Linux Wireless

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

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

 



Juuso,

> -----Original Message-----
> From: Juuso Oikarinen [mailto:juuso.oikarinen@xxxxxxxxx]
> Sent: Tuesday, October 05, 2010 12:41 AM
> To: Gabay, Benzy
> Cc: Coelho Luciano (Nokia-MS/Helsinki); linux-wireless@xxxxxxxxxxxxxxx
> Subject: RE: [PATCH 24/25] wl1271: Optimize scan duration
> 
> 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.
> 

>>  I donât know if that is conventional request: can you share the full results and setup details?

> 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
> 

ÿô.nlj·Ÿ®‰­†+%ŠË±é¥Šwÿº{.nlj·¥Š{±ÿ«zW¬³ø¡Ü}©ž²ÆzÚj:+v‰¨þø®w¥þŠàÞ¨è&¢)ß«a¶Úÿûz¹ÞúŽŠÝjÿŠwèf



[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