mbox series

[v7,0/7] consolidate and cleanup CPU capacity

Message ID 20231211104855.558096-1-vincent.guittot@linaro.org
Headers show
Series consolidate and cleanup CPU capacity | expand

Message

Vincent Guittot Dec. 11, 2023, 10:48 a.m. UTC
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 v6:
- Rebase on tip/sched/core and fix a conflict
- Add tags

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(-)

Comments

Rafael J. Wysocki Dec. 11, 2023, 7:52 p.m. UTC | #1
On Mon, Dec 11, 2023 at 11:49 AM Vincent Guittot
<vincent.guittot@linaro.org> 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 v6:
> - Rebase on tip/sched/core and fix a conflict
> - Add tags
>
> 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

This series touches multiple places, but mostly schedutil, cpufreq and
the EM, so please let me know if you want me to pick it up.
Vincent Guittot Dec. 12, 2023, 8:32 a.m. UTC | #2
On Mon, 11 Dec 2023 at 20:52, Rafael J. Wysocki <rafael@kernel.org> wrote:
>
> On Mon, Dec 11, 2023 at 11:49 AM Vincent Guittot
> <vincent.guittot@linaro.org> wrote:

[..]

> >
> > 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
>
> This series touches multiple places, but mostly schedutil, cpufreq and
> the EM, so please let me know if you want me to pick it up.

This serie has been rebased on top of tip/ched/core to fix a conflict
with another change already queued in kernel/sched/cpufreq_schedutil.c
Rafael J. Wysocki Dec. 12, 2023, 11:55 a.m. UTC | #3
On Tue, Dec 12, 2023 at 9:32 AM Vincent Guittot
<vincent.guittot@linaro.org> wrote:
>
> On Mon, 11 Dec 2023 at 20:52, Rafael J. Wysocki <rafael@kernel.org> wrote:
> >
> > On Mon, Dec 11, 2023 at 11:49 AM Vincent Guittot
> > <vincent.guittot@linaro.org> wrote:
>
> [..]
>
> > >
> > > 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
> >
> > This series touches multiple places, but mostly schedutil, cpufreq and
> > the EM, so please let me know if you want me to pick it up.
>
> This serie has been rebased on top of tip/ched/core to fix a conflict
> with another change already queued in kernel/sched/cpufreq_schedutil.c

OK, so I'm assuming that it will go in through tip.

Thanks!