From: Eduard - Gabriel Munteanu <eduard.munteanu@linux360.ro>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, hpa@zytor.com, mingo@redhat.com,
eduard.munteanu@linux360.ro, tglx@linutronix.de, mingo@elte.hu
Subject: [tip:tracing/kmemtrace-v2] kmemtrace: restore original tracing data binary format, improve ABI
Date: Fri, 3 Apr 2009 10:37:07 GMT [thread overview]
Message-ID: <tip-42af9054c0eeed09ec58d13ec8bf52d225ebcfcc@git.kernel.org> (raw)
In-Reply-To: <161be9ca8a27b432c4a6ab79f47788c4521652ae.1237813499.git.eduard.munteanu@linux360.ro>
Commit-ID: 42af9054c0eeed09ec58d13ec8bf52d225ebcfcc
Gitweb: http://git.kernel.org/tip/42af9054c0eeed09ec58d13ec8bf52d225ebcfcc
Author: Eduard - Gabriel Munteanu <eduard.munteanu@linux360.ro>
AuthorDate: Mon, 23 Mar 2009 15:12:26 +0200
Committer: Ingo Molnar <mingo@elte.hu>
CommitDate: Fri, 3 Apr 2009 12:23:08 +0200
kmemtrace: restore original tracing data binary format, improve ABI
When kmemtrace was ported to ftrace, the marker strings were taken as
an indication of how the traced data was being exposed to the userspace.
However, the actual format had been binary, not text.
This restores the original binary format, while also adding an origin CPU
field (since ftrace doesn't expose the data per-CPU to userspace), and
re-adding the timestamp field. It also drops arch-independent field
sizing where it didn't make sense, so pointers won't always be 64 bits
wide like they used to.
Signed-off-by: Eduard - Gabriel Munteanu <eduard.munteanu@linux360.ro>
LKML-Reference: <161be9ca8a27b432c4a6ab79f47788c4521652ae.1237813499.git.eduard.munteanu@linux360.ro>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
kernel/trace/kmemtrace.c | 82 ++++++++++++++++++++++++++++++++-------------
1 files changed, 58 insertions(+), 24 deletions(-)
diff --git a/kernel/trace/kmemtrace.c b/kernel/trace/kmemtrace.c
index ae259f0..d8c2d0c 100644
--- a/kernel/trace/kmemtrace.c
+++ b/kernel/trace/kmemtrace.c
@@ -208,47 +208,81 @@ static void kmemtrace_headers(struct seq_file *s)
}
/*
- * The two following functions give the original output from kmemtrace,
- * or something close to....perhaps they need some missing things
+ * The following functions give the original output from kmemtrace,
+ * plus the origin CPU, since reordering occurs in-kernel now.
*/
+
+#define KMEMTRACE_USER_ALLOC 0
+#define KMEMTRACE_USER_FREE 1
+
+struct kmemtrace_user_event {
+ u8 event_id;
+ u8 type_id;
+ u16 event_size;
+ u32 cpu;
+ u64 timestamp;
+ unsigned long call_site;
+ unsigned long ptr;
+};
+
+struct kmemtrace_user_event_alloc {
+ size_t bytes_req;
+ size_t bytes_alloc;
+ unsigned gfp_flags;
+ int node;
+};
+
static enum print_line_t
-kmemtrace_print_alloc_original(struct trace_iterator *iter,
- struct kmemtrace_alloc_entry *entry)
+kmemtrace_print_alloc_user(struct trace_iterator *iter,
+ struct kmemtrace_alloc_entry *entry)
{
struct trace_seq *s = &iter->seq;
- int ret;
-
- /* Taken from the old linux/kmemtrace.h */
- ret = trace_seq_printf(s, "type_id %d call_site %lu ptr %lu "
- "bytes_req %lu bytes_alloc %lu gfp_flags %lu node %d\n",
- entry->type_id, entry->call_site, (unsigned long) entry->ptr,
- (unsigned long) entry->bytes_req, (unsigned long) entry->bytes_alloc,
- (unsigned long) entry->gfp_flags, entry->node);
+ struct kmemtrace_user_event *ev;
+ struct kmemtrace_user_event_alloc *ev_alloc;
- if (!ret)
+ ev = trace_seq_reserve(s, sizeof(*ev));
+ if (!ev)
+ return TRACE_TYPE_PARTIAL_LINE;
+ ev->event_id = KMEMTRACE_USER_ALLOC;
+ ev->type_id = entry->type_id;
+ ev->event_size = sizeof(*ev) + sizeof(*ev_alloc);
+ ev->cpu = iter->cpu;
+ ev->timestamp = iter->ts;
+ ev->call_site = entry->call_site;
+ ev->ptr = (unsigned long) entry->ptr;
+
+ ev_alloc = trace_seq_reserve(s, sizeof(*ev_alloc));
+ if (!ev_alloc)
return TRACE_TYPE_PARTIAL_LINE;
+ ev_alloc->bytes_req = entry->bytes_req;
+ ev_alloc->bytes_alloc = entry->bytes_alloc;
+ ev_alloc->gfp_flags = entry->gfp_flags;
+ ev_alloc->node = entry->node;
return TRACE_TYPE_HANDLED;
}
static enum print_line_t
-kmemtrace_print_free_original(struct trace_iterator *iter,
- struct kmemtrace_free_entry *entry)
+kmemtrace_print_free_user(struct trace_iterator *iter,
+ struct kmemtrace_free_entry *entry)
{
struct trace_seq *s = &iter->seq;
- int ret;
+ struct kmemtrace_user_event *ev;
- /* Taken from the old linux/kmemtrace.h */
- ret = trace_seq_printf(s, "type_id %d call_site %lu ptr %lu\n",
- entry->type_id, entry->call_site, (unsigned long) entry->ptr);
-
- if (!ret)
+ ev = trace_seq_reserve(s, sizeof(*ev));
+ if (!ev)
return TRACE_TYPE_PARTIAL_LINE;
+ ev->event_id = KMEMTRACE_USER_FREE;
+ ev->type_id = entry->type_id;
+ ev->event_size = sizeof(*ev);
+ ev->cpu = iter->cpu;
+ ev->timestamp = iter->ts;
+ ev->call_site = entry->call_site;
+ ev->ptr = (unsigned long) entry->ptr;
return TRACE_TYPE_HANDLED;
}
-
/* The two other following provide a more minimalistic output */
static enum print_line_t
kmemtrace_print_alloc_compress(struct trace_iterator *iter,
@@ -385,7 +419,7 @@ static enum print_line_t kmemtrace_print_line(struct trace_iterator *iter)
if (kmem_tracer_flags.val & TRACE_KMEM_OPT_MINIMAL)
return kmemtrace_print_alloc_compress(iter, field);
else
- return kmemtrace_print_alloc_original(iter, field);
+ return kmemtrace_print_alloc_user(iter, field);
}
case TRACE_KMEM_FREE: {
@@ -394,7 +428,7 @@ static enum print_line_t kmemtrace_print_line(struct trace_iterator *iter)
if (kmem_tracer_flags.val & TRACE_KMEM_OPT_MINIMAL)
return kmemtrace_print_free_compress(iter, field);
else
- return kmemtrace_print_free_original(iter, field);
+ return kmemtrace_print_free_user(iter, field);
}
default:
next prev parent reply other threads:[~2009-04-03 10:41 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-23 13:12 [PATCH 0/7] kmemtrace & tracing updates Eduard - Gabriel Munteanu
2009-03-23 13:12 ` [PATCH 1/7] RCU: don't include unnecessary headers, allow kmemtrace w/ tracepoints Eduard - Gabriel Munteanu
2009-03-23 15:18 ` [tip:tracing/kmemtrace] rcu: " Eduard - Gabriel Munteanu
2009-03-23 13:12 ` [PATCH 2/7] tracing: provide trace_seq_reserve() Eduard - Gabriel Munteanu
2009-03-23 15:18 ` [tip:tracing/kmemtrace] " Eduard - Gabriel Munteanu
2009-03-23 13:12 ` [PATCH 3/7] tracing: add missing 'extern' keywords to trace_output.h Eduard - Gabriel Munteanu
2009-03-23 15:18 ` [tip:tracing/kmemtrace] " Eduard - Gabriel Munteanu
2009-03-23 13:12 ` [PATCH 4/7] kmemtrace: use tracepoints Eduard - Gabriel Munteanu
2009-03-23 15:18 ` [tip:tracing/kmemtrace] " Eduard - Gabriel Munteanu
2009-04-03 10:36 ` [tip:tracing/kmemtrace-v2] " Eduard - Gabriel Munteanu
2009-03-23 13:12 ` [PATCH 5/7] kmemtrace: kmemtrace_alloc() must fill type_id Eduard - Gabriel Munteanu
2009-03-23 15:19 ` [tip:tracing/kmemtrace] " Eduard - Gabriel Munteanu
2009-04-03 10:36 ` [tip:tracing/kmemtrace-v2] " Eduard - Gabriel Munteanu
2009-03-23 13:12 ` [PATCH 6/7] kmemtrace: restore original tracing data binary format, improve ABI Eduard - Gabriel Munteanu
2009-03-23 15:06 ` Ingo Molnar
2009-03-23 15:19 ` [tip:tracing/kmemtrace] " Eduard - Gabriel Munteanu
2009-03-23 15:19 ` [tip:tracing/kmemtrace] kmemtrace: small cleanups Ingo Molnar
2009-04-03 10:37 ` Eduard - Gabriel Munteanu [this message]
2009-04-03 10:37 ` [tip:tracing/kmemtrace-v2] " Ingo Molnar
2009-03-23 13:12 ` [PATCH 7/7] kmemtrace: update usage of ring_buffer_lock_reserve() Eduard - Gabriel Munteanu
2009-03-23 14:55 ` Ingo Molnar
2009-03-24 8:31 ` Eduard - Gabriel Munteanu
2009-03-23 15:29 ` [PATCH 0/7] kmemtrace & tracing updates Ingo Molnar
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=tip-42af9054c0eeed09ec58d13ec8bf52d225ebcfcc@git.kernel.org \
--to=eduard.munteanu@linux360.ro \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=mingo@redhat.com \
--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