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

Athira Rajeev atrajeev at linux.vnet.ibm.com
Thu Feb 2 15:17:32 AEDT 2023



> On 02-Feb-2023, at 6:20 AM, Arnaldo Carvalho de Melo <acme at kernel.org> wrote:
> 
> 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

Thanks Arnaldo

Athira
> 
> 
>> 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