From: Feng Tang <feng.tang@intel.com>
To: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: David Ahern <dsahern@gmail.com>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@elte.hu>, <linux-kernel@vger.kernel.org>,
Robert Richter <robert.richter@amd.com>,
Andi Kleen <andi@firstfloor.org>,
Stephane Eranian <eranian@google.com>
Subject: Re: [PATCH v3 3/3] perf script/python: Pass event/thread/dso name and symbol info to event handler in python
Date: Thu, 28 Jun 2012 16:50:27 +0800 [thread overview]
Message-ID: <20120628165027.43806b3d@feng-i7> (raw)
In-Reply-To: <20120627185817.GD20530@infradead.org>
Hi Arnaldo,
On Wed, 27 Jun 2012 15:58:17 -0300
Arnaldo Carvalho de Melo <acme@redhat.com> wrote:
> Em Mon, Jun 18, 2012 at 02:10:39PM +0800, Feng Tang escreveu:
> > Also as suggested by Arnaldo, pack all these parameters to a dictionary,
> > which is more expandable for adding new parameters while keep the
> > compatibility for old scripts.
> >
> > Signed-off-by: Feng Tang <feng.tang@intel.com>
> > ---
> > .../util/scripting-engines/trace-event-python.c | 32
> > +++++++++++++++---- 1 files changed, 25 insertions(+), 7 deletions(-)
> >
> > diff --git a/tools/perf/util/scripting-engines/trace-event-python.c
> > b/tools/perf/util/scripting-engines/trace-event-python.c index
> > 97f4fad..e8ac480 100644 ---
> > a/tools/perf/util/scripting-engines/trace-event-python.c +++
> > b/tools/perf/util/scripting-engines/trace-event-python.c @@ -336,15 +336,23
> > @@ static void python_process_general_event(union perf_event *pevent
> > __unused, struct machine *machine __unused, struct addr_location *al)
> > {
> > - PyObject *handler, *retval, *t;
> > + PyObject *handler, *retval, *t, *dict;
> > static char handler_name[64];
> > unsigned n = 0;
> > - void *data = sample->raw_data;
> > + struct thread *thread = al->thread;
> >
> > + /*
> > + * Use the MAX_FIELDS to make the function expandable, though
> > + * currently there is only one itme for the tuple.
> > + */
> > t = PyTuple_New(MAX_FIELDS);
> > if (!t)
> > Py_FatalError("couldn't create Python tuple");
> >
> > + dict = PyDict_New();
> > + if (!dict)
> > + Py_FatalError("couldn't create Python dictionary");
> > +
> > snprintf(handler_name, sizeof(handler_name), "%s",
> > "process_event");
> > handler = PyDict_GetItemString(main_dict, handler_name);
> > @@ -353,14 +361,23 @@ static void python_process_general_event(union
> > perf_event *pevent __unused, goto exit;
> > }
> >
> > - /* Pass 4 parameters: event_attr, perf_sample, raw data, thread
> > name */
> > - PyTuple_SetItem(t, n++, PyString_FromStringAndSize(
> > + PyDict_SetItemString(dict, "ev_name",
> > PyString_FromString(event_name(evsel)));
> > + PyDict_SetItemString(dict, "attr", PyString_FromStringAndSize(
> > (const char *)&evsel->attr, sizeof(evsel->attr)));
> > - PyTuple_SetItem(t, n++, PyString_FromStringAndSize(
> > + PyDict_SetItemString(dict, "sample", PyString_FromStringAndSize(
> > (const char *)sample, sizeof(*sample)));
> > - PyTuple_SetItem(t, n++, PyString_FromStringAndSize(
> > - data, sample->raw_size));
> > + PyDict_SetItemString(dict, "raw_buf", PyString_FromStringAndSize(
> > + (const char *)sample->raw_data, sample->raw_size));
> > + PyDict_SetItemString(dict, "comm",
> > + PyString_FromString(thread->comm));
> > + PyDict_SetItemString(dict, "dso",
> > + PyString_FromString(al->map->dso->name));
> > + if (al->sym) {
> > + PyDict_SetItemString(dict, "symbol",
> > + PyString_FromString(al->sym->name));
> > + }
> >
> > + PyTuple_SetItem(t, n++, dict);
>
> Now old scrips will break, as the tuple they expect:
>
> (attr, sample, raw_data)
>
> will not be there.
Actually, there are no such scripts out. Current perf python script only
supports the trace point type, while perl scriptt has the support for
general events. It is my first patch "perf script: Add general python
handler to process non-tracepoint events" which bring this (attr, sample,
raw_data) in to be on the same page as perl. So this won't be a problem
when the 3 patches are merged together.
>
> The first two patches in this series don't apply anymore, please find
> them attached fixed, please check if they work as expected.
Thanks a lot for fixing them, I'll generate perf tool patch against the
"perf/core" branch of your git tree on kernel.org from now on.
Btw, I have 2 more python scripts based on these patches, will add them
to this serie for your review.
Thanks,
Feng
next prev parent reply other threads:[~2012-06-28 8:54 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-18 6:10 [PATCH v3 0/3] perf script: Add general event support to event handler of python script Feng Tang
2012-06-18 6:10 ` [PATCH v3 1/3] perf script: Add general python handler to process non-tracepoint events Feng Tang
2012-06-18 6:10 ` [PATCH v3 2/3] perf script: Replace "struct thread" with "struct addr_location" as a parameter for "process_event()" Feng Tang
2012-06-18 6:10 ` [PATCH v3 3/3] perf script/python: Pass event/thread/dso name and symbol info to event handler in python Feng Tang
2012-06-27 18:58 ` Arnaldo Carvalho de Melo
2012-06-28 8:50 ` Feng Tang [this message]
2012-06-28 17:29 ` Arnaldo Carvalho de Melo
2012-06-29 1:21 ` Feng Tang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120628165027.43806b3d@feng-i7 \
--to=feng.tang@intel.com \
--cc=acme@redhat.com \
--cc=andi@firstfloor.org \
--cc=dsahern@gmail.com \
--cc=eranian@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=robert.richter@amd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox