[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