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(-)
>
next prev 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 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.