All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: David Ahern <dsahern@gmail.com>,
	Namhyung Kim <namhyung@kernel.org>,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: perf/tracepoints access to interpreted strings
Date: Mon, 20 Apr 2015 16:46:16 -0400	[thread overview]
Message-ID: <20150420164616.4227fae9@gandalf.local.home> (raw)
In-Reply-To: <20150415180927.GR16027@kernel.org>

On Wed, 15 Apr 2015 15:09:27 -0300
Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Em Wed, Apr 15, 2015 at 10:20:08AM -0600, David Ahern escreveu:
> > I was hoping you could provide points on how to get access to an interpreted
> > field in a tracepoint within perf.
>  
> > This is an example of the tracepoint:
>  
> > # cat /sys/kernel/debug/tracing/events/irq/softirq_exit/format
> > name: softirq_exit
> > ID: 99
> > format:
> > 	field:unsigned short common_type;	offset:0;	size:2;	signed:0;
> > 	field:unsigned char common_flags;	offset:2;	size:1;	signed:0;
> > 	field:unsigned char common_preempt_count;	offset:3;	size:1;	signed:0;
> > 	field:int common_pid;	offset:4;	size:4;	signed:1;
> > 	field:int common_padding;	offset:8;	size:4;	signed:1;
> > 
> > 	field:unsigned int vec;	offset:12;	size:4;	signed:0;
> > 
> > print fmt: "vec=%u [action=%s]", REC->vec, __print_symbolic(REC->vec, {
> > HI_SOFTIRQ, "HI" }, { TIMER_SOFTIRQ, "TIMER" }, { NET_TX_SOFTIRQ, "NET_TX"
> > }, { NET_RX_SOFTIRQ, "NET_RX" }, { BLOCK_SOFTIRQ, "BLOCK" }, {
> > BLOCK_IOPOLL_SOFTIRQ, "BLOCK_IOPOLL" }, { TASKLET_SOFTIRQ, "TASKLET" }, {
> > SCHED_SOFTIRQ, "SCHED" }, { HRTIMER_SOFTIRQ, "HRTIMER" }, { RCU_SOFTIRQ,
> > "RCU" })
>  
> > I would like to programmatically extract the action string. 'perf script'
> > prints the samples fine which suggests libtraceevent extracts the
> > information somehow.
>  
> > Can you provide a suggestion -- something along the lines of
> > perf_evsel__intval() or perf_evsel__rawptr()?
> 
> We'll gonna have to parse the "print fmt" thing and look for entries
> surrounded by [], then match it with the list of parameters, so that we
> can end up with a:
> 
> 	const char *perf_evsel__enum_entry(struct perf_evsel *evsel,
> 					   struct perf_sample *sample,
> 					   const char *enum_name,
> 					   int value);
> 
> That would return one of "TIMER", "NET_TX", etc, that is, 0,
> 1, N.
> 
> If it is strictly an enum, i.e. no holes and just by looking at the
> "format" file above I don't see how it could have holes, albeit enums
> may have, we can as well have this:
> 
> 	const char *perf_evsel__enum(struct perf_evsel *evsel,
> 				     struct perf_sample *sample,
> 				     const char *enum_name);
> 
> That would return an array of strings that you could directly access,
> indexing using some of the fields.
> 
> I.e. internally we would see the tracepoint format file as:
> 
>  	field:enum action vec;	offset:12;	size:4;	signed:0;
> 
> 	enum: action: TIMER, NET_TX, NET_RX, BLOCK, BLOCK_IOPOLL, TASKLET, SCHED, HRTIMER, RCU
> 

Note, with the new TRACE_DEFINE_ENUM() that was already added to
Linus's tree, that print_fmt now looks like:

print fmt: "vec=%u [action=%s]", REC->vec, __print_symbolic(REC->vec,
 { 0, "HI" }, { 1, "TIMER" }, { 2, "NET_TX" }, { 3, "NET_RX" }, { 4, "BLOCK" },
 { 5, "BLOCK_IOPOLL" }, { 6, "TASKLET" }, { 7, "SCHED" }, { 8, "HRTIMER" },
 { 9, "RCU" })


-- Steve

  reply	other threads:[~2015-04-20 20:46 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-15 16:20 perf/tracepoints access to interpreted strings David Ahern
2015-04-15 18:09 ` Arnaldo Carvalho de Melo
2015-04-20 20:46   ` Steven Rostedt [this message]
2015-04-20 21:25     ` Arnaldo Carvalho de Melo
2015-04-20 21:26       ` David Ahern
2015-04-21  6:17         ` Namhyung Kim
2015-04-21 13:07         ` Steven Rostedt
2015-04-21 14:35           ` Arnaldo Carvalho de Melo

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=20150420164616.4227fae9@gandalf.local.home \
    --to=rostedt@goodmis.org \
    --cc=acme@kernel.org \
    --cc=dsahern@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=namhyung@kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.