linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Maxim V. Patlasov" <mpatlasov@parallels.com>
To: "miklos@szeredi.hu" <miklos@szeredi.hu>
Cc: <dev@parallels.com>, <xemul@parallels.com>,
	<fuse-devel@lists.sourceforge.net>,
	<linux-kernel@vger.kernel.org>, <devel@openvz.org>
Subject: Re: [fuse-devel] [PATCH v2 0/6] fuse: process direct IO asynchronously
Date: Thu, 11 Apr 2013 15:22:07 +0400	[thread overview]
Message-ID: <51669CDF.9090705@parallels.com> (raw)
In-Reply-To: <20121214151424.27155.45971.stgit@maximpc.sw.ru>

Hi Miklos,

Any feedback would be highly appreciated.

Thanks,
Maxim

12/14/2012 07:20 PM, Maxim V. Patlasov пишет:
> Hi,
>
> Existing fuse implementation always processes direct IO synchronously: it
> submits next request to userspace fuse only when previous is completed. This
> is suboptimal because: 1) libaio DIO works in blocking way; 2) userspace fuse
> can't achieve parallelism  processing several requests simultaneously (e.g.
> in case of distributed network storage); 3) userspace fuse can't merge
> requests before passing it to actual storage.
>
> The idea of the patch-set is to submit fuse requests in non-blocking way
> (where it's possible) and either return -EIOCBQUEUED or wait for their
> completion synchronously. The patch-set to be applied on top of for-next of
> Miklos' git repo.
>
> To estimate performance improvement I used slightly modified fusexmp over
> tmpfs (clearing O_DIRECT bit from fi->flags in xmp_open). For synchronous
> operations I used 'dd' like this:
>
> dd of=/dev/null if=/fuse/mnt/file bs=2M count=256 iflag=direct
> dd if=/dev/zero of=/fuse/mnt/file bs=2M count=256 oflag=direct conv=notrunc
>
> For AIO I used 'aio-stress' like this:
>
> aio-stress -s 512 -a 4 -b 1 -c 1 -O -o 1 /fuse/mnt/file
> aio-stress -s 512 -a 4 -b 1 -c 1 -O -o 0 /fuse/mnt/file
>
> The throughput on some commodity (rather feeble) server was (in MB/sec):
>
>               original / patched
>
> dd reads:    ~322     / ~382
> dd writes:   ~277     / ~288
>
> aio reads:   ~380     / ~459
> aio writes:  ~319     / ~353
>
> Changed in v2 - cleanups suggested by Brian:
>   - Updated fuse_io_priv with an async field and file pointer to preserve
>     the current style of interface (i.e., use this instead of iocb).
>   - Trigger the type of request submission based on the async field.
>   - Pulled up the fuse_write_update_size() call out of __fuse_direct_write()
>     to make the separate paths more consistent.
>
> Thanks,
> Maxim
>
> ---
>
> Maxim V. Patlasov (6):
>        fuse: move fuse_release_user_pages() up
>        fuse: add support of async IO
>        fuse: make fuse_direct_io() aware about AIO
>        fuse: enable asynchronous processing direct IO
>        fuse: truncate file if async dio failed
>        fuse: optimize short direct reads
>
>
>   fs/fuse/cuse.c   |    6 +
>   fs/fuse/file.c   |  290 +++++++++++++++++++++++++++++++++++++++++++++++-------
>   fs/fuse/fuse_i.h |   19 +++-
>   3 files changed, 276 insertions(+), 39 deletions(-)
>


  parent reply	other threads:[~2013-04-11 11:21 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-14 15:20 [PATCH v2 0/6] fuse: process direct IO asynchronously Maxim V. Patlasov
2012-12-14 15:20 ` [PATCH 1/6] fuse: move fuse_release_user_pages() up Maxim V. Patlasov
2012-12-14 15:20 ` [PATCH 2/6] fuse: add support of async IO Maxim V. Patlasov
2013-04-22 16:34   ` Miklos Szeredi
2013-04-23 12:21     ` Maxim V. Patlasov
2012-12-14 15:20 ` [PATCH 3/6] fuse: make fuse_direct_io() aware about AIO Maxim V. Patlasov
2012-12-14 15:21 ` [PATCH 4/6] fuse: enable asynchronous processing direct IO Maxim V. Patlasov
2012-12-14 15:21 ` [PATCH 5/6] fuse: truncate file if async dio failed Maxim V. Patlasov
2012-12-14 20:16   ` Brian Foster
2012-12-17 14:13     ` Maxim V. Patlasov
2012-12-17 19:04       ` Brian Foster
2012-12-18  8:12         ` Maxim V. Patlasov
2013-04-17 20:42           ` Miklos Szeredi
2012-12-18 10:05   ` [PATCH] fuse: truncate file if async dio failed - v2 Maxim V. Patlasov
2012-12-14 15:21 ` [PATCH 6/6] fuse: optimize short direct reads Maxim V. Patlasov
2012-12-18 14:14 ` [PATCH v2 0/6] fuse: process direct IO asynchronously Brian Foster
2013-04-11 11:22 ` Maxim V. Patlasov [this message]
2013-04-11 16:07   ` [fuse-devel] " Miklos Szeredi
2013-04-11 16:43     ` Maxim V. Patlasov

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=51669CDF.9090705@parallels.com \
    --to=mpatlasov@parallels.com \
    --cc=dev@parallels.com \
    --cc=devel@openvz.org \
    --cc=fuse-devel@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=miklos@szeredi.hu \
    --cc=xemul@parallels.com \
    /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;
as well as URLs for NNTP newsgroup(s).