From: David Sharp <dhsharp@google.com>
To: rostedt@goodmis.org, linux-kernel@vger.kernel.org
Cc: mrubin@google.com, David Sharp <dhsharp@google.com>
Subject: [PATCH 04/15] ftrace: pack event structures.
Date: Fri, 3 Dec 2010 16:13:18 -0800 [thread overview]
Message-ID: <1291421609-14665-5-git-send-email-dhsharp@google.com> (raw)
In-Reply-To: <1291421609-14665-1-git-send-email-dhsharp@google.com>
Ftrace event structures have a 12-byte struct trace_entry at the beginning.
If the structure is aligned, this means that if the first field is 64-bits,
there will be 4 bytes of padding. Ironically, due to the 4-byte ringbuffer
header, this will make 64-bit writes unaligned, if the ring buffer position
is currently 64-bit aligned:
4(rb)+12(ftrace)+4(pad) = 20; 20%8 = 4
Adding __attribute__((packed)) to the event structures removes the extra
space from the trace events, and actually improves alignment of trace
events with a first field that is 64-bits.
About 65 tracepoints have a 4-byte pad at offset 12:
# find events -name format | xargs -n1 awk '
$1=="name:" {name=$2}
$1=="format:"{FS="\t"}
$3=="offset:12;" && $4=="size:4;"{okay=1}
$3=="offset:16;" && !okay {print name}' | wc -l
65
With all 'syscalls' and 'timer' events enabled, this results in a 5%
improvement in a simple 512MB read benchmark with warm caches.
Tested:
setup:
# echo 1 >events/syscalls/enable
# echo 1 >events/timer/enable
# echo 0 > tracing_enabled
off:
# for n in $(seq 10) ; do \
time dd if=/dev/hda3 of=/dev/null bs=1K count=512K ; \
done
on:
# for n in $(seq 10) ; do \
echo 1 >tracing_enabled; \
time dd if=/dev/hda3 of=/dev/null bs=1K count=512K ; \
echo 0 >tracing_enabled; \
echo > trace; \
done
real time mean/median/stdev
w/o patch off: 1.1679/1.164/0.0169
w/o patch on : 1.9432/1.936/0.0274
w/ patch off: 1.1715/1.159/0.0431
w/ patch on : 1.8425/1.836/0.0138
"on" delta: -0.1007 --> -5.2%
Google-Bug-Id: 2895627
Signed-off-by: David Sharp <dhsharp@google.com>
---
include/trace/ftrace.h | 5 +++--
kernel/trace/trace.h | 2 +-
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h
index a9377c0..51d1f52 100644
--- a/include/trace/ftrace.h
+++ b/include/trace/ftrace.h
@@ -48,7 +48,8 @@
#define __array(type, item, len) type item[len];
#undef __dynamic_array
-#define __dynamic_array(type, item, len) u32 __data_loc_##item;
+#define __dynamic_array(type, item, len) \
+ u32 __data_loc_##item __attribute__((aligned(4)));
#undef __string
#define __string(item, src) __dynamic_array(char, item, -1)
@@ -62,7 +63,7 @@
struct trace_entry ent; \
tstruct \
char __data[0]; \
- }; \
+ } __attribute__((packed)); \
\
static struct ftrace_event_class event_class_##name;
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index 9021f8c..2e80433 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -60,7 +60,7 @@ enum trace_type {
struct struct_name { \
struct trace_entry ent; \
tstruct \
- }
+ } __attribute__((packed))
#undef TP_ARGS
#define TP_ARGS(args...) args
--
1.7.3.1
next prev parent reply other threads:[~2010-12-04 0:13 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-04 0:13 [Patch 00/15] Reduce tracing payload size David Sharp
2010-12-04 0:13 ` [PATCH 01/15] tracing: Add a 'buffer_overwrite' debugfs file David Sharp
2010-12-04 1:57 ` Steven Rostedt
2010-12-08 20:15 ` David Sharp
2010-12-08 21:46 ` [PATCH] tracing: Add an 'overwrite' trace_option David Sharp
2010-12-14 0:39 ` David Sharp
2011-03-09 0:45 ` David Sharp
2011-03-11 9:45 ` [tip:perf/core] " tip-bot for David Sharp
2010-12-04 0:13 ` [PATCH 02/15] ring_buffer.c: Remove unused #include <linux/trace_irq.h> David Sharp
2011-03-11 9:46 ` [tip:perf/core] ring-buffer: " tip-bot for David Sharp
2010-12-04 0:13 ` [PATCH 03/15] ring_buffer: Align buffer_page struct allocations only to fit the flags David Sharp
2010-12-04 1:43 ` Steven Rostedt
2010-12-07 22:44 ` David Sharp
2010-12-04 0:13 ` David Sharp [this message]
2011-03-08 23:30 ` [PATCH 04/15] ftrace: pack event structures Steven Rostedt
2011-03-09 1:09 ` Steven Rostedt
2011-03-09 6:39 ` David Miller
2011-03-09 15:18 ` Steven Rostedt
2011-03-10 23:21 ` David Sharp
2011-03-11 3:37 ` Steven Rostedt
2011-03-09 13:01 ` Steven Rostedt
2010-12-04 0:13 ` [PATCH 05/15] ftrace: fix event alignment: ftrace:context_switch and ftrace:wakeup David Sharp
2011-03-11 9:48 ` [tip:perf/core] tracing: Fix " tip-bot for David Sharp
2010-12-04 0:13 ` [PATCH 06/15] ftrace: fix event alignment: module:module_request David Sharp
2010-12-04 1:47 ` Steven Rostedt
2010-12-06 1:28 ` Li Zefan
2011-03-11 9:48 ` [tip:perf/core] tracing: Fix " tip-bot for David Sharp
2010-12-04 0:13 ` [PATCH 07/15] ftrace: fix event alignment: kvm:kvm_hv_hypercall David Sharp
2010-12-04 1:49 ` Steven Rostedt
2010-12-04 8:11 ` Avi Kivity
2010-12-06 20:38 ` David Sharp
2010-12-06 20:38 ` David Sharp
2010-12-07 9:22 ` Avi Kivity
2010-12-07 21:16 ` David Sharp
2010-12-08 9:18 ` Avi Kivity
2011-03-08 23:55 ` Steven Rostedt
2011-03-09 8:50 ` Avi Kivity
2011-03-09 12:54 ` Steven Rostedt
2011-03-09 13:01 ` Avi Kivity
2011-03-11 9:49 ` [tip:perf/core] tracing: Fix " tip-bot for David Sharp
2010-12-04 0:13 ` [PATCH 08/15] ftrace: fix event alignment: mce:mce_record David Sharp
2010-12-04 1:50 ` Steven Rostedt
2010-12-09 13:33 ` Frederic Weisbecker
2011-03-11 9:49 ` [tip:perf/core] tracing: Fix " tip-bot for David Sharp
2010-12-04 0:13 ` [PATCH 09/15] ftrace: fix event alignment: skb:kfree_skb David Sharp
2010-12-04 1:52 ` Steven Rostedt
2010-12-04 13:38 ` Neil Horman
2011-03-11 9:50 ` [tip:perf/core] tracing: Fix " tip-bot for David Sharp
2010-12-04 0:13 ` [PATCH 10/15] ftrace: fix event alignment: jbd2:* David Sharp
2010-12-04 1:52 ` Steven Rostedt
2011-03-09 0:03 ` Steven Rostedt
2011-03-09 0:31 ` Ted Ts'o
2011-03-09 0:41 ` Steven Rostedt
2010-12-04 0:13 ` [PATCH 11/15] ftrace: fix event alignment: ext4:* David Sharp
2010-12-04 1:53 ` Steven Rostedt
2011-03-09 0:04 ` Steven Rostedt
2010-12-04 0:13 ` [PATCH 12/15] trace_output.c: adjust conditional expression formatting David Sharp
2011-03-11 9:50 ` [tip:perf/core] tracing: Adjust conditional expression latency formatting tip-bot for David Sharp
2010-12-04 0:13 ` [PATCH 13/15] small_traces: Add config option to shrink trace events David Sharp
2010-12-04 1:56 ` Steven Rostedt
2010-12-04 2:33 ` David Sharp
2010-12-04 2:54 ` Steven Rostedt
2010-12-09 14:55 ` Frederic Weisbecker
2010-12-09 15:08 ` Steven Rostedt
2010-12-09 15:28 ` Frederic Weisbecker
2010-12-09 16:16 ` Mathieu Desnoyers
2011-03-09 0:23 ` Steven Rostedt
2010-12-04 0:13 ` [PATCH 14/15] small_traces: Remove trace output of large fields David Sharp
2010-12-04 0:13 ` [PATCH 15/15] small_traces: Remove 8 bytes from trace_entry David Sharp
2010-12-06 13:22 ` [Patch 00/15] Reduce tracing payload size Andi Kleen
2010-12-06 13:56 ` Ted Ts'o
2010-12-06 14:58 ` Andi Kleen
2010-12-06 16:17 ` Steven Rostedt
2010-12-06 16:31 ` Miguel Ojeda
2010-12-06 16:41 ` Andi Kleen
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=1291421609-14665-5-git-send-email-dhsharp@google.com \
--to=dhsharp@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mrubin@google.com \
--cc=rostedt@goodmis.org \
/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.