OSDN Git Service

fuse: Use hash table to link processing request
authorKirill Tkhai <ktkhai@virtuozzo.com>
Tue, 11 Sep 2018 10:12:14 +0000 (13:12 +0300)
committerMiklos Szeredi <mszeredi@redhat.com>
Fri, 28 Sep 2018 14:43:23 +0000 (16:43 +0200)
commitbe2ff42c5d6ebc8552c82a7d1697afae30510ed9
tree34d256dcf2c28957a3a1deefe42cd6658f0ff4a3
parent3a5358d1a1b70bb3360578f09894d6856629ecdf
fuse: Use hash table to link processing request

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

The patch introduces hash table to reduce the number of iterations, we do
in this function. Hash generating algorithm is taken from hash_add()
function, while 256 lines table is used to store pending requests.  This
fixes problem and improves the performance.

Reported-by: Alexey Kuznetsov <kuznet@virtuozzo.com>
Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/fuse/dev.c
fs/fuse/fuse_i.h
fs/fuse/inode.c