Re: [PATCH v2] perf tool: Provide an option to print perf_event_open args and return value

Arnaldo Carvalho de Melo
2019-11-12T11:37:55Z

Em Tue, Nov 12, 2019 at 08:29:10AM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Fri, Nov 08, 2019 at 12:00:09PM +0100, Jiri Olsa escreveu:
> > On Fri, Nov 08, 2019 at 03:11:28PM +0530, Ravi Bangoria wrote:
> > > Perf record with verbose=2 already prints this information along with
> > > whole lot of other traces which requires lot of scrolling. Introduce
> > > an option to print only perf_event_open() arguments and return value.
> > >
> > > Sample o/p:
> > > $ ./perf --debug perf-event-open=1 record -- ls > /dev/null
> > > ------------------------------------------------------------
> > > perf_event_attr:
> > > size 112
> > > { sample_period, sample_freq } 4000
> > > sample_type IP|TID|TIME|PERIOD
> > > read_format ID
> > > disabled 1
> > > inherit 1
> > > exclude_kernel 1
> > > mmap 1
> > > comm 1
> > > freq 1
> > > enable_on_exec 1
> > > task 1
> > > precise_ip 3
> > > sample_id_all 1
> > > exclude_guest 1
> > > mmap2 1
> > > comm_exec 1
> > > ksymbol 1
> > > bpf_event 1
> > > ------------------------------------------------------------
> > > sys_perf_event_open: pid 4308 cpu 0 group_fd -1 flags 0x8 = 4
> > > sys_perf_event_open: pid 4308 cpu 1 group_fd -1 flags 0x8 = 5
> > > sys_perf_event_open: pid 4308 cpu 2 group_fd -1 flags 0x8 = 6
> > > sys_perf_event_open: pid 4308 cpu 3 group_fd -1 flags 0x8 = 8
> > > sys_perf_event_open: pid 4308 cpu 4 group_fd -1 flags 0x8 = 9
> > > sys_perf_event_open: pid 4308 cpu 5 group_fd -1 flags 0x8 = 10
> > > sys_perf_event_open: pid 4308 cpu 6 group_fd -1 flags 0x8 = 11
> > > sys_perf_event_open: pid 4308 cpu 7 group_fd -1 flags 0x8 = 12
> > > ------------------------------------------------------------
> > > perf_event_attr:
> > > type 1
> > > size 112
> > > config 0x9
> > > watermark 1
> > > sample_id_all 1
> > > bpf_event 1
> > > { wakeup_events, wakeup_watermark } 1
> > > ------------------------------------------------------------
> > > sys_perf_event_open: pid -1 cpu 0 group_fd -1 flags 0x8
> > > sys_perf_event_open failed, error -13
> > > [ perf record: Woken up 1 times to write data ]
> > > [ perf record: Captured and wrote 0.002 MB perf.data (9 samples) ]
> > >
> > > Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
> > > ---
> > > v1->v2:
> > > - man page updates.
> >
> > Acked-by: Jiri Olsa <jolsa@kernel.org>
>
> [root@quaco ~]# perf test -v python
> 18: 'import perf' in python :
> --- start ---
> test child forked, pid 19237
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> ImportError: /tmp/build/perf/python/perf.so: undefined symbol: debug_peo_args
> test child finished with -1
> ---- end ----
> 'import perf' in python: FAILED!
> [root@quaco ~]#
>
> Please always test your changes using 'perf test', before and after, to
> see if some regression is being added. I'm trying to fix this one.

I added this to fix this issue,

- Thanks,

- Arnaldo

[acme@quaco perf]$ git diff -U5
diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c
index 25118605f3f8..83212c65848b 100644
--- a/tools/perf/util/python.c
+++ b/tools/perf/util/python.c
@@ -63,10 +63,11 @@ struct perf_env perf_env;
/*
* Support debug printing even though util/debug.c is not linked. That means
* implementing 'verbose' and 'eprintf'.
*/
int verbose;
+int debug_peo_args;

int eprintf(int level, int var, const char *fmt, ...);

int eprintf(int level, int var, const char *fmt, ...)
{
[acme@quaco perf]$