Messages in this thread | | | Date | Fri, 21 May 2010 22:23:23 -0700 | From | Arjan van de Ven <> | Subject | Re: [PATCH 2/2] cpuidle: Add a repeating pattern detector to the menu governor |
| |
On Fri, 21 May 2010 12:43:09 -0700 Andrew Morton <akpm@linux-foundation.org> wrote:
> On Wed, 19 May 2010 12:51:50 -0700 > Frank Rowand <frank.rowand@am.sony.com> wrote: > > > Aplogies if this is a duplicate, my outgoing email seems to have not > > been working. > > > > On 05/09/10 16:04, Arjan van de Ven wrote: > > > > > +/* > > > + * Try detecting repeating patterns by keeping track of the last > > > 8 > > > + * intervals, and checking if the standard deviation of that set > > > + * of points is below a threshold. If it is... then use the > > > + * average of these 8 points as the estimated value. > > > + */ > > > +static void detect_repeating_patterns(struct menu_device *data) > > > +{ > > > + int i; > > > + uint64_t avg = 0; > > > + uint64_t stddev = 0; /* contains the square of the std > > > deviation */ + > > > + /* first calculate average and standard deviation of the > > > past */ > > > + for (i = 0; i < INTERVALS; i++) > > > + avg += data->intervals[i]; > > > + > > > + /* if the avg is beyond the known next tick, it's > > > worthless */ > > > + if (avg > data->expected_us) > > > + return; > > > + > > > > Should the following division by INTERVALS be moved up 6 lines to > > before "if (avg > data->expected_us)"? > > Quite possibly.
yeah that's a bug; I'll make a patch to fix it
> > > > + avg = avg / INTERVALS; > > > + for (i = 0; i < INTERVALS; i++) > > > + stddev += (data->intervals[i] - avg) * > > > + (data->intervals[i] - avg); > > > + > > > + stddev = stddev / INTERVALS; > > > + > > > + /* > > > + * now.. if stddev is small.. then assume we have a > > > + * repeating pattern and predict we keep doing this. > > > + */ > > > + > > > + if (avg && stddev < STDDEV_THRESH) > > > + data->predicted_us = avg; > > > +} > > wakey wakey, Arjan.
sorry, seems this email got lost in 400 "Suspend block API" emails ;(
> > > Also, expected_us is 32-bit and predicted_us is 64-bit. Was that > rational?
predicted holds intermediate results of some calculations.. and those overflow 32 bit...
-- Arjan van de Ven Intel Open Source Technology Centre For development, discussion and tips for power savings, visit http://www.lesswatts.org
| |