aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2010-10-08 13:51:48 -0400
committerSteven Rostedt <rostedt@goodmis.org>2010-10-19 13:22:36 -0400
commit747e94ae3d1b4c9bf5380e569f614eb9040b79e7 (patch)
tree29404444fa5106e6d3361fc6c85b4463777ec3a3 /kernel/trace
parent51ea8a88aae425915b458bfe295f1f10a3d52781 (diff)
ring-buffer: Make write slow path out of line
Gcc inlines the slow path of the ring buffer write which can hurt performance. This patch simply forces the slow path function rb_move_tail() to always be a function. The ring_buffer_benchmark module with reader_disabled=1 shows that this patch changes the time to record an event from 135 ns to 132 ns. (3 ns or 2.22% improvement) Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel/trace')
-rw-r--r--kernel/trace/ring_buffer.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index bca96377fd4e..0b88df849a59 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -1823,7 +1823,10 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer,
1823 local_sub(length, &tail_page->write); 1823 local_sub(length, &tail_page->write);
1824} 1824}
1825 1825
1826static struct ring_buffer_event * 1826/*
1827 * This is the slow path, force gcc not to inline it.
1828 */
1829static noinline struct ring_buffer_event *
1827rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer, 1830rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer,
1828 unsigned long length, unsigned long tail, 1831 unsigned long length, unsigned long tail,
1829 struct buffer_page *tail_page, u64 *ts) 1832 struct buffer_page *tail_page, u64 *ts)
@@ -1943,7 +1946,7 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer,
1943 tail = write - length; 1946 tail = write - length;
1944 1947
1945 /* See if we shot pass the end of this buffer page */ 1948 /* See if we shot pass the end of this buffer page */
1946 if (write > BUF_PAGE_SIZE) 1949 if (unlikely(write > BUF_PAGE_SIZE))
1947 return rb_move_tail(cpu_buffer, length, tail, 1950 return rb_move_tail(cpu_buffer, length, tail,
1948 tail_page, ts); 1951 tail_page, ts);
1949 1952