Message ID | 20231109101438.1139696-1-vincent.guittot@linaro.org |
---|---|
Headers | show |
Series | consolidate and cleanup CPU capacity | expand |
For a CPPC platform + EM/EAS (but without AMU): Tested-by: Pierre Gondois <pierre.gondois@arm.com> 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(-) >
On 09-11-23, 11:14, Vincent Guittot wrote: > Move and rename cppc_cpufreq_perf_to_khz and cppc_cpufreq_khz_to_perf to > use them outside cppc_cpufreq in topology_init_cpu_capacity_cppc(). > > Modify the interface to use struct cppc_perf_caps *caps instead of > struct cppc_cpudata *cpu_data as we only use the fields of cppc_perf_caps. > > cppc_cpufreq was converting the lowest and nominal freq from MHz to kHz > before using them. We move this conversion inside cppc_perf_to_khz and > cppc_khz_to_perf to make them generic and usable outside cppc_cpufreq. > > No functional change > > Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org> > Acked-by: Rafael J. Wysocki <rafael@kernel.org> > --- > drivers/acpi/cppc_acpi.c | 104 ++++++++++++++++++++++++ > drivers/cpufreq/cppc_cpufreq.c | 139 ++++----------------------------- > include/acpi/cppc_acpi.h | 2 + > 3 files changed, 123 insertions(+), 122 deletions(-) Acked-by: Viresh Kumar <viresh.kumar@linaro.org>