All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jens Axboe <jens.axboe@oracle.com>
To: Nick Piggin <nickpiggin@yahoo.com.au>
Cc: Miklos Szeredi <miklos@szeredi.hu>,
	linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-mm@kvack.org, torvalds@linux-foundation.org
Subject: Re: [rfc patch 3/4] splice: remove confirm from pipe_buf_operations
Date: Tue, 24 Jun 2008 14:22:58 +0200	[thread overview]
Message-ID: <20080624122258.GR20851@kernel.dk> (raw)
In-Reply-To: <200806242216.41548.nickpiggin@yahoo.com.au>

On Tue, Jun 24 2008, Nick Piggin wrote:
> On Tuesday 24 June 2008 21:36, Miklos Szeredi wrote:
> > > It's an unfortunate side effect of the read-ahead, I'd much rather just
> > > get rid of that. It _should_ behave like the non-ra case, when a page is
> > > added it merely has IO started on it. So we want to have that be
> > > something like
> > >
> > >         if (!PageUptodate(page) && !PageInFlight(page))
> > >                 ...
> > >
> > > basically like PageWriteback(), but for read-in.
> >
> > OK it could be done, possibly at great pain.  But why is it important?
> 
> It has been considered, but adding atomic operations on these paths
> always really hurts. Adding something like this would basically be
> another at least 2 atomic operations that can never be removed again...
> 
> Provided that you've done the sync readahead earlier, it presumably
> should be a very rare case to have to start new IO in the loop
> below, right? In which case, I wonder if we couldn't move that 2nd
> loop out of generic_file_splice_read and into
> page_cache_pipe_buf_confirm. 

That's a good point, moving those blocks of code to the other end makes
a lot of sense. Or just kill the read-ahead, or at least do it
differently. It's definitely an oversight/bug having splice from file
block on the pages it just issued read-ahead for.

> > What's the use case where it matters that splice-in should not block
> > on the read?
> 
> It just makes it generally less able to pipeline IO and computation,
> doesn't it?

Precisely!

> > And note, after the pipe is full it will block no matter what, since
> > the consumer will have to wait until the page is brought uptodate, and
> > can only then commence with getting the data out from the pipe.
> 
> True, but (especially with patches to variably size the pipe buffer)
> I imagine programs could be designed fairly carefully to the size of
> the buffer (and not just things that blast bulk data down the pipe...)

Yep, that's the whole premise for the dynpipe branch I've been carrying
around for some time.

-- 
Jens Axboe


WARNING: multiple messages have this Message-ID (diff)
From: Jens Axboe <jens.axboe@oracle.com>
To: Nick Piggin <nickpiggin@yahoo.com.au>
Cc: Miklos Szeredi <miklos@szeredi.hu>,
	linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-mm@kvack.org, torvalds@linux-foundation.org
Subject: Re: [rfc patch 3/4] splice: remove confirm from pipe_buf_operations
Date: Tue, 24 Jun 2008 14:22:58 +0200	[thread overview]
Message-ID: <20080624122258.GR20851@kernel.dk> (raw)
In-Reply-To: <200806242216.41548.nickpiggin@yahoo.com.au>

On Tue, Jun 24 2008, Nick Piggin wrote:
> On Tuesday 24 June 2008 21:36, Miklos Szeredi wrote:
> > > It's an unfortunate side effect of the read-ahead, I'd much rather just
> > > get rid of that. It _should_ behave like the non-ra case, when a page is
> > > added it merely has IO started on it. So we want to have that be
> > > something like
> > >
> > >         if (!PageUptodate(page) && !PageInFlight(page))
> > >                 ...
> > >
> > > basically like PageWriteback(), but for read-in.
> >
> > OK it could be done, possibly at great pain.  But why is it important?
> 
> It has been considered, but adding atomic operations on these paths
> always really hurts. Adding something like this would basically be
> another at least 2 atomic operations that can never be removed again...
> 
> Provided that you've done the sync readahead earlier, it presumably
> should be a very rare case to have to start new IO in the loop
> below, right? In which case, I wonder if we couldn't move that 2nd
> loop out of generic_file_splice_read and into
> page_cache_pipe_buf_confirm. 

That's a good point, moving those blocks of code to the other end makes
a lot of sense. Or just kill the read-ahead, or at least do it
differently. It's definitely an oversight/bug having splice from file
block on the pages it just issued read-ahead for.

> > What's the use case where it matters that splice-in should not block
> > on the read?
> 
> It just makes it generally less able to pipeline IO and computation,
> doesn't it?

Precisely!

> > And note, after the pipe is full it will block no matter what, since
> > the consumer will have to wait until the page is brought uptodate, and
> > can only then commence with getting the data out from the pipe.
> 
> True, but (especially with patches to variably size the pipe buffer)
> I imagine programs could be designed fairly carefully to the size of
> the buffer (and not just things that blast bulk data down the pipe...)

Yep, that's the whole premise for the dynpipe branch I've been carrying
around for some time.

-- 
Jens Axboe

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  reply	other threads:[~2008-06-24 12:23 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-21 15:46 [rfc patch 0/4] splice: cleanups and fixes Miklos Szeredi
2008-06-21 15:46 ` Miklos Szeredi
2008-06-21 15:46 ` [rfc patch 1/4] splice: fix comment Miklos Szeredi
2008-06-21 15:46   ` Miklos Szeredi, Miklos Szeredi
2008-06-21 15:46 ` [rfc patch 2/4] splice: remove steal from pipe_buf_operations Miklos Szeredi
2008-06-21 15:46   ` Miklos Szeredi, Miklos Szeredi
2008-06-24  8:01   ` Jens Axboe
2008-06-24  8:01     ` Jens Axboe
2008-06-24  8:50     ` Miklos Szeredi
2008-06-24  8:50       ` Miklos Szeredi
2008-06-24 12:21       ` Nick Piggin
2008-06-24 12:21         ` Nick Piggin
2008-06-21 15:46 ` [rfc patch 3/4] splice: remove confirm " Miklos Szeredi
2008-06-21 15:46   ` Miklos Szeredi, Miklos Szeredi
2008-06-24  8:04   ` Jens Axboe
2008-06-24  8:04     ` Jens Axboe
2008-06-24  8:54     ` Miklos Szeredi
2008-06-24  8:54       ` Miklos Szeredi
2008-06-24 11:19       ` Jens Axboe
2008-06-24 11:19         ` Jens Axboe
2008-06-24 11:36         ` Miklos Szeredi
2008-06-24 11:36           ` Miklos Szeredi
2008-06-24 11:46           ` Evgeniy Polyakov
2008-06-24 11:46             ` Evgeniy Polyakov
2008-06-24 12:02             ` Miklos Szeredi
2008-06-24 12:02               ` Miklos Szeredi
2008-06-24 12:15               ` Evgeniy Polyakov
2008-06-24 12:15                 ` Evgeniy Polyakov
2008-06-24 12:16           ` Nick Piggin
2008-06-24 12:16             ` Nick Piggin
2008-06-24 12:22             ` Jens Axboe [this message]
2008-06-24 12:22               ` Jens Axboe
2008-06-24 13:00             ` Miklos Szeredi
2008-06-24 13:00               ` Miklos Szeredi
2008-06-24 17:30           ` Linus Torvalds
2008-06-24 17:30             ` Linus Torvalds
2008-06-24 18:24             ` Miklos Szeredi
2008-06-24 18:24               ` Miklos Szeredi
2008-06-24 18:31               ` Linus Torvalds
2008-06-24 18:31                 ` Linus Torvalds
2008-06-24 19:05                 ` Miklos Szeredi
2008-06-24 19:05                   ` Miklos Szeredi
2008-06-24 19:17                   ` Linus Torvalds
2008-06-24 19:17                     ` Linus Torvalds
2008-06-24 19:24                     ` Miklos Szeredi
2008-06-24 19:24                       ` Miklos Szeredi
2008-06-24 19:26                       ` Miklos Szeredi
2008-06-24 19:26                         ` Miklos Szeredi
2008-06-24 19:32                         ` Miklos Szeredi
2008-06-24 19:32                           ` Miklos Szeredi
2008-06-24 19:47                           ` Linus Torvalds
2008-06-24 19:47                             ` Linus Torvalds
2008-06-24 20:06                             ` Miklos Szeredi
2008-06-24 20:06                               ` Miklos Szeredi
2008-06-24 19:45                       ` Linus Torvalds
2008-06-24 19:45                         ` Linus Torvalds
2008-06-21 15:46 ` [rfc patch 4/4] splice: use do_generic_file_read() Miklos Szeredi
2008-06-21 15:46   ` Miklos Szeredi, Miklos Szeredi
2008-06-24  8:05   ` Jens Axboe
2008-06-24  8:05     ` Jens Axboe
2008-06-24 11:11     ` Miklos Szeredi
2008-06-24 11:11       ` Miklos Szeredi
2008-06-21 17:20 ` [rfc patch 0/4] splice: cleanups and fixes Subrata Modak
2008-06-22  6:16   ` Miklos Szeredi
2008-06-23 15:26     ` Subrata Modak
2008-06-25 13:17       ` [LTP] " Subrata Modak
2008-06-25 14:00         ` Miklos Szeredi
     [not found]           ` <E1KBVXV-000618-C9-8f8m9JG5TPIdUIPVzhDTVZP2KDSNp7ea@public.gmane.org>
2008-06-26  7:34             ` Subrata Modak
2008-10-22 12:41               ` [LTP] " Subrata Modak

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=20080624122258.GR20851@kernel.dk \
    --to=jens.axboe@oracle.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=miklos@szeredi.hu \
    --cc=nickpiggin@yahoo.com.au \
    --cc=torvalds@linux-foundation.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.