For a CPPC platform + EM/EAS (but without AMU): Tested-by: Pierre Gondois <pierre.gondois@xxxxxxx> On 11/9/23 11:14, Vincent Guittot wrote:
This is the 1st part of consolidating how the max compute capacity is used in the scheduler and how we calculate the frequency for a level of utilization. Fix some unconsistancy when computing frequency for an utilization. There can be a mismatch between energy model and schedutil. Next step will be to make a difference between the original max compute capacity of a CPU and what is currently available when there is a capping applying forever (i.e. seconds or more). Changes since v5: - remove useless return in freq_inv_set_max_ratio() - Add tags Changes since v4: - Capitalize the verb in subject - Remove usless parentheses in cppc_get_dmi_max_khz() - Use freq_ref pattern everywhere - Fix MHz / kHz units conversion for cppc_cpufreq - Move default definition of arch_scale_freq_ref() in include/linux/sched/topology.h beside arch_scale_cpu_capacity which faces similar default declaration behavior. This location covers all cases with arch and CONFIG_* which was not the case with previous attempts. Changes since v3: - Split patch 5 cpufreq/cppc - Fix topology_init_cpu_capacity_cppc() - Fix init if AMU ratio - Added some tags Changes since v2: - Remove the 1st patch which has been queued in tip - Rework how to initialize the reference frequency for cppc_cpufreq and change topology_init_cpu_capacity_cppc() to also set capacity_ref_freq - Add a RFC to convert AMU to use arch_scale_freq_ref and move the config of the AMU ratio to be done when intializing cpu capacity and capacity_ref_freq - Added some tags Changes since v1: - Fix typos - Added changes in cpufreq to use arch_scale_freq_ref() when calling arch_set_freq_scale (patch 3). - arch_scale_freq_ref() is always defined and returns 0 (as proposed by Ionela) when not defined by the arch. This simplifies the code with the addition of patch 3. - Simplify Energy Model which always uses arch_scale_freq_ref(). The latter returns 0 when not defined by arch instead of last item of the perf domain. This is not a problem because the function is only defined for compilation purpose in this case and we don't care about the returned value. (patch 5) - Added changes in cppc cpufreq to set capacity_ref_freq (patch 6) - Added reviewed tag for patch 1 which got a minor change but not for others as I did some changes which could make previous reviewed tag no more relevant. Vincent Guittot (7): topology: Add a new arch_scale_freq_reference cpufreq: Use the fixed and coherent frequency for scaling capacity cpufreq/schedutil: Use a fixed reference frequency energy_model: Use a fixed reference frequency cpufreq/cppc: Move and rename cppc_cpufreq_{perf_to_khz|khz_to_perf} cpufreq/cppc: Set the frequency used for computing the capacity arm64/amu: Use capacity_ref_freq to set AMU ratio arch/arm/include/asm/topology.h | 1 + arch/arm64/include/asm/topology.h | 1 + arch/arm64/kernel/topology.c | 26 +++--- arch/riscv/include/asm/topology.h | 1 + drivers/acpi/cppc_acpi.c | 104 ++++++++++++++++++++++ drivers/base/arch_topology.c | 56 ++++++++---- drivers/cpufreq/cppc_cpufreq.c | 139 ++++-------------------------- drivers/cpufreq/cpufreq.c | 4 +- include/acpi/cppc_acpi.h | 2 + include/linux/arch_topology.h | 8 ++ include/linux/cpufreq.h | 1 + include/linux/energy_model.h | 6 +- include/linux/sched/topology.h | 8 ++ kernel/sched/cpufreq_schedutil.c | 26 +++++- 14 files changed, 224 insertions(+), 159 deletions(-)