From: Masami Hiramatsu <mhiramat@redhat.com>
To: Ingo Molnar <mingo@elte.hu>, Steven Rostedt <rostedt@goodmis.org>,
lkml <linux-kernel@vger.kernel.org>
Cc: systemtap <systemtap@sources.redhat.com>,
kvm <kvm@vger.kernel.org>,
DLE <dle-develop@lists.sourceforge.net>,
Masami Hiramatsu <mhiramat@redhat.com>,
Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
Christoph Hellwig <hch@infradead.org>,
Steven Rostedt <rostedt@goodmis.org>, Ingo Molnar <mingo@elte.hu>,
Frederic Weisbecker <fweisbec@gmail.com>,
Tom Zanussi <tzanussi@gmail.com>, Li Zefan <lizf@cn.fujitsu.com>
Subject: [PATCH -tip -v12 11/11] tracing: Add kprobes event profiling interface
Date: Thu, 16 Jul 2009 11:57:59 -0400 [thread overview]
Message-ID: <20090716155759.6266.74017.stgit@localhost.localdomain> (raw)
In-Reply-To: <20090716155652.6266.39970.stgit@localhost.localdomain>
Add profiling interaces for each kprobes event.
Changes from v11:
- Fix a typo and remove redundant check.
Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Tom Zanussi <tzanussi@gmail.com>
Cc: Li Zefan <lizf@cn.fujitsu.com>
---
Documentation/trace/kprobetrace.txt | 8 ++++++
kernel/trace/trace_kprobe.c | 45 +++++++++++++++++++++++++++++++++++
2 files changed, 53 insertions(+), 0 deletions(-)
diff --git a/Documentation/trace/kprobetrace.txt b/Documentation/trace/kprobetrace.txt
index 437ad49..9c6be05 100644
--- a/Documentation/trace/kprobetrace.txt
+++ b/Documentation/trace/kprobetrace.txt
@@ -69,6 +69,14 @@ filter:
names and field names for describing filters.
+Event Profiling
+---------------
+ You can check the total number of probe hits and probe miss-hits via
+/sys/kernel/debug/tracing/kprobe_profile.
+ The first column is event name, the second is the number of probe hits,
+the third is the number of probe miss-hits.
+
+
Usage examples
--------------
To add a probe as a new event, write a new definition to kprobe_events
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index 3444d1d..21e619f 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -178,6 +178,7 @@ struct trace_probe {
struct kprobe kp;
struct kretprobe rp;
};
+ unsigned long nhits;
const char *symbol; /* symbol name */
struct ftrace_event_call call;
unsigned int nr_args;
@@ -766,6 +767,39 @@ static const struct file_operations kprobe_events_ops = {
.write = probes_write,
};
+/* Probes profiling interfaces */
+static int profile_seq_show(struct seq_file *m, void *v)
+{
+ struct trace_probe *tp = v;
+
+ seq_printf(m, "%s", tp->call.name);
+
+ seq_printf(m, "\t%8lu %8lu\n", tp->nhits,
+ probe_is_return(tp) ? tp->rp.kp.nmissed : tp->kp.nmissed);
+
+ return 0;
+}
+
+static const struct seq_operations profile_seq_op = {
+ .start = probes_seq_start,
+ .next = probes_seq_next,
+ .stop = probes_seq_stop,
+ .show = profile_seq_show
+};
+
+static int profile_open(struct inode *inode, struct file *file)
+{
+ return seq_open(file, &profile_seq_op);
+}
+
+static const struct file_operations kprobe_profile_ops = {
+ .owner = THIS_MODULE,
+ .open = profile_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = seq_release,
+};
+
/* Kprobe handler */
static __kprobes int kprobe_trace_func(struct kprobe *kp, struct pt_regs *regs)
{
@@ -776,6 +810,8 @@ static __kprobes int kprobe_trace_func(struct kprobe *kp, struct pt_regs *regs)
unsigned long irq_flags;
struct ftrace_event_call *call = &tp->call;
+ tp->nhits++;
+
local_save_flags(irq_flags);
pc = preempt_count();
@@ -1152,9 +1188,18 @@ static __init int init_kprobe_trace(void)
entry = debugfs_create_file("kprobe_events", 0644, d_tracer,
NULL, &kprobe_events_ops);
+ /* Event list interface */
if (!entry)
pr_warning("Could not create debugfs "
"'kprobe_events' entry\n");
+
+ /* Profile interface */
+ entry = debugfs_create_file("kprobe_profile", 0444, d_tracer,
+ NULL, &kprobe_profile_ops);
+
+ if (!entry)
+ pr_warning("Could not create debugfs "
+ "'kprobe_profile' entry\n");
return 0;
}
fs_initcall(init_kprobe_trace);
--
Masami Hiramatsu
Software Engineer
Hitachi Computer Products (America), Inc.
Software Solutions Division
e-mail: mhiramat@redhat.com
WARNING: multiple messages have this Message-ID (diff)
From: Masami Hiramatsu <mhiramat@redhat.com>
To: Ingo Molnar <mingo@elte.hu>, Steven Rostedt <rostedt@goodmis.org>,
lkml<linux-kernel@vger.kernel.org>
Cc: systemtap<systemtap@sources.redhat.com>, kvm<kvm@vger.kernel.org>,
DLE<dle-develop@lists.sourceforge.net>,
Masami Hiramatsu <mhiramat@redhat.com>,
Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
Christoph Hellwig <hch@infradead.org>,
Steven Rostedt <rostedt@goodmis.org>,
Ingo Molnar <mingo@elte.hu>,
Frederic Weisbecker <fweisbec@gmail.com>,
Tom Zanussi <tzanussi@gmail.com>,
Li Zefan <lizf@cn.fujitsu.com>
Subject: [PATCH -tip -v12 11/11] tracing: Add kprobes event profiling interface
Date: Thu, 16 Jul 2009 11:57:59 -0400 [thread overview]
Message-ID: <20090716155759.6266.74017.stgit@localhost.localdomain> (raw)
In-Reply-To: <20090716155652.6266.39970.stgit@localhost.localdomain>
Add profiling interaces for each kprobes event.
Changes from v11:
- Fix a typo and remove redundant check.
Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Tom Zanussi <tzanussi@gmail.com>
Cc: Li Zefan <lizf@cn.fujitsu.com>
---
Documentation/trace/kprobetrace.txt | 8 ++++++
kernel/trace/trace_kprobe.c | 45 +++++++++++++++++++++++++++++++++++
2 files changed, 53 insertions(+), 0 deletions(-)
diff --git a/Documentation/trace/kprobetrace.txt b/Documentation/trace/kprobetrace.txt
index 437ad49..9c6be05 100644
--- a/Documentation/trace/kprobetrace.txt
+++ b/Documentation/trace/kprobetrace.txt
@@ -69,6 +69,14 @@ filter:
names and field names for describing filters.
+Event Profiling
+---------------
+ You can check the total number of probe hits and probe miss-hits via
+/sys/kernel/debug/tracing/kprobe_profile.
+ The first column is event name, the second is the number of probe hits,
+the third is the number of probe miss-hits.
+
+
Usage examples
--------------
To add a probe as a new event, write a new definition to kprobe_events
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index 3444d1d..21e619f 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -178,6 +178,7 @@ struct trace_probe {
struct kprobe kp;
struct kretprobe rp;
};
+ unsigned long nhits;
const char *symbol; /* symbol name */
struct ftrace_event_call call;
unsigned int nr_args;
@@ -766,6 +767,39 @@ static const struct file_operations kprobe_events_ops = {
.write = probes_write,
};
+/* Probes profiling interfaces */
+static int profile_seq_show(struct seq_file *m, void *v)
+{
+ struct trace_probe *tp = v;
+
+ seq_printf(m, "%s", tp->call.name);
+
+ seq_printf(m, "\t%8lu %8lu\n", tp->nhits,
+ probe_is_return(tp) ? tp->rp.kp.nmissed : tp->kp.nmissed);
+
+ return 0;
+}
+
+static const struct seq_operations profile_seq_op = {
+ .start = probes_seq_start,
+ .next = probes_seq_next,
+ .stop = probes_seq_stop,
+ .show = profile_seq_show
+};
+
+static int profile_open(struct inode *inode, struct file *file)
+{
+ return seq_open(file, &profile_seq_op);
+}
+
+static const struct file_operations kprobe_profile_ops = {
+ .owner = THIS_MODULE,
+ .open = profile_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = seq_release,
+};
+
/* Kprobe handler */
static __kprobes int kprobe_trace_func(struct kprobe *kp, struct pt_regs *regs)
{
@@ -776,6 +810,8 @@ static __kprobes int kprobe_trace_func(struct kprobe *kp, struct pt_regs *regs)
unsigned long irq_flags;
struct ftrace_event_call *call = &tp->call;
+ tp->nhits++;
+
local_save_flags(irq_flags);
pc = preempt_count();
@@ -1152,9 +1188,18 @@ static __init int init_kprobe_trace(void)
entry = debugfs_create_file("kprobe_events", 0644, d_tracer,
NULL, &kprobe_events_ops);
+ /* Event list interface */
if (!entry)
pr_warning("Could not create debugfs "
"'kprobe_events' entry\n");
+
+ /* Profile interface */
+ entry = debugfs_create_file("kprobe_profile", 0444, d_tracer,
+ NULL, &kprobe_profile_ops);
+
+ if (!entry)
+ pr_warning("Could not create debugfs "
+ "'kprobe_profile' entry\n");
return 0;
}
fs_initcall(init_kprobe_trace);
--
Masami Hiramatsu
Software Engineer
Hitachi Computer Products (America), Inc.
Software Solutions Division
e-mail: mhiramat@redhat.com
next prev parent reply other threads:[~2009-07-16 15:55 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-16 15:56 [PATCH -tip -v12 00/11] tracing: kprobe-based event tracer and x86 instruction decoder Masami Hiramatsu
2009-07-16 15:56 ` Masami Hiramatsu
2009-07-16 15:57 ` [PATCH -tip -v12 01/11] x86: instruction decoder API Masami Hiramatsu
2009-07-16 15:57 ` Masami Hiramatsu
2009-07-16 16:19 ` H. Peter Anvin
2009-07-16 16:52 ` Masami Hiramatsu
2009-07-16 16:37 ` Sam Ravnborg
2009-07-16 17:28 ` Masami Hiramatsu
2009-07-16 17:28 ` Masami Hiramatsu
2009-07-16 20:00 ` Sam Ravnborg
2009-07-16 20:48 ` Masami Hiramatsu
2009-07-16 20:48 ` Masami Hiramatsu
2009-07-16 15:57 ` [PATCH -tip -v12 02/11] x86: x86 instruction decoder build-time selftest Masami Hiramatsu
2009-07-16 15:57 ` Masami Hiramatsu
2009-07-16 16:29 ` Sam Ravnborg
2009-07-16 17:37 ` Masami Hiramatsu
2009-07-16 17:37 ` Masami Hiramatsu
2009-07-16 19:40 ` Masami Hiramatsu
2009-07-16 19:40 ` Masami Hiramatsu
2009-07-16 19:55 ` Sam Ravnborg
2009-07-16 20:16 ` Masami Hiramatsu
2009-07-16 20:16 ` Masami Hiramatsu
2009-07-16 15:57 ` [PATCH -tip -v12 03/11] kprobes: checks probe address is instruction boudary on x86 Masami Hiramatsu
2009-07-16 15:57 ` Masami Hiramatsu
2009-07-16 15:57 ` [PATCH -tip -v12 04/11] kprobes: cleanup fix_riprel() using insn decoder " Masami Hiramatsu
2009-07-16 15:57 ` Masami Hiramatsu
2009-07-16 15:57 ` [PATCH -tip -v12 05/11] x86: add pt_regs register and stack access APIs Masami Hiramatsu
2009-07-16 15:57 ` Masami Hiramatsu
2009-07-16 15:57 ` Masami Hiramatsu
2009-07-16 15:57 ` Masami Hiramatsu
2009-07-16 15:57 ` [PATCH -tip -v12 06/11] tracing: ftrace dynamic ftrace_event_call support Masami Hiramatsu
2009-07-16 15:57 ` [PATCH -tip -v12 07/11] tracing: Introduce TRACE_FIELD_ZERO() macro Masami Hiramatsu
2009-07-16 15:57 ` [PATCH -tip -v12 08/11] tracing: add kprobe-based event tracer Masami Hiramatsu
2009-07-16 15:57 ` [PATCH -tip -v12 09/11] tracing: Kprobe-tracer supports more than 6 arguments Masami Hiramatsu
2009-07-16 15:57 ` [PATCH -tip -v12 10/11] tracing: Generate names for each kprobe event automatically Masami Hiramatsu
2009-07-16 15:57 ` Masami Hiramatsu [this message]
2009-07-16 15:57 ` [PATCH -tip -v12 11/11] tracing: Add kprobes event profiling interface Masami Hiramatsu
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=20090716155759.6266.74017.stgit@localhost.localdomain \
--to=mhiramat@redhat.com \
--cc=ananth@in.ibm.com \
--cc=dle-develop@lists.sourceforge.net \
--cc=fweisbec@gmail.com \
--cc=hch@infradead.org \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lizf@cn.fujitsu.com \
--cc=mingo@elte.hu \
--cc=rostedt@goodmis.org \
--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 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.