[PATCH v8 0/4] Add support for AArch64 AMUv1-based average freq
Beata Michalska
beata.michalska at arm.com
Fri Dec 6 05:55:56 PST 2024
Hi All,
This series adds support for obtaining an average CPU frequency based on
a hardware provided feedback. The average frequency is being exposed via
dedicated yet optional cpufreq sysfs attribute - cpuinfo_avg_freq.
The architecture specific bits are being provided for AArch64, caching on
existing implementation for FIE and AMUv1 support: the frequency scale
factor, updated on each sched tick, serving as a base for retrieving
the frequency for a given CPU, representing an average frequency
reported between the ticks.
The changes have been rather lightly (due to some limitations) tested on
an FVP model.
Note that [PATCH 2/4] arm64: amu: Delay allocating cpumask for AMU FIE support
can be merged independently.
Additionally, this series depends on [6]
Relevant discussions:
[1] https://lore.kernel.org/all/20240229162520.970986-1-vanshikonda@os.amperecomputing.com/
[2] https://lore.kernel.org/all/7eozim2xnepacnnkzxlbx34hib4otycnbn4dqymfziqou5lw5u@5xzpv3t7sxo3/
[3] https://lore.kernel.org/all/20231212072617.14756-1-lihuisong@huawei.com/
[4] https://lore.kernel.org/lkml/ZIHpd6unkOtYVEqP@e120325.cambridge.arm.com/T/#m4e74cb5a0aaa353c60fedc6cfb95ab7a6e381e3c
[5] https://lore.kernel.org/all/20240603081331.3829278-1-beata.michalska@arm.com/
[6] https://lore.kernel.org/all/20240827154818.1195849-1-ionela.voinescu@arm.com/
v8:
- Drop introducing new function and reuse arch_freq_get_on_cpu, guarding its use
in scaling_cur_freq sysfs handler with dedicated config for x86
v7:
- Dropping 'arch_topology: init capacity_freq_ref to 0' patch from the series
as this one has been sent separately as an independent change
[https://lore.kernel.org/all/20240827154818.1195849-1-ionela.voinescu@arm.com/]
- Including in the series change that introduces new sysfs entry [PATCH 1/4]
- Consequently modifying previously arch_freq_get_on_cpu to match reqs for new
sysfs attribute
- Dropping an idea of considering a CPU that has been idle for a while as a
valid source of information for obtaining an AMU-counter based frequency
- Some minor cosmetic changes
v6:
- delay allocating cpumask for AMU FIE support instead of invalidating the mask
upon failure to register cpufreq policy notifications
- drop the change to cpufreq core (for cpuinfo_cur_freq) as this one will be
sent as a separate change
v5:
- Fix invalid access to cpumask
- Reworked finding reference cpu when getting the freq
v4:
- dropping seqcount
- fixing identifying active cpu within given policy
- skipping full dynticks cpus when retrieving the freq
- bringing back plugging in arch_freq_get_on_cpu into cpuinfo_cur_freq
v3:
- dropping changes to cpufreq_verify_current_freq
- pulling in changes from Ionela initializing capacity_freq_ref to 0
(thanks for that!) and applying suggestions made by her during last review:
- switching to arch_scale_freq_capacity and arch_scale_freq_ref when
reversing freq scale factor computation
- swapping shift with multiplication
- adding time limit for considering last scale update as valid
- updating frequency scale factor upon entering idle
v2:
- Splitting the patches
- Adding comment for full dyntick mode
- Plugging arch_freq_get_on_cpu into cpufreq_verify_current_freq instead
of in show_cpuinfo_cur_freq to allow the framework to stay more in sync
with potential freq changes
CC: Jonathan Corbet <corbet at lwn.net>
CC: Thomas Gleixner <tglx at linutronix.de>
CC: Ingo Molnar <mingo at redhat.com>
CC: Borislav Petkov <bp at alien8.de>
CC: Dave Hansen <dave.hansen at linux.intel.com>
CC: H. Peter Anvin <hpa at zytor.com>
CC: Phil Auld <pauld at redhat.com>
CC: x86 at kernel.org
CC: linux-doc at vger.kernel.org
Beata Michalska (4):
cpufreq: Introduce an optional cpuinfo_avg_freq sysfs entry
arm64: amu: Delay allocating cpumask for AMU FIE support
arm64: Provide an AMU-based version of arch_freq_get_on_cpu
arm64: Update AMU-based freq scale factor on entering idle
Documentation/admin-guide/pm/cpufreq.rst | 16 ++-
arch/arm64/kernel/topology.c | 144 +++++++++++++++++++----
arch/x86/kernel/cpu/aperfmperf.c | 2 +-
arch/x86/kernel/cpu/proc.c | 7 +-
drivers/cpufreq/Kconfig.x86 | 12 ++
drivers/cpufreq/cpufreq.c | 36 +++++-
include/linux/cpufreq.h | 2 +-
7 files changed, 188 insertions(+), 31 deletions(-)
--
2.25.1
More information about the linux-arm-kernel
mailing list