From: Frederic Weisbecker <fweisbec@gmail.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: David Sharp <dhsharp@google.com>,
linux-kernel@vger.kernel.org, mrubin@google.com,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Subject: Re: [PATCH 13/15] small_traces: Add config option to shrink trace events.
Date: Thu, 9 Dec 2010 16:28:10 +0100 [thread overview]
Message-ID: <20101209152805.GD1712@nowhere> (raw)
In-Reply-To: <1291907297.5015.1526.camel@gandalf.stny.rr.com>
On Thu, Dec 09, 2010 at 10:08:17AM -0500, Steven Rostedt wrote:
> On Thu, 2010-12-09 at 15:55 +0100, Frederic Weisbecker wrote:
> > On Fri, Dec 03, 2010 at 09:54:12PM -0500, Steven Rostedt wrote:
> > > On Fri, 2010-12-03 at 18:33 -0800, David Sharp wrote:
> > > > I considered that, and I generally thing it's a good idea. However, I
> > > > also want to use this switch to shrink individual tracepoint event
> > > > structures.
> > > >
> > > > eg: sched switch is a high frequency event and it is 68 bytes (60
> > > > after these patches)
> > > >
> > > > Can you suggest a syntax for TRACE_EVENT, DECLARE_EVENT_CLASS, etc,
> > > > that could express the two versions and produce the right code?
> > > >
> > > > I'm worried about adding even further complexity to the TRACE_EVENT
> > > > macros. I could add TRACE_EVENT_SMALL that takes two versions of
> > > > TP_STRUCT__entry, TP_fast_assign, and TP_printk each, but then this
> > > > will need to be permuted with your TP_CONDITIONAL patches as well.
> > >
> > > I would not touch the TRACE_EVENT() structures. They are there as is and
> > > I would not think about changing them. Something like that would never
> > > make it into mainline.
> > >
> > > Now what you can do, is to make your own events based off of the same
> > > tracepoints. For example, the TRACE_EVENT(sched_switch...) has in
> > > sched.c:
> > >
> > > trace_sched_switch(prev, next);
> > >
> > >
> > > You could even write a module that does something like this:
> > >
> > > register_trace_sched_switch(probe_sched_switch, mydata);
> > >
> > >
> > >
> > > void probe_sched_switch(void *mydata,
> > > struct task_struct *prev,
> > > struct task_struct *next)
> > > {
> > > struct ring_buffer *buffer;
> > > struct ring_buffer_event *event;
> > > struct myentry *entry;
> > >
> > > event = trace_current_buffer_lock_reserve(buffer,
> > > mytype, sizeof(*entry),
> > > 0, 0);
> > >
> > > if (!event)
> > > return;
> > >
> > > entry = ring_buffer_event_data(event);
> > >
> > > entry->myfield = prev->x;
> > > ...
> > >
> > > trace_nowake_buffer_unlock_commit(buffer, event,
> > > 0, 0);
> > > }
> > >
> > > You will need to do a register_ftrace_event() to register that 'mytype'
> > > and how to output it. Otherwise it would just be ignored in the "trace"
> > > file.
> > >
> > > All of the above would work fine as a loadable module that you could
> > > easily maintain out of tree, and still uses the internals of the system.
> > >
> > > -- Steve
> > >
> > >
> >
> >
> > But this would improve only google's tracing while this is a general
> > mainline tracing problem.
> >
> > The first thing is that we need to get rid of the lock_depth field, the bkl
> > is dying.
>
> Yeah that needs to go :-)
>
> >
> > For the rest what about having a bitmap of the fields we want to ignore,
> > which can be setup from a trace file for ftrace and as an ioctl for perf.
> >
> > So this bitmap is easy to implement on the common fields.
> >
> > For the rest, one could choose between using TP_fast_assign()
> > and TP_cond_assign().
> >
> > TP_fast_assign() stays as is and doesn't implement bitmap field
> > ignoring. Those who want conditional record will need
> > TP_cond_assign().
> > Well, unfortunately this probably requires us to play
> > the same trickery than SYSCALL_DEFINE() in that we'll probably
> > need TP_cond_assign1(), TP_cond_assign2(), TP_cond_assign3(), etc...
> >
> > #define TP_cond_assignx(nr, assign) \
> > if (call->bitmask & nr) { \
> > assign
> > }
> >
> > #define TP_cond_assign2(nr, assign, ...) \
> > TP_cond_assignx(nr, assign) \
> > TP_cond_assign1(nr + 1, __VA_ARGS__)
> >
> > #define TP_cond_assign3(nr, assign, ...) \
> > TP_cond_assignx(nr, assign) \
> > TP_cond_assign2(nr + 1, __VA_ARGS__)
> >
> > That will also require a bit more trickery to dynamically
> > pre-compute the size of the trace entry.
>
> Mathieu is working on encapsulating the assignments in their own macros.
>
> Instead of doing:
>
> __entry->foo = bar;
>
> We will have:
>
> tp_assign(foo, bar);
>
> This way we could probably use this to dynamically figure out what to
> assign.
>
> -- Steve
>
>
Yep, it should also work that way.
next prev parent reply other threads:[~2010-12-09 15:28 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-04 0:13 [Patch 00/15] Reduce tracing payload size David Sharp
2010-12-04 0:13 ` [PATCH 01/15] tracing: Add a 'buffer_overwrite' debugfs file David Sharp
2010-12-04 1:57 ` Steven Rostedt
2010-12-08 20:15 ` David Sharp
2010-12-08 21:46 ` [PATCH] tracing: Add an 'overwrite' trace_option David Sharp
2010-12-14 0:39 ` David Sharp
2011-03-09 0:45 ` David Sharp
2011-03-11 9:45 ` [tip:perf/core] " tip-bot for David Sharp
2010-12-04 0:13 ` [PATCH 02/15] ring_buffer.c: Remove unused #include <linux/trace_irq.h> David Sharp
2011-03-11 9:46 ` [tip:perf/core] ring-buffer: " tip-bot for David Sharp
2010-12-04 0:13 ` [PATCH 03/15] ring_buffer: Align buffer_page struct allocations only to fit the flags David Sharp
2010-12-04 1:43 ` Steven Rostedt
2010-12-07 22:44 ` David Sharp
2010-12-04 0:13 ` [PATCH 04/15] ftrace: pack event structures David Sharp
2011-03-08 23:30 ` Steven Rostedt
2011-03-09 1:09 ` Steven Rostedt
2011-03-09 6:39 ` David Miller
2011-03-09 15:18 ` Steven Rostedt
2011-03-10 23:21 ` David Sharp
2011-03-11 3:37 ` Steven Rostedt
2011-03-09 13:01 ` Steven Rostedt
2010-12-04 0:13 ` [PATCH 05/15] ftrace: fix event alignment: ftrace:context_switch and ftrace:wakeup David Sharp
2011-03-11 9:48 ` [tip:perf/core] tracing: Fix " tip-bot for David Sharp
2010-12-04 0:13 ` [PATCH 06/15] ftrace: fix event alignment: module:module_request David Sharp
2010-12-04 1:47 ` Steven Rostedt
2010-12-06 1:28 ` Li Zefan
2011-03-11 9:48 ` [tip:perf/core] tracing: Fix " tip-bot for David Sharp
2010-12-04 0:13 ` [PATCH 07/15] ftrace: fix event alignment: kvm:kvm_hv_hypercall David Sharp
2010-12-04 1:49 ` Steven Rostedt
2010-12-04 8:11 ` Avi Kivity
2010-12-06 20:38 ` David Sharp
2010-12-06 20:38 ` David Sharp
2010-12-07 9:22 ` Avi Kivity
2010-12-07 21:16 ` David Sharp
2010-12-08 9:18 ` Avi Kivity
2011-03-08 23:55 ` Steven Rostedt
2011-03-09 8:50 ` Avi Kivity
2011-03-09 12:54 ` Steven Rostedt
2011-03-09 13:01 ` Avi Kivity
2011-03-11 9:49 ` [tip:perf/core] tracing: Fix " tip-bot for David Sharp
2010-12-04 0:13 ` [PATCH 08/15] ftrace: fix event alignment: mce:mce_record David Sharp
2010-12-04 1:50 ` Steven Rostedt
2010-12-09 13:33 ` Frederic Weisbecker
2011-03-11 9:49 ` [tip:perf/core] tracing: Fix " tip-bot for David Sharp
2010-12-04 0:13 ` [PATCH 09/15] ftrace: fix event alignment: skb:kfree_skb David Sharp
2010-12-04 1:52 ` Steven Rostedt
2010-12-04 13:38 ` Neil Horman
2011-03-11 9:50 ` [tip:perf/core] tracing: Fix " tip-bot for David Sharp
2010-12-04 0:13 ` [PATCH 10/15] ftrace: fix event alignment: jbd2:* David Sharp
2010-12-04 1:52 ` Steven Rostedt
2011-03-09 0:03 ` Steven Rostedt
2011-03-09 0:31 ` Ted Ts'o
2011-03-09 0:41 ` Steven Rostedt
2010-12-04 0:13 ` [PATCH 11/15] ftrace: fix event alignment: ext4:* David Sharp
2010-12-04 1:53 ` Steven Rostedt
2011-03-09 0:04 ` Steven Rostedt
2010-12-04 0:13 ` [PATCH 12/15] trace_output.c: adjust conditional expression formatting David Sharp
2011-03-11 9:50 ` [tip:perf/core] tracing: Adjust conditional expression latency formatting tip-bot for David Sharp
2010-12-04 0:13 ` [PATCH 13/15] small_traces: Add config option to shrink trace events David Sharp
2010-12-04 1:56 ` Steven Rostedt
2010-12-04 2:33 ` David Sharp
2010-12-04 2:54 ` Steven Rostedt
2010-12-09 14:55 ` Frederic Weisbecker
2010-12-09 15:08 ` Steven Rostedt
2010-12-09 15:28 ` Frederic Weisbecker [this message]
2010-12-09 16:16 ` Mathieu Desnoyers
2011-03-09 0:23 ` Steven Rostedt
2010-12-04 0:13 ` [PATCH 14/15] small_traces: Remove trace output of large fields David Sharp
2010-12-04 0:13 ` [PATCH 15/15] small_traces: Remove 8 bytes from trace_entry David Sharp
2010-12-06 13:22 ` [Patch 00/15] Reduce tracing payload size Andi Kleen
2010-12-06 13:56 ` Ted Ts'o
2010-12-06 14:58 ` Andi Kleen
2010-12-06 16:17 ` Steven Rostedt
2010-12-06 16:31 ` Miguel Ojeda
2010-12-06 16:41 ` Andi Kleen
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=20101209152805.GD1712@nowhere \
--to=fweisbec@gmail.com \
--cc=dhsharp@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mrubin@google.com \
--cc=rostedt@goodmis.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.