2013-04-11 11:21:51

by Maxim Patlasov

[permalink] [raw]
Subject: Re: [fuse-devel] [PATCH v2 0/6] fuse: process direct IO asynchronously

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(-)
>


2013-04-11 16:08:00

by Miklos Szeredi

[permalink] [raw]
Subject: Re: [fuse-devel] [PATCH v2 0/6] fuse: process direct IO asynchronously

Hi Maxim,

On Thu, Apr 11, 2013 at 1:22 PM, Maxim V. Patlasov
<[email protected]> wrote:
> Hi Miklos,
>
> Any feedback would be highly appreciated.

What is the order of all these patchsets with regards to each other?

Thanks,
Miklos

2013-04-11 16:42:55

by Maxim Patlasov

[permalink] [raw]
Subject: Re: [fuse-devel] [PATCH v2 0/6] fuse: process direct IO asynchronously

Hi,

04/11/2013 08:07 PM, Miklos Szeredi пишет:
> Hi Maxim,
>
> On Thu, Apr 11, 2013 at 1:22 PM, Maxim V. Patlasov
> <[email protected]> wrote:
>> Hi Miklos,
>>
>> Any feedback would be highly appreciated.
> What is the order of all these patchsets with regards to each other?

They are logically independent, so I formed them to be applied w/o each
other. There might be some minor collisions between them (if you try to
apply one patch-set on the top of another). So, as soon as you get one
of them to fuse-next, I'll update others to be applied smoothly. Either
we can settle down some order now, and I'll do it in advance.

Thanks,
Maxim