2010-08-12 09:39:40

by Stephane Eranian

[permalink] [raw]
Subject: [BUG] perf: trace -s script is broken

Hi,

I am trying to understand how you're supposed to use perf trace with a
script using tip-x86.
I am running into several problems.

I did:
$ make prefix=/usr
$ sudo make install prefix=/usr

$ sudo perf record -c 1 -e raw_syscalls:sys_enter -a -- sleep 1
$ sudo perf trace -s sctop.py
Can't open python script "sctop.py": No such file or directory

I looked into this a bit more, and sure enough, it seems perf is only looking
in the current subdir to find sctop.py. However if you do:
$ perf trace -l
List of available trace scripts:
failed-syscalls [comm] system-wide failed syscalls
rw-by-file <comm> r/w activity for a program, by file
rw-by-pid system-wide r/w activity
rwtop [interval] system-wide r/w top
wakeup-latency system-wide min/max/avg wakeup latency
workqueue-stats workqueue stats (ins/exe/create/destroy)
failed-syscalls-by-pid [comm] system-wide failed syscalls, by pid
sctop [comm] [interval] syscall top
syscall-counts-by-pid [comm] system-wide syscall counts, by pid
syscall-counts [comm] system-wide syscall counts

The listing requires trace to look at /usr/libexec/perf-core/scripts/*

I think in builtin-trace.c, you need to add the path prefix, perf_path_exec()
to the script_name for this to work correctly. Or am I missing something here?

Similarly, all the -report scripts installed via make install, still
have the ~/libexec
prefix hardcoded into them. I believe those should be relative to the
install prefix
instead.


2010-08-12 17:56:27

by Tom Zanussi

[permalink] [raw]
Subject: Re: [BUG] perf: trace -s script is broken

Hi,

On Thu, Aug 12, 2010 at 4:39 AM, Stephane Eranian <[email protected]> wrote:
> Hi,
>
> I am trying to understand how you're supposed to use perf trace with a
> script using tip-x86.
> I am running into several problems.
>
> I did:
> $ make prefix=/usr
> $ sudo make install prefix=/usr
>
> $ sudo perf record -c 1 -e raw_syscalls:sys_enter -a -- sleep 1
> $ sudo perf trace -s sctop.py
> Can't open python script "sctop.py": No such file or directory
>
> I looked into this a bit more, and sure enough, it seems perf is only looking
> in the current subdir to find sctop.py. However if you do:
> $ perf trace -l
> List of available trace scripts:
> ?failed-syscalls [comm] ? ? ? ? ? ? ? system-wide failed syscalls
> ?rw-by-file <comm> ? ? ? ? ? ? ? ? ? ?r/w activity for a program, by file
> ?rw-by-pid ? ? ? ? ? ? ? ? ? ? ? ? ? ?system-wide r/w activity
> ?rwtop [interval] ? ? ? ? ? ? ? ? ? ? system-wide r/w top
> ?wakeup-latency ? ? ? ? ? ? ? ? ? ? ? system-wide min/max/avg wakeup latency
> ?workqueue-stats ? ? ? ? ? ? ? ? ? ? ?workqueue stats (ins/exe/create/destroy)
> ?failed-syscalls-by-pid [comm] ? ? ? ?system-wide failed syscalls, by pid
> ?sctop [comm] [interval] ? ? ? ? ? ? ?syscall top
> ?syscall-counts-by-pid [comm] ? ? ? ? system-wide syscall counts, by pid
> ?syscall-counts [comm] ? ? ? ? ? ? ? ?system-wide syscall counts
>
> The listing requires trace to look at /usr/libexec/perf-core/scripts/*
>
> I think in builtin-trace.c, you need to add the path prefix, perf_path_exec()
> to the script_name for this to work correctly. Or am I missing something here?
>
> Similarly, all the -report scripts installed via make install, still
> have the ~/libexec
> prefix hardcoded into them. I believe those should be relative to the
> install prefix
> instead.
>

Yeah, I had previously submitted a patch to fix this, but that patch
introduced another bug.

I'll send an updated v2 patch shortly that should fix both problems...

Thanks,

Tom