[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20110301164926.GD26068@ghostprotocols.net>
Date: Tue, 1 Mar 2011 13:49:26 -0300
From: Arnaldo Carvalho de Melo <acme@...stprotocols.net>
To: David Ahern <daahern@...co.com>
Cc: Frederic Weisbecker <fweisbec@...il.com>,
linux-perf-users@...r.kernel.org, linux-kernel@...r.kernel.org,
mingo@...e.hu, peterz@...radead.org, paulus@...ba.org,
tglx@...utronix.de
Subject: Re: [PATCH 4/6] perf script: dump software events too
Em Tue, Mar 01, 2011 at 09:11:20AM -0700, David Ahern escreveu:
> On 03/01/2011 08:11 AM, Frederic Weisbecker wrote:
> > Why shouldn't it be designed to dump software events? It's called print_event().
> > Its current version is rather something I would call "limited". But it
> > was not designed to be limited.
> That's because its origins are trace specific. Per last week's thread,
> perf-script was perf-trace until Nov 2010. perf-script deals with
> tracepoints.
> > Ideally, we should have print_tracepoint_event() in
> > trace-event-parse.c, print_software_event()
> > where you want, and have print_event() in builtin-script.c that wraps on those.
>
> process_event does not take the event sample, it takes elements of it:
>
> struct scripting_ops {
> ...
> void (*process_event) (int cpu, void *data, int size,
> unsigned long long nsecs, char *comm);
I still have to read the entire thread, but this definetely should
receive "struct perf_sample", i.e. the parsed sample and the 'struct
thread' from where it can get the comm, etc
Look at the process_event for builtin-script.c:
scripting_ops->process_event(sample->cpu,
sample->raw_data,
sample->raw_size,
sample->time,
thread->comm);
I'd change it to:
scripting_ops->process_event(event, sample, thread);
Or even short circuit it completely modulo debugging, becoming:
static int process_sample_event(union perf_event *event,
struct perf_sample *sample,
struct perf_session *session)
{
if (debug_mode) {
if (sample->time < last_timestamp) {
pr_err("Samples misordered, previous: %" PRIu64
" this: %" PRIu64 "\n", last_timestamp,
sample->time);
nr_unordered++;
}
last_timestamp = sample->time;
} else {
scripting_ops->process_event(event, sample, session);
session->hists.stats.total_period += sample->period;
}
return 0;
}
Script modules may then do their thread accounting if comms are asked
for, etc.
- Arnaldo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists