[PATCH] tools/perf: Fix usage of perf probe when libtraceevent is missing

Arnaldo Carvalho de Melo acme at kernel.org
Thu Feb 2 11:50:17 AEDT 2023


Em Tue, Jan 31, 2023 at 07:17:48PM +0530, Athira Rajeev escreveu:
> While parsing the tracepoint events in parse_events_add_tracepoint()
> function, code checks for HAVE_LIBTRACEEVENT support. This is needed
> since libtraceevent is necessary for tracepoint. But while adding
> probe points, check for LIBTRACEEVENT is not done in case of perf probe.
> Hence, in environment with missing libtraceevent-devel, it is
> observed that adding a probe point shows below message though it
> can't be used via perf record.

Thanks, applied.

- Arnaldo

 
> Example:
> Adding probe point:
> 	./perf probe 'vfs_getname=getname_flags:72 pathname=result->name:string'
> 	Added new event:
> 	  probe:vfs_getname    (on getname_flags:72 with pathname=result->name:string)
> 
> 	You can now use it in all perf tools, such as:
> 
> 		perf record -e probe:vfs_getname -aR sleep 1
> 
> But trying perf record:
> 	./perf  record -e probe:vfs_getname -aR sleep 1
> 	event syntax error: 'probe:vfs_getname'
> 				\___ unsupported tracepoint
> 	libtraceevent is necessary for tracepoint support
> 	Run 'perf list' for a list of valid events
> 
> The builtin tool like perf record needs libtraceevent to
> parse tracefs. But still the probe can be used by enabling
> via tracefs. Patch fixes the probe usage message to the user
> based on presence of libtraceevent. With the fix,
> 
>  # ./perf probe 'pmu:myprobe=schedule'
>  Added new event:
>    pmu:myprobe          (on schedule)
> 
>  perf is not linked with libtraceevent, to use the new probe you can use tracefs:
> 
> 	cd /sys/kernel/tracing/
> 	echo 1 > events/pmu/myprobe/enable
> 	echo 1 > tracing_on
> 	cat trace_pipe
> 	Before removing the probe, echo 0 > events/pmu/myprobe/enable
> 
> Signed-off-by: Athira Rajeev <atrajeev at linux.vnet.ibm.com>
> ---
>  tools/perf/builtin-probe.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c
> index ed73d0b89ca2..e72f6cea76f7 100644
> --- a/tools/perf/builtin-probe.c
> +++ b/tools/perf/builtin-probe.c
> @@ -383,9 +383,18 @@ static int perf_add_probe_events(struct perf_probe_event *pevs, int npevs)
>  
>  	/* Note that it is possible to skip all events because of blacklist */
>  	if (event) {
> +#ifndef HAVE_LIBTRACEEVENT
> +		pr_info("\nperf is not linked with libtraceevent, to use the new probe you can use tracefs:\n\n");
> +		pr_info("\tcd /sys/kernel/tracing/\n");
> +		pr_info("\techo 1 > events/%s/%s/enable\n", group, event);
> +		pr_info("\techo 1 > tracing_on\n");
> +		pr_info("\tcat trace_pipe\n");
> +		pr_info("\tBefore removing the probe, echo 0 > events/%s/%s/enable\n", group, event);
> +#else
>  		/* Show how to use the event. */
>  		pr_info("\nYou can now use it in all perf tools, such as:\n\n");
>  		pr_info("\tperf record -e %s:%s -aR sleep 1\n\n", group, event);
> +#endif
>  	}
>  
>  out_cleanup:
> -- 
> 2.39.0
> 

-- 

- Arnaldo


More information about the Linuxppc-dev mailing list