mbox series

[0/3] fuse: Solve request_find() bottleneck

Message ID 153666041612.19117.14667042009014596105.stgit@localhost.localdomain (mailing list archive)
Headers show
Series fuse: Solve request_find() bottleneck | expand

Message

Kirill Tkhai Sept. 11, 2018, 10:11 a.m. UTC
Hi,

We noticed the performance bottle neck in FUSE running our
Virtuozzo storage over rdma. On some types of workload
we observe 20% of time spent in request_find() in profiler.
This function is iterating over long list of requests, and it
scales bad.

The patch introduces hash table to reduce the number
of iterations, we do in this function. Also, algorithm
of generating IDs for interrupt requests is changed,
simplified request_find() function and killed
fuse_req::intr_unique field.

Kirill
---

Kirill Tkhai (3):
      fuse: Change interrupt requests allocation algorhythm
      fuse: Kill fuse_req::intr_unique
      fuse: Use hash table to link processing request


 fs/fuse/dev.c    |   47 +++++++++++++++++++++++++++++++++++++----------
 fs/fuse/fuse_i.h |   11 +++++------
 fs/fuse/inode.c  |    5 ++++-
 3 files changed, 46 insertions(+), 17 deletions(-)

--
Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>

Comments

Kirill Tkhai Sept. 24, 2018, 12:08 p.m. UTC | #1
2 weeks passed, so ping.

Miklos, any reaction on this?

Thanks,
Kirill

On 11.09.2018 13:11, Kirill Tkhai wrote:
> Hi,
> 
> We noticed the performance bottle neck in FUSE running our
> Virtuozzo storage over rdma. On some types of workload
> we observe 20% of time spent in request_find() in profiler.
> This function is iterating over long list of requests, and it
> scales bad.
> 
> The patch introduces hash table to reduce the number
> of iterations, we do in this function. Also, algorithm
> of generating IDs for interrupt requests is changed,
> simplified request_find() function and killed
> fuse_req::intr_unique field.
> 
> Kirill
> ---
> 
> Kirill Tkhai (3):
>       fuse: Change interrupt requests allocation algorhythm
>       fuse: Kill fuse_req::intr_unique
>       fuse: Use hash table to link processing request
> 
> 
>  fs/fuse/dev.c    |   47 +++++++++++++++++++++++++++++++++++++----------
>  fs/fuse/fuse_i.h |   11 +++++------
>  fs/fuse/inode.c  |    5 ++++-
>  3 files changed, 46 insertions(+), 17 deletions(-)
> 
> --
> Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
>
Miklos Szeredi Sept. 24, 2018, 3:04 p.m. UTC | #2
On Mon, Sep 24, 2018 at 2:08 PM, Kirill Tkhai <ktkhai@virtuozzo.com> wrote:
> 2 weeks passed, so ping.
>
> Miklos, any reaction on this?
>
> Thanks,
> Kirill
>
> On 11.09.2018 13:11, Kirill Tkhai wrote:
>> Hi,
>>
>> We noticed the performance bottle neck in FUSE running our
>> Virtuozzo storage over rdma. On some types of workload
>> we observe 20% of time spent in request_find() in profiler.
>> This function is iterating over long list of requests, and it
>> scales bad.
>>
>> The patch introduces hash table to reduce the number
>> of iterations, we do in this function. Also, algorithm
>> of generating IDs for interrupt requests is changed,
>> simplified request_find() function and killed
>> fuse_req::intr_unique field.

Concept looks good.  Will review details...

Thanks,
Miklos