All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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 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.