All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benjamin LaHaise <bcrl@kvack.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Dave Kleikamp <dave.kleikamp@oracle.com>,
	linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	"Maxim V. Patlasov" <mpatlasov@parallels.com>,
	Zach Brown <zab@zabbo.net>,
	linux-aio@kvack.org
Subject: Re: [PATCH V8 00/33] loop: Issue O_DIRECT aio using bio_vec
Date: Wed, 21 Aug 2013 16:24:48 -0400	[thread overview]
Message-ID: <20130821202448.GJ13330@kvack.org> (raw)
In-Reply-To: <20130821123032.8d0668d34231aabeddff24ea@linux-foundation.org>

On Wed, Aug 21, 2013 at 12:30:32PM -0700, Andrew Morton wrote:
> On Wed, 21 Aug 2013 09:02:31 -0400 Benjamin LaHaise <bcrl@kvack.org> wrote:
> 
> > One of the major problems your changeset continues to carry is that your 
> > new read_iter/write_iter operations permit blocking (implicitely), which 
> > really isn't what we want for aio.  If you're going to introduce a new api, 
> > it should be made non-blocking, and enforce that non-blocking requirement 
> 
> It's been so incredibly long and I've forgotten everything AIO :(
> 
> In this context, "non-blocking" means no synchronous IO, yes?  Even for
> indirect blocks, etc.  What about accidental D-state blockage in page
> reclaim, or against random sleeping locks?

Those are all no-nos.  Blocking for memory allocation for short durations 
is okay, but not for wandering off into scan-the-world type ordeals (that 
is, it should be avoided).

> Also, why does this requirement exist?  "99% async" is not good enough?
> How come?

99% async is okay for the database folks, but not for all users.  Think 
unified event loops.  For example, the application I'm currently working 
on is using AIO to isolate disk access from blocking the main thread.  If 
things go off and block on random locks or on disk I/O, bad things happen, 
like watchdogs triggering.  One of the real world requirements we have is 
that the application has to keep running even if the disks we're running 
on go bad.  With SANs and multipath involved, sometimes I/O can take tens 
of seconds to complete.  You also don't want to block operations that can 
proceed by those that are presently blocked, as that reduces the available 
parallelism to devices and increases overall latency.

I'll admit there's a lot of work to be done in this area, hence why I've 
done some work on thread based AIO recently, but threads aren't great for 
all use-cases.  Ultimately something like Zach's schedulable stacks are 
needed to get the overhead down to something reasonable.

Still, we shouldn't keep on propagating broken APIs that don't reflect 
actual requirements.

		-ben
-- 
"Thought is the essence of where you are now."

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

WARNING: multiple messages have this Message-ID (diff)
From: Benjamin LaHaise <bcrl@kvack.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Dave Kleikamp <dave.kleikamp@oracle.com>,
	linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	"Maxim V. Patlasov" <mpatlasov@parallels.com>,
	Zach Brown <zab@zabbo.net>,
	linux-aio@kvack.org
Subject: Re: [PATCH V8 00/33] loop: Issue O_DIRECT aio using bio_vec
Date: Wed, 21 Aug 2013 16:24:48 -0400	[thread overview]
Message-ID: <20130821202448.GJ13330@kvack.org> (raw)
In-Reply-To: <20130821123032.8d0668d34231aabeddff24ea@linux-foundation.org>

On Wed, Aug 21, 2013 at 12:30:32PM -0700, Andrew Morton wrote:
> On Wed, 21 Aug 2013 09:02:31 -0400 Benjamin LaHaise <bcrl@kvack.org> wrote:
> 
> > One of the major problems your changeset continues to carry is that your 
> > new read_iter/write_iter operations permit blocking (implicitely), which 
> > really isn't what we want for aio.  If you're going to introduce a new api, 
> > it should be made non-blocking, and enforce that non-blocking requirement 
> 
> It's been so incredibly long and I've forgotten everything AIO :(
> 
> In this context, "non-blocking" means no synchronous IO, yes?  Even for
> indirect blocks, etc.  What about accidental D-state blockage in page
> reclaim, or against random sleeping locks?

Those are all no-nos.  Blocking for memory allocation for short durations 
is okay, but not for wandering off into scan-the-world type ordeals (that 
is, it should be avoided).

> Also, why does this requirement exist?  "99% async" is not good enough?
> How come?

99% async is okay for the database folks, but not for all users.  Think 
unified event loops.  For example, the application I'm currently working 
on is using AIO to isolate disk access from blocking the main thread.  If 
things go off and block on random locks or on disk I/O, bad things happen, 
like watchdogs triggering.  One of the real world requirements we have is 
that the application has to keep running even if the disks we're running 
on go bad.  With SANs and multipath involved, sometimes I/O can take tens 
of seconds to complete.  You also don't want to block operations that can 
proceed by those that are presently blocked, as that reduces the available 
parallelism to devices and increases overall latency.

I'll admit there's a lot of work to be done in this area, hence why I've 
done some work on thread based AIO recently, but threads aren't great for 
all use-cases.  Ultimately something like Zach's schedulable stacks are 
needed to get the overhead down to something reasonable.

Still, we shouldn't keep on propagating broken APIs that don't reflect 
actual requirements.

		-ben
-- 
"Thought is the essence of where you are now."

  reply	other threads:[~2013-08-21 20:24 UTC|newest]

Thread overview: 92+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-25 17:50 [PATCH V8 00/33] loop: Issue O_DIRECT aio using bio_vec Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 01/33] iov_iter: move into its own file Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 02/33] iov_iter: iov_iter_copy_from_user() should use non-atomic copy Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 03/33] iov_iter: add copy_to_user support Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 04/33] iov_iter: add __iovec_copy_to_user() Dave Kleikamp
     [not found] ` <1374774659-13121-1-git-send-email-dave.kleikamp-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
2013-07-25 17:50   ` [PATCH V8 05/33] fuse: convert fuse to use iov_iter_copy_[to|from]_user Dave Kleikamp
2013-07-25 17:50     ` Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 06/33] iov_iter: hide iovec details behind ops function pointers Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 07/33] iov_iter: ii_iovec_copy_to_user should pre-fault user pages Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 08/33] iov_iter: add bvec support Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 09/33] iov_iter: add a shorten call Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 10/33] iov_iter: let callers extract iovecs and bio_vecs Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 11/33] dio: Convert direct_IO to use iov_iter Dave Kleikamp
2013-08-23 15:48   ` Geert Uytterhoeven
2013-08-23 15:48     ` Geert Uytterhoeven
2013-07-25 17:50 ` [PATCH V8 12/33] dio: add bio_vec support to __blockdev_direct_IO() Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 13/33] fs: pull iov_iter use higher up the stack Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 14/33] aio: add aio_kernel_() interface Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 15/33] aio: add aio support for iov_iter arguments Dave Kleikamp
2013-08-21 13:55   ` Benjamin LaHaise
2013-08-30 20:05     ` Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 16/33] bio: add bvec_length(), like iov_length() Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 17/33] loop: use aio to perform io on the underlying file Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 18/33] fs: create file_readable() and file_writable() functions Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 19/33] fs: use read_iter and write_iter rather than aio_read and aio_write Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 20/33] fs: add read_iter and write_iter to several file systems Dave Kleikamp
2013-07-25 17:50 ` [Ocfs2-devel] [PATCH V8 21/33] ocfs2: add support for read_iter and write_iter Dave Kleikamp
2013-07-25 17:50   ` Dave Kleikamp
2013-07-25 17:50   ` Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 22/33] ext4: " Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 23/33] nfs: add support for read_iter, write_iter Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 24/33] nfs: simplify swap Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 25/33] btrfs: add support for read_iter and write_iter Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 26/33] block_dev: add support for read_iter, write_iter Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 27/33] xfs: add support for read_iter and write_iter Dave Kleikamp
2013-07-25 17:50   ` Dave Kleikamp
2013-07-26 11:51   ` Dave Chinner
2013-07-26 11:51     ` Dave Chinner
2013-07-25 17:50 ` [Cluster-devel] [PATCH V8 28/33] gfs2: Convert aio_read/write ops to read/write_iter Dave Kleikamp
2013-07-25 17:50   ` Dave Kleikamp
2013-07-25 17:50   ` Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 29/33] udf: convert file ops from aio_read/write " Dave Kleikamp
2013-07-25 21:34   ` Jan Kara
2013-07-25 17:50 ` [PATCH V8 30/33] afs: add support for read_iter and write_iter Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 31/33] ecrpytfs: Convert aio_read/write ops to read/write_iter Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 32/33] ubifs: convert file ops from aio_read/write " Dave Kleikamp
2013-07-25 17:50   ` Dave Kleikamp
2013-07-25 17:50   ` Dave Kleikamp
2013-07-25 17:50 ` [PATCH V8 33/33] tmpfs: add support for read_iter and write_iter Dave Kleikamp
2013-07-30 21:28 ` [PATCH V8 00/33] loop: Issue O_DIRECT aio using bio_vec Andrew Morton
2013-07-31  0:43   ` Dave Chinner
2013-07-31  6:40     ` Sedat Dilek
2013-07-31  8:41       ` Sedat Dilek
2013-07-31 11:22         ` Sedat Dilek
2013-07-31  9:51   ` Maxim Patlasov
2013-08-01  8:58 ` Christoph Hellwig
2013-08-01 13:04   ` Dave Kleikamp
2013-08-02 10:48     ` Christoph Hellwig
2013-08-20 13:00 ` Christoph Hellwig
2013-08-20 19:13   ` Dave Kleikamp
2013-08-21  0:14     ` Stephen Rothwell
2013-08-21  5:35       ` Sedat Dilek
2013-08-20 22:46   ` Andrew Morton
2013-08-21 13:02 ` Benjamin LaHaise
2013-08-21 13:02   ` Benjamin LaHaise
2013-08-21 16:30   ` Dave Kleikamp
2013-08-21 16:30     ` Dave Kleikamp
2013-08-21 16:39     ` Benjamin LaHaise
2013-08-21 16:39       ` Benjamin LaHaise
2013-08-21 17:12       ` Dave Kleikamp
2013-08-21 17:12         ` Dave Kleikamp
2013-08-21 19:30   ` Andrew Morton
2013-08-21 19:30     ` Andrew Morton
2013-08-21 20:24     ` Benjamin LaHaise [this message]
2013-08-21 20:24       ` Benjamin LaHaise
2013-10-14 15:07   ` Christoph Hellwig
2013-10-14 21:29     ` Benjamin LaHaise
2013-10-14 21:29       ` Benjamin LaHaise
2013-10-15 16:55       ` Christoph Hellwig
2013-10-15 17:14         ` Benjamin LaHaise
2013-10-15 17:14           ` Benjamin LaHaise
2013-10-15 17:18           ` Christoph Hellwig
2013-10-15 17:18             ` Christoph Hellwig
2013-10-15 17:53             ` Dave Kleikamp
2013-10-15 17:53               ` Dave Kleikamp
2014-12-31 20:38 ` Sedat Dilek
2014-12-31 21:52   ` Dave Kleikamp
2014-12-31 22:35     ` Sedat Dilek
2015-01-01  0:52       ` Ming Lei
2015-01-05 19:24         ` Maxim Patlasov
2015-01-06 13:18           ` Ming Lei
2015-01-10 16:51             ` Ming Lei

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=20130821202448.GJ13330@kvack.org \
    --to=bcrl@kvack.org \
    --cc=akpm@linux-foundation.org \
    --cc=dave.kleikamp@oracle.com \
    --cc=linux-aio@kvack.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mpatlasov@parallels.com \
    --cc=zab@zabbo.net \
    /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.