• Srinivas Pandruvada's avatar
    cpufreq: intel_pstate: Add HWP boost utility and sched util hooks · e0efd5be
    Srinivas Pandruvada authored
    Added two utility functions to HWP boost up gradually and boost down to
    the default cached HWP request values.
    
    Boost up:
    Boost up updates HWP request minimum value in steps. This minimum value
    can reach upto at HWP request maximum values depends on how frequently,
    this boost up function is called. At max, boost up will take three steps
    to reach the maximum, depending on the current HWP request levels and HWP
    capabilities. For example, if the current settings are:
    If P0 (Turbo max) = P1 (Guaranteed max) = min
            No boost at all.
    If P0 (Turbo max) > P1 (Guaranteed max) = min
            Should result in one level boost only for P0.
    If P0 (Turbo max) = P1 (Guaranteed max) > min
            Should result in two level boost:
                    (min + p1)/2 and P1.
    If P0 (Turbo max) > P1 (Guaranteed max) > min
            Should result in three level boost:
                    (min + p1)/2, P1 and P0.
    We don't set any level between P0 and P1 as there is no guarantee that
    they will be honored.
    
    Boost down:
    After the system is idle for hold time of 3ms, the HWP request is reset
    to the default value from HWP init or user modified one via sysfs.
    
    Caching of HWP Request and Capabilities
    Store the HWP request value last set using MSR_HWP_REQUEST and read
    MSR_HWP_CAPABILITIES. This avoid reading of MSRs in the boost utility
    functions.
    
    These boost utility functions calculated limits are based on the latest
    HWP request value, which can be modified by setpolicy() callback. So if
    user space modifies the minimum perf value, that will be accounted for
    every time the boost up is called. There will be case when there can be
    contention with the user modified minimum perf, in that case user value
    will gain precedence. For example just before HWP_REQUEST MSR is updated
    from setpolicy() callback, the boost up function is called via scheduler
    tick callback. Here the cached MSR value is already the latest and limits
    are updated based on the latest user limits, but on return the MSR write
    callback called from setpolicy() callback will update the HWP_REQUEST
    value. This will be used till next time the boost up function is called.
    
    In addition add a variable to control HWP dynamic boosting. When HWP
    dynamic boost is active then set the HWP specific update util hook. The
    contents in the utility hooks will be filled in the subsequent patches.
    Reported-by: default avatarMel Gorman <mgorman@techsingularity.net>
    Tested-by: default avatarGiovanni Gherdovich <ggherdovich@suse.cz>
    Signed-off-by: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    e0efd5be
intel_pstate.c 61.5 KB