From mboxrd@z Thu Jan 1 00:00:00 1970 From: Arnaldo Carvalho de Melo Subject: Re: [PATCH 4/6] perf script: dump software events too Date: Tue, 1 Mar 2011 13:49:26 -0300 Message-ID: <20110301164926.GD26068@ghostprotocols.net> References: <1298865151-23656-1-git-send-email-daahern@cisco.com> <1298865151-23656-5-git-send-email-daahern@cisco.com> <4D6D004F.5010602@cisco.com> <4D6D1AA8.4060809@cisco.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from mail-gx0-f174.google.com ([209.85.161.174]:56994 "EHLO mail-gx0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754000Ab1CAQte (ORCPT ); Tue, 1 Mar 2011 11:49:34 -0500 Content-Disposition: inline In-Reply-To: <4D6D1AA8.4060809@cisco.com> Sender: linux-perf-users-owner@vger.kernel.org List-ID: To: David Ahern Cc: Frederic Weisbecker , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, mingo@elte.hu, peterz@infradead.org, paulus@samba.org, tglx@linutronix.de 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