Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1423970 > unrolled thread

Re: [PATCH] FUSE: Improve aio directIO write performance for size extending writes.

Started byMiklos Szeredi <miklos@szeredi.hu>
First post2016-06-16 13:30 +0200
Last post2016-06-20 09:00 +0200
Articles 7 — 3 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: [PATCH] FUSE: Improve aio directIO write performance for size  extending writes. Miklos Szeredi <miklos@szeredi.hu> - 2016-06-16 13:30 +0200
    Re: [PATCH] FUSE: Improve aio directIO write performance for size  extending writes. Sedat Dilek <sedat.dilek@gmail.com> - 2016-06-16 14:00 +0200
      Re: [PATCH] FUSE: Improve aio directIO write performance for size  extending writes. Miklos Szeredi <miklos@szeredi.hu> - 2016-06-16 14:10 +0200
        Re: [PATCH] FUSE: Improve aio directIO write performance for size  extending writes. Sedat Dilek <sedat.dilek@gmail.com> - 2016-06-16 14:30 +0200
          Re: [PATCH] FUSE: Improve aio directIO write performance for size  extending writes. Miklos Szeredi <miklos@szeredi.hu> - 2016-06-16 14:40 +0200
            Re: [PATCH] FUSE: Improve aio directIO write performance for size  extending writes. Sedat Dilek <sedat.dilek@gmail.com> - 2016-06-20 11:30 +0200
    Re: [PATCH] FUSE: Improve aio directIO write performance for size  extending writes. Ashish Sangwan <ashishsangwan2@gmail.com> - 2016-06-20 09:00 +0200

#1423970 — Re: [PATCH] FUSE: Improve aio directIO write performance for size extending writes.

FromMiklos Szeredi <miklos@szeredi.hu>
Date2016-06-16 13:30 +0200
SubjectRe: [PATCH] FUSE: Improve aio directIO write performance for size extending writes.
Message-ID<rKDEK-7Kx-37@gated-at.bofh.it>
On Thu, Apr 7, 2016 at 1:48 PM, Ashish Sangwan <ashishsangwan2@gmail.com> wrote:
> While sending the blocking directIO in fuse, the write request is broken
> into sub-requests, each of default size 128k and all the requests are sent
> in non-blocking background mode if async_dio mode is supported by libfuse.
> The process which issue the write wait for the completion of all the
> sub-requests. Sending multiple requests parallely gives a chance to perform
> parallel writes in the user space fuse implementation if it is
> multi-threaded and hence improves the performance.
>
> When there is a size extending aio dio write, we switch to
> blocking mode so that we can properly update the size of the file after
> completion of the writes. However, in this situation all the sub-requests
> are sent in serialized manner where the next request is sent only after
> receiving the reply of the current request. Hence the multi-threaded user
> space implementation is not utilized properly.
>
> This patch changes the size extending aio dio behavior to exactly follow
> blocking dio. For multi threaded fuse implementation having 10 threads and
> using buffer size of 64MB to perform async directIO, we are getting double
> the speed.
>
> Signed-off-by: Ashish Sangwan <ashishsangwan2@gmail.com>

Thanks for you patience.  Pushed to

  git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git for-next

I simplified the logic, please verify that I didn't mess something up.

Thanks,
Miklos

[toc] | [next] | [standalone]


#1423988

FromSedat Dilek <sedat.dilek@gmail.com>
Date2016-06-16 14:00 +0200
Message-ID<rKE7M-7Uc-25@gated-at.bofh.it>
In reply to#1423970
On Thu, Jun 16, 2016 at 1:25 PM, Miklos Szeredi <miklos@szeredi.hu> wrote:
> On Thu, Apr 7, 2016 at 1:48 PM, Ashish Sangwan <ashishsangwan2@gmail.com> wrote:
>> While sending the blocking directIO in fuse, the write request is broken
>> into sub-requests, each of default size 128k and all the requests are sent
>> in non-blocking background mode if async_dio mode is supported by libfuse.
>> The process which issue the write wait for the completion of all the
>> sub-requests. Sending multiple requests parallely gives a chance to perform
>> parallel writes in the user space fuse implementation if it is
>> multi-threaded and hence improves the performance.
>>
>> When there is a size extending aio dio write, we switch to
>> blocking mode so that we can properly update the size of the file after
>> completion of the writes. However, in this situation all the sub-requests
>> are sent in serialized manner where the next request is sent only after
>> receiving the reply of the current request. Hence the multi-threaded user
>> space implementation is not utilized properly.
>>
>> This patch changes the size extending aio dio behavior to exactly follow
>> blocking dio. For multi threaded fuse implementation having 10 threads and
>> using buffer size of 64MB to perform async directIO, we are getting double
>> the speed.
>>
>> Signed-off-by: Ashish Sangwan <ashishsangwan2@gmail.com>
>
> Thanks for you patience.  Pushed to
>
>   git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git for-next
>
> I simplified the logic, please verify that I didn't mess something up.
>

Hi,

I would like to test fuse-next on Ubuntu/precise aka 12.04-LTS AMD64.

Do I need a modern version of libfuse?
Libfuse v2.8.6 is installed here.

Thanks.

Regards,
- Sedat -

[1] http://packages.ubuntu.com/search?keywords=libfuse

[toc] | [prev] | [next] | [standalone]


#1423990

FromMiklos Szeredi <miklos@szeredi.hu>
Date2016-06-16 14:10 +0200
Message-ID<rKEhr-8cw-7@gated-at.bofh.it>
In reply to#1423988
On Thu, Jun 16, 2016 at 1:51 PM, Sedat Dilek <sedat.dilek@gmail.com> wrote:
> On Thu, Jun 16, 2016 at 1:25 PM, Miklos Szeredi <miklos@szeredi.hu> wrote:
>> On Thu, Apr 7, 2016 at 1:48 PM, Ashish Sangwan <ashishsangwan2@gmail.com> wrote:
>>> While sending the blocking directIO in fuse, the write request is broken
>>> into sub-requests, each of default size 128k and all the requests are sent
>>> in non-blocking background mode if async_dio mode is supported by libfuse.
>>> The process which issue the write wait for the completion of all the
>>> sub-requests. Sending multiple requests parallely gives a chance to perform
>>> parallel writes in the user space fuse implementation if it is
>>> multi-threaded and hence improves the performance.
>>>
>>> When there is a size extending aio dio write, we switch to
>>> blocking mode so that we can properly update the size of the file after
>>> completion of the writes. However, in this situation all the sub-requests
>>> are sent in serialized manner where the next request is sent only after
>>> receiving the reply of the current request. Hence the multi-threaded user
>>> space implementation is not utilized properly.
>>>
>>> This patch changes the size extending aio dio behavior to exactly follow
>>> blocking dio. For multi threaded fuse implementation having 10 threads and
>>> using buffer size of 64MB to perform async directIO, we are getting double
>>> the speed.
>>>
>>> Signed-off-by: Ashish Sangwan <ashishsangwan2@gmail.com>
>>
>> Thanks for you patience.  Pushed to
>>
>>   git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git for-next
>>
>> I simplified the logic, please verify that I didn't mess something up.
>>
>
> Hi,
>
> I would like to test fuse-next on Ubuntu/precise aka 12.04-LTS AMD64.
>
> Do I need a modern version of libfuse?
> Libfuse v2.8.6 is installed here.

Fuse will work fine but AFAICS the "async_dio" option was not added to
a 2.X release (it could be backported quite simply if needed).

Thanks,
Miklos

[toc] | [prev] | [next] | [standalone]


#1424002

FromSedat Dilek <sedat.dilek@gmail.com>
Date2016-06-16 14:30 +0200
Message-ID<rKEAN-8ja-9@gated-at.bofh.it>
In reply to#1423990
On Thu, Jun 16, 2016 at 2:01 PM, Miklos Szeredi <miklos@szeredi.hu> wrote:
> On Thu, Jun 16, 2016 at 1:51 PM, Sedat Dilek <sedat.dilek@gmail.com> wrote:
>> On Thu, Jun 16, 2016 at 1:25 PM, Miklos Szeredi <miklos@szeredi.hu> wrote:
>>> On Thu, Apr 7, 2016 at 1:48 PM, Ashish Sangwan <ashishsangwan2@gmail.com> wrote:
>>>> While sending the blocking directIO in fuse, the write request is broken
>>>> into sub-requests, each of default size 128k and all the requests are sent
>>>> in non-blocking background mode if async_dio mode is supported by libfuse.
>>>> The process which issue the write wait for the completion of all the
>>>> sub-requests. Sending multiple requests parallely gives a chance to perform
>>>> parallel writes in the user space fuse implementation if it is
>>>> multi-threaded and hence improves the performance.
>>>>
>>>> When there is a size extending aio dio write, we switch to
>>>> blocking mode so that we can properly update the size of the file after
>>>> completion of the writes. However, in this situation all the sub-requests
>>>> are sent in serialized manner where the next request is sent only after
>>>> receiving the reply of the current request. Hence the multi-threaded user
>>>> space implementation is not utilized properly.
>>>>
>>>> This patch changes the size extending aio dio behavior to exactly follow
>>>> blocking dio. For multi threaded fuse implementation having 10 threads and
>>>> using buffer size of 64MB to perform async directIO, we are getting double
>>>> the speed.
>>>>
>>>> Signed-off-by: Ashish Sangwan <ashishsangwan2@gmail.com>
>>>
>>> Thanks for you patience.  Pushed to
>>>
>>>   git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git for-next
>>>
>>> I simplified the logic, please verify that I didn't mess something up.
>>>
>>
>> Hi,
>>
>> I would like to test fuse-next on Ubuntu/precise aka 12.04-LTS AMD64.
>>
>> Do I need a modern version of libfuse?
>> Libfuse v2.8.6 is installed here.
>
> Fuse will work fine but AFAICS the "async_dio" option was not added to
> a 2.X release (it could be backported quite simply if needed).
>

Can you point me to - preferable - a Git repo of libfuse?
And the commit for backporting?

Thanks.

- Sedat -

[toc] | [prev] | [next] | [standalone]


#1424006

FromMiklos Szeredi <miklos@szeredi.hu>
Date2016-06-16 14:40 +0200
Message-ID<rKEKt-8mu-3@gated-at.bofh.it>
In reply to#1424002
On Thu, Jun 16, 2016 at 2:22 PM, Sedat Dilek <sedat.dilek@gmail.com> wrote:

> Can you point me to - preferable - a Git repo of libfuse?

https://github.com/libfuse

> And the commit for backporting?

8bb62a632caa ("libfuse: Add "async_dio" and "writeback_cache" options")

Thanks,
Miklos

[toc] | [prev] | [next] | [standalone]


#1426390

FromSedat Dilek <sedat.dilek@gmail.com>
Date2016-06-20 11:30 +0200
Message-ID<rM3GO-6p3-43@gated-at.bofh.it>
In reply to#1424006
On Thu, Jun 16, 2016 at 2:36 PM, Miklos Szeredi <miklos@szeredi.hu> wrote:
> On Thu, Jun 16, 2016 at 2:22 PM, Sedat Dilek <sedat.dilek@gmail.com> wrote:
>
>> Can you point me to - preferable - a Git repo of libfuse?
>
> https://github.com/libfuse
>
>> And the commit for backporting?
>
> 8bb62a632caa ("libfuse: Add "async_dio" and "writeback_cache" options")
>

[1] says...

"libfuse: Add "async_dio" and "writeback_cache" options

Asynchronous direct I/O is supported by linux kernels 3.13 and
later, writeback caching is supported by 3.14 and later."

Here on Ubuntu/precise I have HWE enabled which ships officially
Linux-kernel v3.13.
According to above log I need at least v3.14 for both features.

Not sure if backporting is easy-to-apply for v3.13.

IIRC Debian maintains a 3.16 LTS kernel.

AFAICS libfuse v2.9.6 which is not available in any Ubuntu release [4]
has this change.
I can build with the sources from Debian [5].

Hmm, maybe it's time to switch over to Ubuntu/xenial or a modern Debian system.

- Sedat -

[1] https://github.com/libfuse/libfuse/commit/8bb62a632caa4269bb6436cae67307404882b936
[2] https://github.com/libfuse/libfuse/releases
[3] http://git.kernel.org/cgit/linux/kernel/git/mszeredi/fuse.git/commit/?h=for-next&id=507c552aa58fa48fdea1373948cfc0a1fd0bf61b
[4] https://packages.ubuntu.com/libfuse
[5] https://packages.debian.org/ibfuse

[toc] | [prev] | [next] | [standalone]


#1426257

FromAshish Sangwan <ashishsangwan2@gmail.com>
Date2016-06-20 09:00 +0200
Message-ID<rM1lE-4PP-15@gated-at.bofh.it>
In reply to#1423970
On Thu, Jun 16, 2016 at 4:55 PM, Miklos Szeredi <miklos@szeredi.hu> wrote:
> On Thu, Apr 7, 2016 at 1:48 PM, Ashish Sangwan <ashishsangwan2@gmail.com> wrote:
>> While sending the blocking directIO in fuse, the write request is broken
>> into sub-requests, each of default size 128k and all the requests are sent
>> in non-blocking background mode if async_dio mode is supported by libfuse.
>> The process which issue the write wait for the completion of all the
>> sub-requests. Sending multiple requests parallely gives a chance to perform
>> parallel writes in the user space fuse implementation if it is
>> multi-threaded and hence improves the performance.
>>
>> When there is a size extending aio dio write, we switch to
>> blocking mode so that we can properly update the size of the file after
>> completion of the writes. However, in this situation all the sub-requests
>> are sent in serialized manner where the next request is sent only after
>> receiving the reply of the current request. Hence the multi-threaded user
>> space implementation is not utilized properly.
>>
>> This patch changes the size extending aio dio behavior to exactly follow
>> blocking dio. For multi threaded fuse implementation having 10 threads and
>> using buffer size of 64MB to perform async directIO, we are getting double
>> the speed.
>>
>> Signed-off-by: Ashish Sangwan <ashishsangwan2@gmail.com>
>
> Thanks for you patience.  Pushed to
>
>   git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git for-next
>
> I simplified the logic, please verify that I didn't mess something up.

The change looks ok.

>
> Thanks,
> Miklos

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web