• Ashish Sangwan's avatar
    fuse: improve aio directIO write performance for size extending writes · 7879c4e5
    Ashish Sangwan authored
    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: default avatarAshish Sangwan <ashishsangwan2@gmail.com>
    Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
    7879c4e5
fuse_i.h 22.6 KB