Messages in this thread | | | Date | Wed, 28 Apr 2010 20:05:28 -0400 | From | Mathieu Desnoyers <> | Subject | Re: [PATCH 04/10][RFC] tracing: Remove per event trace registering |
| |
* Steven Rostedt (rostedt@goodmis.org) wrote: > On Wed, 2010-04-28 at 16:44 -0400, Mathieu Desnoyers wrote: > > * Steven Rostedt (rostedt@goodmis.org) wrote: > > > From: Steven Rostedt <srostedt@redhat.com> > > > > > > This patch removes the register functions of TRACE_EVENT() to enable > > > and disable tracepoints. The registering of a event is now down > > > directly in the trace_events.c file. The tracepoint_probe_register() > > > is now called directly. > > > > > > The prototypes are no longer type checked, but this should not be > > > an issue since the tracepoints are created automatically by the > > > macros. If a prototype is incorrect in the TRACE_EVENT() macro, then > > > other macros will catch it. > > > > > > The trace_event_class structure now holds the probes to be called > > > by the callbacks. This removes needing to have each event have > > > a separate pointer for the probe. > > > > > > To handle kprobes and syscalls, since they register probes in a > > > different manner, a "reg" field is added to the ftrace_event_class > > > structure. If the "reg" field is assigned, then it will be called for > > > enabling and disabling of the probe for either ftrace or perf. To let > > > the reg function know what is happening, a new enum (trace_reg) is > > > created that has the type of control that is needed. > > > > > > With this new rework, the 82 kernel events and 616 syscall events > > > has their footprint dramatically lowered: > > > > > > text data bss dec hex filename > > > 5788186 1337252 9351592 16477030 fb6b66 vmlinux.orig > > > 5792282 1333796 9351592 16477670 fb6de6 vmlinux.class > > > 5793448 1333780 9351592 16478820 fb7264 vmlinux.tracepoint > > > 5796926 1337748 9351592 16486266 fb8f7a vmlinux.data > > > 5774316 1306580 9351592 16432488 fabd68 vmlinux.regs > > > > > > The size went from 16477030 to 16432488, that's a total of 44K > > > in savings. With tracepoints being continuously added, this is > > > critical that the footprint becomes minimal. > > > > Have you tried doing a BUILD_BUG_ON() on __typeof__() mismatch between > > the type of the callback generated by TRACE_EVENT() and the expected > > type ? This might help catching tricky preprocessor macro errors early. > > Well, we could, but if it is broken once, it is broken everywhere.
I fear about "subtly" broken things, where trace data could end up being incorrectly typed and/or corrupted. I think this BUILD_BUG_ON() will become very useful.
Thanks,
Mathieu
> > -- Steve > >
-- Mathieu Desnoyers Operating System Efficiency R&D Consultant EfficiOS Inc. http://www.efficios.com
| |