2024-03-12 13:25:51

by James Clark

[permalink] [raw]
Subject: [PATCH] perf docs: arm_spe: Clarify more SPE requirements

The question of exactly when KPTI needs to be disabled comes up a lot
because it doesn't always need to be done. Add the relevant kernel
function and some examples that describe the behavior.

Also describe the interrupt requirement and that no error message will
be printed if this isn't met.

Signed-off-by: James Clark <[email protected]>
---
tools/perf/Documentation/perf-arm-spe.txt | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/tools/perf/Documentation/perf-arm-spe.txt b/tools/perf/Documentation/perf-arm-spe.txt
index bf03222e9a68..0a3eda482307 100644
--- a/tools/perf/Documentation/perf-arm-spe.txt
+++ b/tools/perf/Documentation/perf-arm-spe.txt
@@ -116,6 +116,15 @@ Depending on CPU model, the kernel may need to be booted with page table isolati
(kpti=off). If KPTI needs to be disabled, this will fail with a console message "profiling buffer
inaccessible. Try passing 'kpti=off' on the kernel command line".

+For the full criteria that determine whether KPTI needs to be forced off or not, see function
+unmap_kernel_at_el0() in the kernel sources. Common cases where it's not required
+are on the CPUs in kpti_safe_list, or on Arm v8.5+ where FEAT_E0PD is mandatory.
+
+The SPE interrupt must also be described by the firmware. If the module is loaded and KPTI is
+disabled (or isn't required to be disabled) but the SPE PMU still doesn't show in
+/sys/bus/event_source/devices/, then it's possible that the SPE interrupt isn't described by
+ACPI or DT. In this case no warning will be printed by the driver.
+
Capturing SPE with perf command-line tools
------------------------------------------

@@ -199,7 +208,8 @@ Common errors

- "Cannot find PMU `arm_spe'. Missing kernel support?"

- Module not built or loaded, KPTI not disabled (see above), or running on a VM
+ Module not built or loaded, KPTI not disabled, interrupt not described by firmware,
+ or running on a VM. See 'Kernel Requirements' above.

- "Arm SPE CONTEXT packets not found in the traces."

--
2.34.1



2024-03-12 19:56:36

by Ian Rogers

[permalink] [raw]
Subject: Re: [PATCH] perf docs: arm_spe: Clarify more SPE requirements

On Tue, Mar 12, 2024 at 6:25 AM James Clark <[email protected]> wrote:
>
> The question of exactly when KPTI needs to be disabled comes up a lot
> because it doesn't always need to be done. Add the relevant kernel
> function and some examples that describe the behavior.
>
> Also describe the interrupt requirement and that no error message will
> be printed if this isn't met.
>
> Signed-off-by: James Clark <[email protected]>

Reviewed-by: Ian Rogers <[email protected]>

Thanks,
Ian

> ---
> tools/perf/Documentation/perf-arm-spe.txt | 12 +++++++++++-
> 1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/Documentation/perf-arm-spe.txt b/tools/perf/Documentation/perf-arm-spe.txt
> index bf03222e9a68..0a3eda482307 100644
> --- a/tools/perf/Documentation/perf-arm-spe.txt
> +++ b/tools/perf/Documentation/perf-arm-spe.txt
> @@ -116,6 +116,15 @@ Depending on CPU model, the kernel may need to be booted with page table isolati
> (kpti=off). If KPTI needs to be disabled, this will fail with a console message "profiling buffer
> inaccessible. Try passing 'kpti=off' on the kernel command line".
>
> +For the full criteria that determine whether KPTI needs to be forced off or not, see function
> +unmap_kernel_at_el0() in the kernel sources. Common cases where it's not required
> +are on the CPUs in kpti_safe_list, or on Arm v8.5+ where FEAT_E0PD is mandatory.
> +
> +The SPE interrupt must also be described by the firmware. If the module is loaded and KPTI is
> +disabled (or isn't required to be disabled) but the SPE PMU still doesn't show in
> +/sys/bus/event_source/devices/, then it's possible that the SPE interrupt isn't described by
> +ACPI or DT. In this case no warning will be printed by the driver.
> +
> Capturing SPE with perf command-line tools
> ------------------------------------------
>
> @@ -199,7 +208,8 @@ Common errors
>
> - "Cannot find PMU `arm_spe'. Missing kernel support?"
>
> - Module not built or loaded, KPTI not disabled (see above), or running on a VM
> + Module not built or loaded, KPTI not disabled, interrupt not described by firmware,
> + or running on a VM. See 'Kernel Requirements' above.
>
> - "Arm SPE CONTEXT packets not found in the traces."
>
> --
> 2.34.1
>

2024-03-13 09:42:25

by James Clark

[permalink] [raw]
Subject: Re: [PATCH] perf docs: arm_spe: Clarify more SPE requirements



On 12/03/2024 19:56, Ian Rogers wrote:
> On Tue, Mar 12, 2024 at 6:25 AM James Clark <[email protected]> wrote:
>>
>> The question of exactly when KPTI needs to be disabled comes up a lot
>> because it doesn't always need to be done. Add the relevant kernel
>> function and some examples that describe the behavior.
>>
>> Also describe the interrupt requirement and that no error message will
>> be printed if this isn't met.
>>
>> Signed-off-by: James Clark <[email protected]>
>
> Reviewed-by: Ian Rogers <[email protected]>
>
> Thanks,
> Ian
>

Thanks for the review

>> ---
>> tools/perf/Documentation/perf-arm-spe.txt | 12 +++++++++++-
>> 1 file changed, 11 insertions(+), 1 deletion(-)
>>
>> diff --git a/tools/perf/Documentation/perf-arm-spe.txt b/tools/perf/Documentation/perf-arm-spe.txt
>> index bf03222e9a68..0a3eda482307 100644
>> --- a/tools/perf/Documentation/perf-arm-spe.txt
>> +++ b/tools/perf/Documentation/perf-arm-spe.txt
>> @@ -116,6 +116,15 @@ Depending on CPU model, the kernel may need to be booted with page table isolati
>> (kpti=off). If KPTI needs to be disabled, this will fail with a console message "profiling buffer
>> inaccessible. Try passing 'kpti=off' on the kernel command line".
>>
>> +For the full criteria that determine whether KPTI needs to be forced off or not, see function
>> +unmap_kernel_at_el0() in the kernel sources. Common cases where it's not required
>> +are on the CPUs in kpti_safe_list, or on Arm v8.5+ where FEAT_E0PD is mandatory.
>> +
>> +The SPE interrupt must also be described by the firmware. If the module is loaded and KPTI is
>> +disabled (or isn't required to be disabled) but the SPE PMU still doesn't show in
>> +/sys/bus/event_source/devices/, then it's possible that the SPE interrupt isn't described by
>> +ACPI or DT. In this case no warning will be printed by the driver.
>> +
>> Capturing SPE with perf command-line tools
>> ------------------------------------------
>>
>> @@ -199,7 +208,8 @@ Common errors
>>
>> - "Cannot find PMU `arm_spe'. Missing kernel support?"
>>
>> - Module not built or loaded, KPTI not disabled (see above), or running on a VM
>> + Module not built or loaded, KPTI not disabled, interrupt not described by firmware,
>> + or running on a VM. See 'Kernel Requirements' above.
>>
>> - "Arm SPE CONTEXT packets not found in the traces."
>>
>> --
>> 2.34.1
>>
>

2024-03-15 20:32:16

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH] perf docs: arm_spe: Clarify more SPE requirements

On Wed, Mar 13, 2024 at 09:41:54AM +0000, James Clark wrote:
>
>
> On 12/03/2024 19:56, Ian Rogers wrote:
> > On Tue, Mar 12, 2024 at 6:25 AM James Clark <[email protected]> wrote:
> >>
> >> The question of exactly when KPTI needs to be disabled comes up a lot
> >> because it doesn't always need to be done. Add the relevant kernel
> >> function and some examples that describe the behavior.
> >>
> >> Also describe the interrupt requirement and that no error message will
> >> be printed if this isn't met.
> >>
> >> Signed-off-by: James Clark <[email protected]>
> >
> > Reviewed-by: Ian Rogers <[email protected]>

> Thanks for the review

Thanks, applied to perf-tools-next,

- Arnaldo

> >> ---
> >> tools/perf/Documentation/perf-arm-spe.txt | 12 +++++++++++-
> >> 1 file changed, 11 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/tools/perf/Documentation/perf-arm-spe.txt b/tools/perf/Documentation/perf-arm-spe.txt
> >> index bf03222e9a68..0a3eda482307 100644
> >> --- a/tools/perf/Documentation/perf-arm-spe.txt
> >> +++ b/tools/perf/Documentation/perf-arm-spe.txt
> >> @@ -116,6 +116,15 @@ Depending on CPU model, the kernel may need to be booted with page table isolati
> >> (kpti=off). If KPTI needs to be disabled, this will fail with a console message "profiling buffer
> >> inaccessible. Try passing 'kpti=off' on the kernel command line".
> >>
> >> +For the full criteria that determine whether KPTI needs to be forced off or not, see function
> >> +unmap_kernel_at_el0() in the kernel sources. Common cases where it's not required
> >> +are on the CPUs in kpti_safe_list, or on Arm v8.5+ where FEAT_E0PD is mandatory.
> >> +
> >> +The SPE interrupt must also be described by the firmware. If the module is loaded and KPTI is
> >> +disabled (or isn't required to be disabled) but the SPE PMU still doesn't show in
> >> +/sys/bus/event_source/devices/, then it's possible that the SPE interrupt isn't described by
> >> +ACPI or DT. In this case no warning will be printed by the driver.
> >> +
> >> Capturing SPE with perf command-line tools
> >> ------------------------------------------
> >>
> >> @@ -199,7 +208,8 @@ Common errors
> >>
> >> - "Cannot find PMU `arm_spe'. Missing kernel support?"
> >>
> >> - Module not built or loaded, KPTI not disabled (see above), or running on a VM
> >> + Module not built or loaded, KPTI not disabled, interrupt not described by firmware,
> >> + or running on a VM. See 'Kernel Requirements' above.
> >>
> >> - "Arm SPE CONTEXT packets not found in the traces."
> >>
> >> --
> >> 2.34.1
> >>
> >