Search Linux Wireless

Re: [RFC 2/3] mac80211: mesh power save doze scheduling

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

 



On Thu, 2013-01-31 at 16:23 +0100, Marco Porsch wrote:
> On 01/31/2013 02:51 PM, Johannes Berg wrote:
> > On Wed, 2013-01-23 at 11:19 +0100, Marco Porsch wrote:
> >
> >> Expose a callback ieee80211_mps_init for drivers to register
> >> mesh powersave ops:
> >> - hw_doze - put the radio to sleep now
> >> - hw_wakeup - wake the radio up for frame RX
> >> These ops may be extended in the future to allow drivers/HW to
> >> implement mesh PS themselves. (The current design goal was to
> >> concentrate mesh PS routines in mac80211 to keep driver
> >> modifications minimal.
> >>
> >> Track the beacon timing information of peers we are in PS mode
> >> towards. Set a per-STA hrtimer which will trigger a wakeup right
> >> before the peer's next TBTT.
> >> Also use the same hrtimer to go to sleep mode after not
> >> receiving a beacon in a defined time margin. In this case
> >> calculate the next TBTT and increase the margin.
> >>
> >> For mesh Awake Windows wakeup on SWBA (beacon_get_tim) and start
> >> a timer which triggers a hw_doze call on expiry.
> >
> > Hmm. I'm not completely happy with this hrtimer stuff in mac80211.
> > There's a lot of (USB) hardware that could never implement such a thing,
> > but could, conceivably, implement this differently?
> 
> The use of hrtimers for MPS is debatable currently. The approach of 
> calculating the peer's TSF should be accurate to the usec. Good timing 
> here directly affects the energy savings. On the other handside the 
> margin of 5ms used shows that something is not working as expected yet. 
> If this cannot be fixed, I may as well use regular timers here. How 
> strongly do you oppose hrtimers? :)

Oh it's not the user of hrtimers vs. timers (although first using an
hrtimer and then kicking off to a work struct seems ... pointless and
questionable), it's more the fact that you're starting to put real-time
behaviour into mac80211. I'm not entirely convinced that is the right
approach for "core" mac80211.

> > So I think you should (at least attempt to) make an implementation that
> > is less tied to the exact timing implementation. Maybe program the
> > wakeup TBTT in advance.  Maybe with a small library the driver can
> > connect to this that uses hrtimers to implement it? That could then also
> > assume that callbacks need not sleep, thus allowing to reduce
> > TBTT_MARGIN.
>  >
> > In theory I think with ath9k you could even use hardware timers &
> > interrupts to wake the hardware, thus probably being able to reduce
> > TBTT_MARGIN significantly.
> 
> Earlier, I had successfully implemented wakeups using ath9k HW before we 
> at cozybit decided to concentrate all code in mac80211. Concerning ath9k 
> it worked fine but required more callbacks to mac80211 and will 
> eventually add redundant code that has to be maintained to multiple drivers.

The question isn't so much about concentrating the code, I think you can
still do that for most devices, and use hrtimers more effectively, if
you somewhat put it off to the side in a less integrated way. I'm
thinking that, for example, if I ever wanted to implement this with our
current device (not likely, but just for perspective) we'd definitely
want to program the firmware to do all the real-time behaviour. In fact,
I suspect we probably could with the new MVM firmware API.

Therefore, I think it would be better to have a more generic
time-oriented interface in mac80211, and put the actual implementation
of the events a bit separately in a way that it is optional for drivers
and not used in the API.

johannes

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