Search Linux Wireless

Re: Thoughts about mac80211 client PS implementation

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

 



On Wed, 2008-11-05 at 22:54 +0200, Kalle Valo wrote:

> >> PS should be disabled while associated and running software scan, and
> >> naturally re-enabled after the scan has finished. I assume hardware
> >> scanning implementations are clever enough to disable PS when scanning
> >> and we don't have to worry about that case.
> >
> > And on that too. And should there be a monitor flag that disables PS, so
> > that we can "refcount" the PS bit in a way?
> 
> Sorry, I don't follow you here. What do you mean by a monitor flag?

Well if you add a monitor interface you may want to turn off PS, but I
suppose you can just do that on the wlan0 interface you're associated
on.

> >> The dynamic PS implementation is still a bit open issue for me. I have
> >> been thinking something like that in tx.c frames will be queued if PS
> >> is enabled, PS will be disabled in a workqueue by calling
> >> ieee80211_hw_config() and only after that the queued frames are
> >> transfered. So something similar as sta->ps_tx_buf does in AP mode. No
> >> idea if this is feasible or not.
> >
> > Not sure I understand the dynamic PS yet. 
> 
> Basically the idea is to disable PS whenever we are transmitting (and
> maybe also receiving, don't know yet) frames, but whenever there's a
> long enough idle period PS would be enabled again. So in principle
> this would be a compromise of low power consumption and low latency.
> 
> Naturally the idle period would be configurable with siwpower() and
> whatever nl80211 equivalent we will have in future.
> 
> > Why would you queue up frames? To reduce the number of radio wakeups
> > when TX traffic is low?
> 
> Just because I assume that invoke_tx_handlers() cannot sleep but
> ieee80211_hw_config() sleeps. I didn't think of any other way to solve
> this, but I haven't thought that much about this. What do you think?

But wouldn't that mean the other way around, i.e. whenever we transmit
we disable it and then start a timer that re-enables it? Ah, you're
thinking because TX handlers cannot sleep and the config callback may
sleep? Hmm. I suppose then we'd have to defer the actual disable PS mode
to a work struct.

Maybe we don't want to disable PS for a single frame though, so how
about this:

 * When a frame is transmitted, store the current frame counter (do we
   have one? we could add one) somewhere and arm a timer to fire N
   milliseconds in the future.
 * The timer checks that we have transmitted
   more than M frames in the time since it was started, and if so queues
   a work struct to disable PS.
 * The work function also sets a flags somewhere "dynamic PS has
   disabled PS" and arms another timer to fire after R millisecinds,
   that timer will queue work to enable PS again
 * the TX code, when the "dynamic PS has disabled PS" flag is set, mods
   the re-enable timer to be R milliseconds in the future again

That way, M frames within a period of N milliseconds will disable PS,
and it'll still disabled until R milliseconds elapse without traffic,
and no timers are fired unless they are needed.

johannes

Attachment: signature.asc
Description: This is a digitally signed message part


[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