public inbox for systemtap@sourceware.org
 help / color / mirror / Atom feed
From: Frederic Weisbecker <fweisbec@gmail.com>
To: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Steven Rostedt <rostedt@goodmis.org>, Ingo Molnar <mingo@elte.hu>,
		lkml <linux-kernel@vger.kernel.org>,
		systemtap <systemtap@sources.redhat.com>,
		DLE <dle-develop@lists.sourceforge.net>,
		Jim Keniston <jkenisto@us.ibm.com>,
		Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
		Andi Kleen <ak@linux.intel.com>,
		Christoph Hellwig <hch@infradead.org>,
		"Frank Ch. Eigler" <fche@redhat.com>,
		"H. Peter Anvin" <hpa@zytor.com>,
	Jason Baron <jbaron@redhat.com>,
		"K.Prasad" <prasad@linux.vnet.ibm.com>,
		Lai Jiangshan <laijs@cn.fujitsu.com>,
		Li Zefan <lizf@cn.fujitsu.com>,
		Peter Zijlstra <peterz@infradead.org>,
		Srikar Dronamraju <srikar@linux.vnet.ibm.com>,
		Tom Zanussi <tzanussi@gmail.com>
Subject: Re: [PATCH tracing/kprobes 4/7] tracing/kprobes: Add event 	profiling support
Date: Fri, 11 Sep 2009 03:13:00 -0000	[thread overview]
Message-ID: <20090911031253.GD16396@nowhere> (raw)
In-Reply-To: <20090910235329.22412.94731.stgit@dhcp-100-2-132.bos.redhat.com>

On Thu, Sep 10, 2009 at 07:53:30PM -0400, Masami Hiramatsu wrote:
> +#ifdef CONFIG_EVENT_PROFILE
> +
> +/* Kprobe profile handler */
> +static __kprobes int kprobe_profile_func(struct kprobe *kp,
> +					 struct pt_regs *regs)
> +{
> +	struct trace_probe *tp = container_of(kp, struct trace_probe, rp.kp);
> +	struct ftrace_event_call *call = &tp->call;
> +	struct kprobe_trace_entry *entry;
> +	int size, i, pc;
> +	unsigned long irq_flags;
> +
> +	local_save_flags(irq_flags);
> +	pc = preempt_count();
> +
> +	size = SIZEOF_KPROBE_TRACE_ENTRY(tp->nr_args);



Note that the end-result must be u64 aligned for perf ring buffer.
And this is a bit tricky.
What is inserted in the perf ring buffer is:

raw_trace + (u32)raw_trace_size

So we must ensure that sizeof(raw_trace) + sizeof(u32)
is well u64 aligned.

We don't insert the trace_size ourself though, this is done
from kernel/perf_counter.c

But we need to handle the size of the size (sorry) in the final
alignment.
To sum-up: sizeof(raw_trace) doesn't need (shouldn't) to be u64
aligned but sizeof(raw_trace) + sizeof(u32) must be.

Given this aligned size, we then substract it by sizeof(u32)
to have the needed size of the raw entry.

This result gives you the size of char raw_data[], which
is also the same size passed in perf_tpcounter_event().

See?

That's why we have this in trace/ftrace.h:

__data_size = "the real entry data size"
__entry_size = ALIGN(__data_size + sizeof(*entry) + sizeof(u32), sizeof(u64));
__entry_size -= sizeof(u32);

do {
		char raw_data[__entry_size];
		...
		perf_tpcounter_event(event_call->id, __addr, __count, entry,
			     __entry_size);
		...
} while (0);


> +static int probe_profile_enable(struct ftrace_event_call *call)
> +{
> +	struct trace_probe *tp = (struct trace_probe *)call->data;
> +
> +	if (atomic_inc_return(&call->profile_count))
> +		return 0;
> +
> +	if (probe_is_return(tp)) {
> +		tp->rp.handler = kretprobe_profile_func;
> +		return enable_kretprobe(&tp->rp);
> +	} else {
> +		tp->rp.kp.pre_handler = kprobe_profile_func;
> +		return enable_kprobe(&tp->rp.kp);
> +	}
> +}



May be I misunderstood but it seems that concurrent uses of
ftrace and perf would really mess up the result, as one would
overwrite the handler of the other.

Even though it's hard to imagine one using both at the same
time on the same probe, but still...

Is it possible to have two kprobes having the exact same
properties? (pointing to the same address, having the same
probe handlers, etc...)

Another solution would be to allow kprobes to have multiple
handlers.

  reply	other threads:[~2009-09-11  3:13 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-09-10 23:51 [PATCH tracing/kprobes 0/7] tracing/kprobes: kprobe-based event tracer update and perf support Masami Hiramatsu
2009-09-10 23:51 ` [PATCH tracing/kprobes 3/7] tracing/kprobes: Cleanup kprobe tracer code Masami Hiramatsu
2009-09-11  2:33   ` Daniel Walker
2009-09-11  2:36     ` Frederic Weisbecker
2009-09-10 23:51 ` [PATCH tracing/kprobes 4/7] tracing/kprobes: Add event profiling support Masami Hiramatsu
2009-09-11  3:13   ` Frederic Weisbecker [this message]
2009-09-11 16:18     ` Masami Hiramatsu
2009-09-14  3:02       ` Frederic Weisbecker
     [not found]         ` <4AAE7540.9090009@redhat.com>
2009-09-14 18:55           ` Frederic Weisbecker
     [not found]             ` <4AAE9B41.3020905@redhat.com>
2009-09-14 21:07               ` Frederic Weisbecker
2009-09-15  4:52                 ` Ananth N Mavinakayanahalli
2009-09-11 19:26     ` Masami Hiramatsu
2009-09-14  3:08       ` Frederic Weisbecker
2009-09-13 10:07     ` [BUGFIX] kprobes: prevent re-registration of the same kprobe Ananth N Mavinakayanahalli
     [not found]       ` <4AADA0BB.4030307@redhat.com>
2009-09-14 10:05         ` [BUGFIX] kprobes: prevent re-registration of the same kprobe - take2 Ananth N Mavinakayanahalli
     [not found]           ` <4AAE6E85.9020002@redhat.com>
2009-09-15  5:19             ` Ananth N Mavinakayanahalli
2009-09-16 23:52               ` Masami Hiramatsu
2009-09-10 23:51 ` [PATCH tracing/kprobes 1/7] x86/ptrace: Fix regs_get_argument_nth() to add correct offset Masami Hiramatsu
2009-09-11  1:43   ` Steven Rostedt
2009-09-10 23:51 ` [PATCH tracing/kprobes 2/7] tracing/kprobes: Fix probe offset to be unsigned Masami Hiramatsu
2009-09-10 23:51 ` [PATCH tracing/kprobes 5/7] tracing/kprobes: Add argument name support Masami Hiramatsu
2009-09-11 14:08   ` Steven Rostedt
2009-09-11 16:07     ` Masami Hiramatsu
2009-09-11 16:28       ` Masami Hiramatsu
2009-09-10 23:52 ` [PATCH tracing/kprobes 6/7] tracing/kprobes: Show event name in trace output Masami Hiramatsu
2009-09-10 23:52 ` [PATCH tracing/kprobes 7/7] tracing/kprobes: Support custom subsystem for each kprobe event Masami Hiramatsu
2009-09-11  1:33 ` [PATCH tracing/kprobes 0/7] tracing/kprobes: kprobe-based event tracer update and perf support Frederic Weisbecker
2009-09-11  1:45   ` Steven Rostedt
2009-09-11 15:59   ` Masami Hiramatsu
2009-09-14  3:00     ` Frederic Weisbecker
     [not found]       ` <4AAE7A5D.8010503@redhat.com>
2009-09-14 20:53         ` Frederic Weisbecker
     [not found]           ` <4AAEB149.2070300@redhat.com>
2009-09-14 21:09             ` Frederic Weisbecker
2009-09-11 19:03   ` Frank Ch. Eigler
2009-09-11 19:07     ` Christoph Hellwig
2009-09-11 19:51       ` Mark Wielaard
     [not found]         ` <20090911200317.GA3827@infradead.org>
2009-09-12  1:20           ` Masami Hiramatsu
2009-09-11 19:15     ` Frederic Weisbecker
2009-09-11 15:36 ` Frederic Weisbecker
2009-09-11 21:44   ` Masami Hiramatsu
2009-09-14  2:23     ` Frederic Weisbecker

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=20090911031253.GD16396@nowhere \
    --to=fweisbec@gmail.com \
    --cc=ak@linux.intel.com \
    --cc=ananth@in.ibm.com \
    --cc=dle-develop@lists.sourceforge.net \
    --cc=fche@redhat.com \
    --cc=hch@infradead.org \
    --cc=hpa@zytor.com \
    --cc=jbaron@redhat.com \
    --cc=jkenisto@us.ibm.com \
    --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=prasad@linux.vnet.ibm.com \
    --cc=rostedt@goodmis.org \
    --cc=srikar@linux.vnet.ibm.com \
    --cc=systemtap@sources.redhat.com \
    --cc=tzanussi@gmail.com \
    /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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).