Re: [PATCH] perf record: Make logs more readable for event open failures

From: Ian Rogers

Date: Wed Feb 04 2026 - 12:29:36 EST


On Wed, Feb 4, 2026 at 6:26 AM Leo Yan <leo.yan@xxxxxxx> wrote:
>
> Since commit ee27476fa300 ("perf record: Skip don't fail for events that
> don't open"), if a user does not have permission to access a PMU event,
> perf reports:
>
> perf record -e cs_etm// -C 3 -- ls
> Error:
> Failure to open event 'cs_etm//u' on PMU 'cs_etm' which will be removed.
> No fallback found for 'cs_etm//u' for error 13
> Error:
> Failure to open event 'dummy:u' on PMU 'software' which will be removed.
> No fallback found for 'dummy:u' for error 13
> Error:
> Failure to open any events for recording.
>
> The log is not very helpful, as no clear indication of what "error 13"
> means or how to address the issue.
>
> This commit restores evsel__open_strerror() to generate a readable error
> message and print it out:
>
> perf record -e cs_etm// -C 3 -- ls
> Error:
> Failure to open event 'cs_etm//' on PMU 'cs_etm' which will be removed.
> Access to performance monitoring and observability operations is limited.
> Consider adjusting /proc/sys/kernel/perf_event_paranoid setting to open
> access to performance monitoring and observability operations for processes
> without CAP_PERFMON, CAP_SYS_PTRACE or CAP_SYS_ADMIN Linux capability.
> More information can be found at 'Perf events and tool security' document:
> https://www.kernel.org/doc/html/latest/admin-guide/perf-security.html
> perf_event_paranoid setting is 1:
> -1: Allow use of (almost) all events by all users
> Ignore mlock limit after perf_event_mlock_kb without CAP_IPC_LOCK
> >= 0: Disallow raw and ftrace function tracepoint access
> >= 1: Disallow CPU event access
> >= 2: Disallow kernel profiling
> To make the adjusted perf_event_paranoid setting permanent preserve it
> in /etc/sysctl.conf (e.g. kernel.perf_event_paranoid = <setting>)
> Error:
> Failure to open event 'dummy:u' on PMU 'software' which will be removed.
> Access to performance monitoring and observability operations is limited.
> Consider adjusting /proc/sys/kernel/perf_event_paranoid setting to open
> access to performance monitoring and observability operations for processes
> without CAP_PERFMON, CAP_SYS_PTRACE or CAP_SYS_ADMIN Linux capability.
> More information can be found at 'Perf events and tool security' document:
> https://www.kernel.org/doc/html/latest/admin-guide/perf-security.html
> perf_event_paranoid setting is 1:
> -1: Allow use of (almost) all events by all users
> Ignore mlock limit after perf_event_mlock_kb without CAP_IPC_LOCK
> >= 0: Disallow raw and ftrace function tracepoint access
> >= 1: Disallow CPU event access
> >= 2: Disallow kernel profiling
> To make the adjusted perf_event_paranoid setting permanent preserve it
> in /etc/sysctl.conf (e.g. kernel.perf_event_paranoid = <setting>)
> Error:
> Failure to open any events for recording.
>
> Signed-off-by: Leo Yan <leo.yan@xxxxxxx>

Lgtm and sorry for making things worse - I believe it was motivated by
trying to avoid spammy warnings.

Reviewed-by: Ian Rogers <irogers@xxxxxxxxxx>

Thanks,
Ian

> ---
> tools/perf/builtin-record.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> index 2584d0d8bc820676da60bdf5f59d41371d85a93a..aa8dc3e18190dd7db1ed5e3c7673fde8d5785a26 100644
> --- a/tools/perf/builtin-record.c
> +++ b/tools/perf/builtin-record.c
> @@ -1404,6 +1404,7 @@ static int record__open(struct record *rec)
> }
> #endif
> if (report_error || verbose > 0) {
> + evsel__open_strerror(pos, &opts->target, errno, msg, sizeof(msg));
> ui__error("Failure to open event '%s' on PMU '%s' which will be "
> "removed.\n%s\n",
> evsel__name(pos), evsel__pmu_name(pos), msg);
>
> ---
> base-commit: 5fd0a1df5d05ad066e5618ccdd3d0fa6cb686c27
> change-id: 20260204-perf_improve_log_for_open_event_failures-deda2c61b93d
>
> Best regards,
> --
> Leo Yan <leo.yan@xxxxxxx>
>