public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org
Cc: Ingo Molnar <mingo@elte.hu>,
	Andrew Morton <akpm@linux-foundation.org>,
	Frederic Weisbecker <fweisbec@gmail.com>
Subject: [PATCH 4/5] tracing: have splice only copy full pages
Date: Wed, 29 Apr 2009 00:48:18 -0400	[thread overview]
Message-ID: <20090429045907.265491855@goodmis.org> (raw)
In-Reply-To: 20090429044814.138790038@goodmis.org

[-- Attachment #1: 0004-tracing-have-splice-only-copy-full-pages.patch --]
[-- Type: text/plain, Size: 1547 bytes --]

From: Steven Rostedt <srostedt@redhat.com>

Splice works with pages, it is much more effecient to use an entire
page than to copy bits over several pages.

Using logdev to trace the internals of the splice mechanism, I was
able to see that splice can be very aggressive. When tracing is
occurring, and the reader caught up to the writer, and the writer
is on the reader page, the reader will copy what is there into the
splice page. Splice may iterate over several pages and if the
writer is still writing to the page, the reader will keep copying
bits to new pages to pass to userspace.

This patch changes it to only pass data to userspace if the page
is full (the writer has left the page). This has a small side effect
that splice can not read a partial page, and must wait for the
page to fill. This should not be an issue. If tracing has stopped,
then a use of "read" will still read all of the page.

[ Impact: better performance for ring buffer splice code ]

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
 kernel/trace/trace.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 0aeb3b9..f5427e0 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -3542,7 +3542,7 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
 		}
 
 		r = ring_buffer_read_page(ref->buffer, &ref->page,
-					  len, info->cpu, 0);
+					  len, info->cpu, 1);
 		if (r < 0) {
 			ring_buffer_free_read_page(ref->buffer,
 						   ref->page);
-- 
1.6.2.1

-- 

  parent reply	other threads:[~2009-04-29  5:00 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-29  4:48 [PATCH 0/5] [GIT PULL] tracing/splice/ringbuffer: updates for tip Steven Rostedt
2009-04-29  4:48 ` [PATCH 1/5] tracing: convert ftrace_dump spinlocks to raw Steven Rostedt
2009-04-29  5:07   ` Andrew Morton
2009-04-29  5:55     ` Ingo Molnar
2009-04-29  4:48 ` [PATCH 2/5] tracing: fix ref count in splice pages Steven Rostedt
2009-04-29  4:48 ` [PATCH 3/5] tracing: only add splice page if entries exist Steven Rostedt
2009-04-29  4:48 ` Steven Rostedt [this message]
2009-04-29  4:48 ` [PATCH 5/5] ring-buffer: fix printk output Steven Rostedt
2009-04-29  5:20   ` Andrew Morton
2009-04-29  5:43     ` Ingo Molnar
2009-04-29  5:55       ` Andrew Morton
2009-04-29  6:09         ` Ingo Molnar
2009-04-29  6:20           ` Andrew Morton
2009-04-29  7:22             ` Ingo Molnar
2009-04-29  7:41               ` Andrew Morton
2009-04-29  9:56                 ` Ingo Molnar
2009-04-29 15:09                   ` Andrew Morton
2009-04-29 19:45                     ` Ingo Molnar
2009-04-29 19:52                       ` Andrew Morton
2009-04-29 20:11                         ` Ingo Molnar
2009-04-29 16:19             ` Valdis.Kletnieks
2009-04-29 20:15               ` Ingo Molnar
2009-04-29  6:03 ` [PATCH 0/5] [GIT PULL] tracing/splice/ringbuffer: updates for tip 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=20090429045907.265491855@goodmis.org \
    --to=rostedt@goodmis.org \
    --cc=akpm@linux-foundation.org \
    --cc=fweisbec@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    /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