• Rafael J. Wysocki's avatar
    cpufreq: intel_pstate: hybrid: CPU-specific scaling factor · eb3693f0
    Rafael J. Wysocki authored
    The scaling factor between HWP performance levels and CPU frequency
    may be different for different types of CPUs in a hybrid processor
    and in general the HWP performance levels need not correspond to
    "P-states" representing values that would be written to
    MSR_IA32_PERF_CTL if HWP was disabled.
    
    However, the policy limits control in cpufreq is defined in terms
    of CPU frequency, so it is necessary to map the frequency limits set
    through that interface to HWP performance levels with reasonable
    accuracy and the behavior of that interface on hybrid processors
    has to be compatible with its behavior on non-hybrid ones.
    
    To address this problem, use the observations that (1) on hybrid
    processors the sysfs interface can operate by mapping frequency
    to "P-states" and translating those "P-states" to specific HWP
    performance levels of the given CPU and (2) the scaling factor
    between the MSR_IA32_PERF_CTL "P-states" and CPU frequency can be
    regarded as a known value.  Moreover, the mapping between the
    HWP performance levels and CPU frequency can be assumed to be
    linear and such that HWP performance level 0 correspond to the
    frequency value of 0, so it is only necessary to know the
    frequency corresponding to one specific HWP performance level
    to compute the scaling factor applicable to all of them.
    
    One possibility is to take the nominal performance value from CPPC,
    if available, and use cpu_khz as the corresponding frequency.  If
    the CPPC capabilities interface is not there or the nominal
    performance value provided by it is out of range, though, something
    else needs to be done.
    
    Namely, the guaranteed performance level either from CPPC or from
    MSR_HWP_CAPABILITIES can be used instead, but the corresponding
    frequency needs to be determined.  That can be done by computing the
    product of the (known) scaling factor between the MSR_IA32_PERF_CTL
    P-states and CPU frequency (the PERF_CTL scaling factor) and the
    P-state value referred to as the "TDP ratio".
    
    If the HWP-to-frequency scaling factor value obtained in one of the
    ways above turns out to be euqal to the PERF_CTL scaling factor, it
    can be assumed that the number of HWP performance levels is equal to
    the number of P-states and the given CPU can be handled as though
    this was not a hybrid processor.
    
    Otherwise, one more adjustment may still need to be made, because the
    HWP-to-frequency scaling factor computed so far may not be accurate
    enough (e.g. because the CPPC information does not match the exact
    behavior of the processor).  Specifically, in that case the frequency
    corresponding to the highest HWP performance value from
    MSR_HWP_CAPABILITIES (computed as the product of that value and the
    HWP-to-frequency scaling factor) cannot exceed the frequency that
    corresponds to the maximum 1-core turbo P-state value from
    MSR_TURBO_RATIO_LIMIT (computed as the procuct of that value and the
    PERF_CTL scaling factor) and the HWP-to-frequency scaling factor may
    need to be adjusted accordingly.
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    eb3693f0
intel_pstate.c 85.1 KB