• Rafael J. Wysocki's avatar
    intel_pstate: Avoid getting stuck in high P-states when idle · ffb81056
    Rafael J. Wysocki authored
    Jörg Otte reports that commit a4675fbc (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: default avatarJörg Otte <jrg.otte@gmail.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>