Rafael J. Wysocki ffb810563c intel_pstate: Avoid getting stuck in high P-states when idle
Jörg Otte reports that commit a4675fbc4a7a (cpufreq: intel_pstate:
Replace timers with utilization update callbacks) caused the CPUs in
his Haswell-based system to stay in the very high frequency region
even if the system is completely idle.

That turns out to be an existing problem in the intel_pstate driver's
P-state selection algorithm for Core processors.  Namely, all
decisions made by that algorithm are based on the average frequency
of the CPU between sampling events and on the P-state requested on
the last invocation, so it may get stuck at a very hight frequency
even if the utilization of the CPU is very low (in fact, it may get
stuck in a inadequate P-state regardless of the CPU utilization).
The only way to kick it out of that limbo is a sufficiently long idle
period (3 times longer than the prescribed sampling interval), but if
that doesn't happen often enough (eg. due to a timing change like
after the above commit), the P-state of the CPU may be inadequate
pretty much all the time.

To address the most egregious manifestations of that issue, reset the
core_busy value used to determine the next P-state to request if the
utilization of the CPU, determined with the help of the MPERF
feedback register and the TSC, is below 1%.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=115771
Reported-and-tested-by: Jörg Otte <jrg.otte@gmail.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2016-04-10 05:59:10 +02:00
..
2015-12-29 15:32:24 -05:00
2016-02-10 01:11:54 +01:00
2016-02-01 12:27:18 -08:00
2016-01-20 18:16:29 -08:00
2016-01-20 10:15:21 -08:00
2016-01-01 18:31:34 +01:00
2016-01-20 17:30:20 -08:00
2016-01-13 10:23:36 -08:00
2016-01-12 12:17:28 +01:00
2016-01-20 18:42:30 -08:00
2016-01-22 12:04:21 -08:00
2016-01-22 18:04:28 -05:00
2016-01-20 17:09:18 -08:00
2016-01-03 16:32:59 -08:00
2015-12-26 17:01:18 -08:00
2016-01-12 01:12:40 +01:00
2016-01-20 17:09:18 -08:00
2016-01-15 12:14:47 -08:00
2016-01-18 12:10:45 -08:00
2016-01-15 13:18:47 -08:00
2016-01-31 17:09:39 -08:00
2016-01-22 18:04:28 -05:00