From: Mathieu Desnoyers <compudj@krystal.dyndns.org>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: linux-kernel@vger.kernel.org, Ingo Molnar <mingo@elte.hu>,
Andrew Morton <akpm@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>,
Peter Zijlstra <peterz@infradead.org>,
Frederic Weisbecker <fweisbec@gmail.com>,
Arnaldo Carvalho de Melo <acme@redhat.com>,
Lai Jiangshan <laijs@cn.fujitsu.com>,
Li Zefan <lizf@cn.fujitsu.com>,
Masami Hiramatsu <mhiramat@redhat.com>,
Christoph Hellwig <hch@lst.de>
Subject: Re: [PATCH 09/10][RFC] tracing: Remove duplicate id information in event structure
Date: Wed, 28 Apr 2010 17:06:42 -0400 [thread overview]
Message-ID: <20100428210642.GJ8591@Krystal> (raw)
In-Reply-To: <20100426200243.649349066@goodmis.org>
* Steven Rostedt (rostedt@goodmis.org) wrote:
> From: Steven Rostedt <srostedt@redhat.com>
>
> Now that the trace_event structure is embedded in the ftrace_event_call
> structure, there is no need for the ftrace_event_call id field.
> The id field is the same as the trace_event type field.
>
> Removing the id and re-arranging the structure brings down the tracepoint
> footprint by another 5K.
I might have missed it, but how exactly is the event type allocated
uniquely ? Is it barely a duplicate of the call "id" field ?
Thanks,
Mathieu
>
> text data bss dec hex filename
> 5788186 1337252 9351592 16477030 fb6b66 vmlinux.orig
> 5761154 1268356 9351592 16381102 f9f4ae vmlinux.print
> 5761074 1262596 9351592 16375262 f9ddde vmlinux.id
>
> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
> ---
> include/linux/ftrace_event.h | 5 ++---
> include/trace/ftrace.h | 12 ++++++------
> kernel/trace/trace_event_perf.c | 4 ++--
> kernel/trace/trace_events.c | 7 +++----
> kernel/trace/trace_events_filter.c | 2 +-
> kernel/trace/trace_export.c | 4 ++--
> kernel/trace/trace_kprobe.c | 18 ++++++++++--------
> kernel/trace/trace_syscalls.c | 14 ++++++++------
> 8 files changed, 34 insertions(+), 32 deletions(-)
>
> diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h
> index aa3695a..b26507f 100644
> --- a/include/linux/ftrace_event.h
> +++ b/include/linux/ftrace_event.h
> @@ -147,14 +147,13 @@ struct ftrace_event_call {
> char *name;
> struct dentry *dir;
> struct trace_event event;
> - int enabled;
> - int id;
> const char *print_fmt;
> - int filter_active;
> struct event_filter *filter;
> void *mod;
> void *data;
>
> + int enabled;
> + int filter_active;
> int perf_refcount;
> };
>
> diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h
> index d7b3b56..246b05e 100644
> --- a/include/trace/ftrace.h
> +++ b/include/trace/ftrace.h
> @@ -150,7 +150,7 @@
> *
> * entry = iter->ent;
> *
> - * if (entry->type != event_<call>.id) {
> + * if (entry->type != event_<call>->event.type) {
> * WARN_ON_ONCE(1);
> * return TRACE_TYPE_UNHANDLED;
> * }
> @@ -221,7 +221,7 @@ ftrace_raw_output_##call(struct trace_iterator *iter, int flags, \
> \
> entry = iter->ent; \
> \
> - if (entry->type != event->id) { \
> + if (entry->type != event->event.type) { \
> WARN_ON_ONCE(1); \
> return TRACE_TYPE_UNHANDLED; \
> } \
> @@ -257,7 +257,7 @@ ftrace_raw_output_##call(struct trace_iterator *iter, int flags, \
> \
> entry = iter->ent; \
> \
> - if (entry->type != event_##call.id) { \
> + if (entry->type != event_##call.event.type) { \
> WARN_ON_ONCE(1); \
> return TRACE_TYPE_UNHANDLED; \
> } \
> @@ -408,7 +408,7 @@ static inline notrace int ftrace_get_offsets_##call( \
> * __data_size = ftrace_get_offsets_<call>(&__data_offsets, args);
> *
> * event = trace_current_buffer_lock_reserve(&buffer,
> - * event_<call>.id,
> + * event_<call>->event.type,
> * sizeof(*entry) + __data_size,
> * irq_flags, pc);
> * if (!event)
> @@ -509,7 +509,7 @@ ftrace_raw_event_##call(proto, \
> __data_size = ftrace_get_offsets_##call(&__data_offsets, args); \
> \
> event = trace_current_buffer_lock_reserve(&buffer, \
> - event_call->id, \
> + event_call->event.type, \
> sizeof(*entry) + __data_size, \
> irq_flags, pc); \
> if (!event) \
> @@ -700,7 +700,7 @@ perf_trace_##call(proto, struct ftrace_event_call *event_call) \
> "profile buffer not large enough")) \
> return; \
> entry = (struct ftrace_raw_##call *)perf_trace_buf_prepare( \
> - __entry_size, event_call->id, &rctx, &irq_flags); \
> + __entry_size, event_call->event.type, &rctx, &irq_flags); \
> if (!entry) \
> return; \
> tstruct \
> diff --git a/kernel/trace/trace_event_perf.c b/kernel/trace/trace_event_perf.c
> index 95df5a7..b8febf0 100644
> --- a/kernel/trace/trace_event_perf.c
> +++ b/kernel/trace/trace_event_perf.c
> @@ -75,7 +75,7 @@ int perf_trace_enable(int event_id)
>
> mutex_lock(&event_mutex);
> list_for_each_entry(event, &ftrace_events, list) {
> - if (event->id == event_id &&
> + if (event->event.type == event_id &&
> event->class && event->class->perf_probe &&
> try_module_get(event->mod)) {
> ret = perf_trace_event_enable(event);
> @@ -123,7 +123,7 @@ void perf_trace_disable(int event_id)
>
> mutex_lock(&event_mutex);
> list_for_each_entry(event, &ftrace_events, list) {
> - if (event->id == event_id) {
> + if (event->event.type == event_id) {
> perf_trace_event_disable(event);
> module_put(event->mod);
> break;
> diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
> index 9aa298e..8d2e28e 100644
> --- a/kernel/trace/trace_events.c
> +++ b/kernel/trace/trace_events.c
> @@ -132,7 +132,6 @@ int trace_event_raw_init(struct ftrace_event_call *call)
> id = register_ftrace_event(&call->event);
> if (!id)
> return -ENODEV;
> - call->id = id;
>
> return 0;
> }
> @@ -574,7 +573,7 @@ event_format_read(struct file *filp, char __user *ubuf, size_t cnt,
> trace_seq_init(s);
>
> trace_seq_printf(s, "name: %s\n", call->name);
> - trace_seq_printf(s, "ID: %d\n", call->id);
> + trace_seq_printf(s, "ID: %d\n", call->event.type);
> trace_seq_printf(s, "format:\n");
>
> head = trace_get_fields(call);
> @@ -648,7 +647,7 @@ event_id_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos)
> return -ENOMEM;
>
> trace_seq_init(s);
> - trace_seq_printf(s, "%d\n", call->id);
> + trace_seq_printf(s, "%d\n", call->event.type);
>
> r = simple_read_from_buffer(ubuf, cnt, ppos,
> s->buffer, s->len);
> @@ -974,7 +973,7 @@ event_create_dir(struct ftrace_event_call *call, struct dentry *d_events,
> trace_create_file("enable", 0644, call->dir, call,
> enable);
>
> - if (call->id && (call->class->perf_probe || call->class->reg))
> + if (call->event.type && (call->class->perf_probe || call->class->reg))
> trace_create_file("id", 0444, call->dir, call,
> id);
>
> diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
> index 560683d..b8e3bf3 100644
> --- a/kernel/trace/trace_events_filter.c
> +++ b/kernel/trace/trace_events_filter.c
> @@ -1394,7 +1394,7 @@ int ftrace_profile_set_filter(struct perf_event *event, int event_id,
> mutex_lock(&event_mutex);
>
> list_for_each_entry(call, &ftrace_events, list) {
> - if (call->id == event_id)
> + if (call->event.type == event_id)
> break;
> }
>
> diff --git a/kernel/trace/trace_export.c b/kernel/trace/trace_export.c
> index e878d06..8536e2a 100644
> --- a/kernel/trace/trace_export.c
> +++ b/kernel/trace/trace_export.c
> @@ -153,7 +153,7 @@ static int ftrace_raw_init_event(struct ftrace_event_call *call)
> #define F_printk(fmt, args...) #fmt ", " __stringify(args)
>
> #undef FTRACE_ENTRY
> -#define FTRACE_ENTRY(call, struct_name, type, tstruct, print) \
> +#define FTRACE_ENTRY(call, struct_name, etype, tstruct, print) \
> \
> struct ftrace_event_class event_class_ftrace_##call = { \
> .system = __stringify(TRACE_SYSTEM), \
> @@ -165,7 +165,7 @@ struct ftrace_event_call __used \
> __attribute__((__aligned__(4))) \
> __attribute__((section("_ftrace_events"))) event_##call = { \
> .name = #call, \
> - .id = type, \
> + .event.type = etype, \
> .class = &event_class_ftrace_##call, \
> .print_fmt = print, \
> }; \
> diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
> index d8061c3..934078b 100644
> --- a/kernel/trace/trace_kprobe.c
> +++ b/kernel/trace/trace_kprobe.c
> @@ -960,8 +960,8 @@ static __kprobes void kprobe_trace_func(struct kprobe *kp, struct pt_regs *regs)
>
> size = SIZEOF_KPROBE_TRACE_ENTRY(tp->nr_args);
>
> - event = trace_current_buffer_lock_reserve(&buffer, call->id, size,
> - irq_flags, pc);
> + event = trace_current_buffer_lock_reserve(&buffer, call->event.type,
> + size, irq_flags, pc);
> if (!event)
> return;
>
> @@ -992,8 +992,8 @@ static __kprobes void kretprobe_trace_func(struct kretprobe_instance *ri,
>
> size = SIZEOF_KRETPROBE_TRACE_ENTRY(tp->nr_args);
>
> - event = trace_current_buffer_lock_reserve(&buffer, call->id, size,
> - irq_flags, pc);
> + event = trace_current_buffer_lock_reserve(&buffer, call->event.type,
> + size, irq_flags, pc);
> if (!event)
> return;
>
> @@ -1228,7 +1228,8 @@ static __kprobes void kprobe_perf_func(struct kprobe *kp,
> "profile buffer not large enough"))
> return;
>
> - entry = perf_trace_buf_prepare(size, call->id, &rctx, &irq_flags);
> + entry = perf_trace_buf_prepare(size, call->event.type,
> + &rctx, &irq_flags);
> if (!entry)
> return;
>
> @@ -1258,7 +1259,8 @@ static __kprobes void kretprobe_perf_func(struct kretprobe_instance *ri,
> "profile buffer not large enough"))
> return;
>
> - entry = perf_trace_buf_prepare(size, call->id, &rctx, &irq_flags);
> + entry = perf_trace_buf_prepare(size, call->event.type,
> + &rctx, &irq_flags);
> if (!entry)
> return;
>
> @@ -1375,8 +1377,8 @@ static int register_probe_event(struct trace_probe *tp)
> }
> if (set_print_fmt(tp) < 0)
> return -ENOMEM;
> - call->id = register_ftrace_event(&call->event);
> - if (!call->id) {
> + ret = register_ftrace_event(&call->event);
> + if (!ret) {
> kfree(call->print_fmt);
> return -ENODEV;
> }
> diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c
> index a4bed39..23fad22 100644
> --- a/kernel/trace/trace_syscalls.c
> +++ b/kernel/trace/trace_syscalls.c
> @@ -108,7 +108,7 @@ print_syscall_enter(struct trace_iterator *iter, int flags,
> if (!entry)
> goto end;
>
> - if (entry->enter_event->id != ent->type) {
> + if (entry->enter_event->event.type != ent->type) {
> WARN_ON_ONCE(1);
> goto end;
> }
> @@ -164,7 +164,7 @@ print_syscall_exit(struct trace_iterator *iter, int flags,
> return TRACE_TYPE_HANDLED;
> }
>
> - if (entry->exit_event->id != ent->type) {
> + if (entry->exit_event->event.type != ent->type) {
> WARN_ON_ONCE(1);
> return TRACE_TYPE_UNHANDLED;
> }
> @@ -306,7 +306,7 @@ void ftrace_syscall_enter(struct pt_regs *regs, long id)
> size = sizeof(*entry) + sizeof(unsigned long) * sys_data->nb_args;
>
> event = trace_current_buffer_lock_reserve(&buffer,
> - sys_data->enter_event->id, size, 0, 0);
> + sys_data->enter_event->event.type, size, 0, 0);
> if (!event)
> return;
>
> @@ -338,7 +338,7 @@ void ftrace_syscall_exit(struct pt_regs *regs, long ret)
> return;
>
> event = trace_current_buffer_lock_reserve(&buffer,
> - sys_data->exit_event->id, sizeof(*entry), 0, 0);
> + sys_data->exit_event->event.type, sizeof(*entry), 0, 0);
> if (!event)
> return;
>
> @@ -502,7 +502,8 @@ static void perf_syscall_enter(struct pt_regs *regs, long id)
> return;
>
> rec = (struct syscall_trace_enter *)perf_trace_buf_prepare(size,
> - sys_data->enter_event->id, &rctx, &flags);
> + sys_data->enter_event->event.type,
> + &rctx, &flags);
> if (!rec)
> return;
>
> @@ -577,7 +578,8 @@ static void perf_syscall_exit(struct pt_regs *regs, long ret)
> return;
>
> rec = (struct syscall_trace_exit *)perf_trace_buf_prepare(size,
> - sys_data->exit_event->id, &rctx, &flags);
> + sys_data->exit_event->event.type,
> + &rctx, &flags);
> if (!rec)
> return;
>
> --
> 1.7.0
>
>
--
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com
next prev parent reply other threads:[~2010-04-28 21:06 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-26 19:50 [PATCH 00/10][RFC] tracing: Lowering the footprint of TRACE_EVENTs Steven Rostedt
2010-04-26 19:50 ` [PATCH 01/10][RFC] tracing: Create class struct for events Steven Rostedt
2010-04-28 20:22 ` Mathieu Desnoyers
2010-04-28 20:38 ` Steven Rostedt
2010-04-26 19:50 ` [PATCH 02/10][RFC] tracing: Let tracepoints have data passed to tracepoint callbacks Steven Rostedt
2010-04-27 9:08 ` Li Zefan
2010-04-27 15:28 ` Steven Rostedt
2010-04-28 20:37 ` Mathieu Desnoyers
2010-04-28 23:56 ` Steven Rostedt
2010-04-26 19:50 ` [PATCH 03/10][RFC] tracing: Convert TRACE_EVENT() to use the DECLARE_TRACE_DATA() Steven Rostedt
2010-04-28 20:39 ` Mathieu Desnoyers
2010-04-28 23:57 ` Steven Rostedt
2010-04-29 0:03 ` Mathieu Desnoyers
2010-04-26 19:50 ` [PATCH 04/10][RFC] tracing: Remove per event trace registering Steven Rostedt
2010-04-28 20:44 ` Mathieu Desnoyers
2010-04-29 0:00 ` Steven Rostedt
2010-04-29 0:05 ` Mathieu Desnoyers
2010-04-29 0:20 ` Steven Rostedt
[not found] ` <20100429133649.GC14617@Krystal>
2010-04-29 14:06 ` Steven Rostedt
2010-04-29 14:55 ` Mathieu Desnoyers
2010-04-29 16:06 ` Steven Rostedt
2010-04-30 17:09 ` Mathieu Desnoyers
2010-04-30 18:16 ` Steven Rostedt
2010-04-30 19:06 ` Mathieu Desnoyers
2010-04-30 19:48 ` Steven Rostedt
2010-04-30 20:07 ` Mathieu Desnoyers
2010-04-30 20:14 ` Steven Rostedt
2010-04-30 21:02 ` Mathieu Desnoyers
2010-04-26 19:50 ` [PATCH 05/10][RFC] tracing: Move fields from event to class structure Steven Rostedt
2010-04-28 20:58 ` Mathieu Desnoyers
2010-04-29 0:02 ` Steven Rostedt
[not found] ` <20100429133213.GA14617@Krystal>
2010-04-29 13:50 ` Steven Rostedt
2010-04-26 19:50 ` [PATCH 06/10][RFC] tracing: Move raw_init from events to class Steven Rostedt
2010-04-28 21:00 ` Mathieu Desnoyers
2010-04-26 19:50 ` [PATCH 07/10][RFC] tracing: Allow events to share their print functions Steven Rostedt
2010-04-28 21:03 ` Mathieu Desnoyers
2010-04-26 19:50 ` [PATCH 08/10][RFC] tracing: Move print functions into event class Steven Rostedt
2010-04-28 21:03 ` Mathieu Desnoyers
2010-04-26 19:50 ` [PATCH 09/10][RFC] tracing: Remove duplicate id information in event structure Steven Rostedt
2010-04-28 21:06 ` Mathieu Desnoyers [this message]
2010-04-29 0:04 ` Steven Rostedt
2010-04-26 19:50 ` [PATCH 10/10][RFC] tracing: Combine event filter_active and enable into single flags field Steven Rostedt
2010-04-28 21:13 ` Mathieu Desnoyers
2010-04-28 14:45 ` [PATCH 00/10][RFC] tracing: Lowering the footprint of TRACE_EVENTs Masami Hiramatsu
2010-04-28 20:18 ` Mathieu Desnoyers
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=20100428210642.GJ8591@Krystal \
--to=compudj@krystal.dyndns.org \
--cc=acme@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=fweisbec@gmail.com \
--cc=hch@lst.de \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lizf@cn.fujitsu.com \
--cc=mhiramat@redhat.com \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox