From: Ionela Voinescu <firstname.lastname@example.org> To: email@example.com, firstname.lastname@example.org, email@example.com, firstname.lastname@example.org, email@example.com, firstname.lastname@example.org, email@example.com, firstname.lastname@example.org, email@example.com, firstname.lastname@example.org Cc: email@example.com, firstname.lastname@example.org, email@example.com, firstname.lastname@example.org, email@example.com, firstname.lastname@example.org, email@example.com, firstname.lastname@example.org Subject: [PATCH v3 0/7] arm64: ARMv8.4 Activity Monitors support Date: Tue, 11 Feb 2020 18:45:35 +0000 [thread overview] Message-ID: <email@example.com> (raw) These patches introduce support for the Activity Monitors Unit (AMU) CPU extension, an optional extension in ARMv8.4 CPUs. This provides performance counters intended for system management use. Two of these counters are then used to compute the frequency scale correction factor needed to achieve frequency invariance. With the CONFIG_ARM64_AMU_EXTN enabled and lacking the disable_amu kernel parameter, the kernel is able to safely run a mix of CPUs with and without support for the AMU extension. The AMU capability is unconditionally enabled in the kernel as to allow any late CPU to use the feature: the cpu_enable function will be called for all CPUs that match the criteria, including secondary and hotplugged CPUs, marking this feature as present on that respective CPU. To be noted that firmware must implement AMU support when running on CPUs that present the activity monitors extension: allow access to the registers from lower exception levels, enable the counters, implement save and restore functionality. More details can be found in the documentation. Given that the activity counters inform on activity on the CPUs, and that not all CPUs might implement the extension, for functional and security reasons, it's best to disable access to the AMU registers from userspace (EL0) and KVM guests. In the last patch of the series, two of the AMU counters are used to compute the frequency scale factor needed to achieve frequency invariance of signals in the scheduler, based on an interface added to support counter-based frequency invariance - arch_scale_freq_tick. The interface and update point for the counter-based frequency scale factor is based on the similar approach in the patch that introduces frequency invariance for x86 . The current series is based on tip/sched/core. Testing: - Build tested for multiple architectures and defconfigs. - AMU feature detection, EL0 and KVM guest access to AMU registers, feature support in firmware (version 1.5 and later of the ARM Trusted Firmware) was tested on an Armv8-A Base Platform FVP: Architecture Envelope Model  (supports version 8.0 to 8.5), with the following configurations: cluster0.has_arm_v8-4=1 cluster1.has_arm_v8-4=1 cluster0.has_amu=1 cluster1.has_amu=1 v2 -> v3: - v2 can be found at  - [1/7] used cpumask instead of per-cpu variable to flag AMU presence as; introduced disable_amu kernel parameter; removed ftr_id_pfr0 AMU bits - recommended by Suzuki. - [2/7] replaced obscure label as recommended by Valentin. - [3/7] clarified activate_traps_vhe comment - [4/7] dropped changes in arm64/cpu-feature-registers.txt; removed use of variable names - recommended by Suzuki - previous [5/6] - dropped as  as added to tip/sched/core - [5/7] new patch introduced to cleanly obtain maximum hardware frequency from cpufreq - [6/7] (previously [6/6]): - Removed use of workqueues by limiting the validation work done on each cpu to the setting of the reference per-cpu counter variables. This is now called directly from cpu_enable (cpufeature.c). Also, further CPU, policy and system validation is done in a late_initcall_sync function - waits for deferred probe work to finish as well to ensure the maximum frequency is set by either cpufreq drivers or platform drivers - recommended by Lukasz. - Improved AMU use detection for CPUs in arch_set_freq_scale - recommended by Lukasz. - Properly validated arch_max_freq_scale and added detailed documentation for how arch_max_freq_scale and freq_scale are obtained based on counters - recommended by Valentin. - Overall - limited tight coupling between AMU use and cpufreq (use of maximum frequency information and policy validation). - [7/7] introduced patch to warn if arch_timer_rate is too low - functionality provided by Valentin. v1 -> v2: - v1 can be found at  - Added patches that use the counters for the scheduler's frequency invariance engine - In patch arm64: add support for the AMU extension v1 - - Defined an accessor function cpu_has_amu_feat to allow a read of amu_feat only from the current CPU, to ensure the safe use of the per-cpu variable for the current user (arm64 topology driver) and future users. - Modified type of amu_feat from bool to u8 to satisfy sparse checker's warning 'expression using sizeof _Bool [sparse]', as the size of bool is compiler dependent.  https://firstname.lastname@example.org/  https://developer.arm.com/tools-and-software/simulation-models/fixed-virtual-platforms  https://email@example.com/  https://firstname.lastname@example.org/ Ionela Voinescu (6): arm64: add support for the AMU extension v1 arm64: trap to EL1 accesses to AMU counters from EL0 arm64/kvm: disable access to AMU registers from kvm guests Documentation: arm64: document support for the AMU extension cpufreq: add function to get the hardware max frequency arm64: use activity monitors for frequency invariance Valentin Schneider (1): clocksource/drivers/arm_arch_timer: validate arch_timer_rate .../admin-guide/kernel-parameters.txt | 10 + Documentation/arm64/amu.rst | 114 +++++++++++ Documentation/arm64/booting.rst | 14 ++ Documentation/arm64/index.rst | 1 + arch/arm64/Kconfig | 31 +++ arch/arm64/include/asm/assembler.h | 10 + arch/arm64/include/asm/cpucaps.h | 3 +- arch/arm64/include/asm/cpufeature.h | 5 + arch/arm64/include/asm/kvm_arm.h | 1 + arch/arm64/include/asm/sysreg.h | 38 ++++ arch/arm64/include/asm/topology.h | 16 ++ arch/arm64/kernel/cpufeature.c | 101 ++++++++++ arch/arm64/kernel/topology.c | 185 ++++++++++++++++++ arch/arm64/kvm/hyp/switch.c | 14 +- arch/arm64/kvm/sys_regs.c | 93 ++++++++- arch/arm64/mm/proc.S | 3 + drivers/base/arch_topology.c | 8 + drivers/clocksource/arm_arch_timer.c | 18 +- drivers/cpufreq/cpufreq.c | 20 ++ include/linux/cpufreq.h | 5 + include/linux/topology.h | 7 + 21 files changed, 690 insertions(+), 7 deletions(-) create mode 100644 Documentation/arm64/amu.rst base-commit: 25ac227a25ac946e0356772012398cd1710a8bab -- 2.17.1
next reply other threads:[~2020-02-11 18:46 UTC|newest] Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-02-11 18:45 Ionela Voinescu [this message] 2020-02-11 18:45 ` [PATCH v3 1/7] arm64: add support for the AMU extension v1 Ionela Voinescu 2020-02-12 11:30 ` Suzuki Kuruppassery Poulose 2020-02-12 14:54 ` Valentin Schneider 2020-02-12 16:10 ` Ionela Voinescu 2020-02-12 16:20 ` Suzuki Kuruppassery Poulose 2020-02-12 18:20 ` Ionela Voinescu 2020-02-12 19:24 ` Suzuki K Poulose 2020-02-12 20:19 ` Ionela Voinescu 2020-02-12 16:24 ` Vladimir Murzin 2020-02-12 18:27 ` Ionela Voinescu 2020-02-11 18:45 ` [PATCH v3 2/7] arm64: trap to EL1 accesses to AMU counters from EL0 Ionela Voinescu 2020-02-12 11:44 ` Suzuki Kuruppassery Poulose 2020-02-12 15:36 ` Valentin Schneider 2020-02-11 18:45 ` [PATCH v3 3/7] arm64/kvm: disable access to AMU registers from kvm guests Ionela Voinescu 2020-02-12 15:36 ` Valentin Schneider 2020-02-12 16:33 ` Suzuki Kuruppassery Poulose 2020-02-11 18:45 ` [PATCH v3 4/7] Documentation: arm64: document support for the AMU extension Ionela Voinescu 2020-02-12 15:36 ` Valentin Schneider 2020-02-11 18:45 ` [PATCH v3 5/7] cpufreq: add function to get the hardware max frequency Ionela Voinescu 2020-02-12 4:14 ` Viresh Kumar 2020-02-13 11:59 ` Valentin Schneider 2020-02-13 12:59 ` Ionela Voinescu 2020-02-13 15:22 ` Valentin Schneider 2020-02-11 18:45 ` [PATCH v3 6/7] arm64: use activity monitors for frequency invariance Ionela Voinescu 2020-02-12 18:59 ` Lukasz Luba 2020-02-13 9:47 ` Ionela Voinescu 2020-02-17 16:59 ` Valentin Schneider 2020-02-23 18:49 ` Ionela Voinescu 2020-02-11 18:45 ` [PATCH v3 7/7] clocksource/drivers/arm_arch_timer: validate arch_timer_rate Ionela Voinescu 2020-02-12 9:30 ` Valentin Schneider 2020-02-12 10:32 ` Ionela Voinescu 2020-02-12 10:01 ` Lukasz Luba 2020-02-12 10:12 ` Marc Zyngier 2020-02-12 10:54 ` Ionela Voinescu 2020-02-12 10:55 ` Lukasz Luba 2020-02-12 11:10 ` Marc Zyngier 2020-02-12 11:43 ` Lukasz Luba 2020-02-12 11:12 ` Valentin Schneider 2020-02-14 0:35 ` Thomas Gleixner 2020-02-14 15:45 ` Ionela Voinescu 2020-02-14 15:57 ` Ionela Voinescu
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --subject='Re: [PATCH v3 0/7] arm64: ARMv8.4 Activity Monitors support' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).