Re: [RFC V2 2/2] sched: idle: IRQ based next prediction for idle period

From: Daniel Lezcano
Date: Thu Jan 21 2016 - 08:04:14 EST


On 01/20/2016 09:14 PM, Nicolas Pitre wrote:
On Wed, 20 Jan 2016, Daniel Lezcano wrote:
[...]

One more comment:

+ /*
+ * If the mean value is null, just ignore this wakeup
+ * source.
+ */
+ mean = stats_mean(&w->stats);
+ if (!mean)
+ continue;
+
+ variance = stats_variance(&w->stats, mean);
+ /*
+ * We want to check the last interval is:
+ *
+ * mean - stddev < interval < mean + stddev
+ *
+ * That simplifies to:
+ *
+ * -stddev < interval - mean < stddev
+ *
+ * abs(interval - mean) < stddev
+ *
+ * The standard deviation is the sqrt of the variance:
+ *
+ * abs(interval - mean) < sqrt(variance)
+ *
+ * and we want to prevent to do an sqrt, so we square
+ * the equation:
+ *
+ * (interval - mean)^2 < variance
+ *
+ * So if the latest value of the stats complies with
+ * this condition, then the wakeup source is
+ * considered predictable and can be used to predict
+ * the next event.
+ */
+ interval = w->stats.values[w->stats.w_ptr];
+ if ((u64)((interval - mean) * (interval - mean)) > variance)
+ continue;
+
+ /*
+ * Let's compute the next event: the wakeup source is
+ * considered predictable, we add the average interval
+ * time added to the latest interruption event time.
+ */
+ next = ktime_add_us(w->timestamp, stats_mean(&w->stats));

You don't need to call stats_mean() again as you have it in the 'mean'
variable already.

Good point.


--
<http://www.linaro.org/> Linaro.org â Open source software for ARM SoCs

Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog