[Virtio-fs] [PATCH] virtiofsd: enable PARALLEL_DIROPS during INIT
Liu Bo
bo.liu at linux.alibaba.com
Fri Jun 7 18:15:34 UTC 2019
On Fri, Jun 07, 2019 at 04:21:47PM +0100, Dr. David Alan Gilbert wrote:
> * Liu Bo (bo.liu at linux.alibaba.com) wrote:
> > lookup is a RO operations, PARALLEL_DIROPS can be enabled.
> >
> > Signed-off-by: Liu Bo <bo.liu at linux.alibaba.com>
>
> I'm not too sure what this is doing; and why doesn't upstream libfuse
> have this?
I'm not sure why libfuse doesn't include the capability, but AFAICT this
is needed for practical use.
Say that we have 100 threads doing 'ls /mnt/virtiofs/', then they are
serialized by a mutex in
---
fuse_lookup
fuse_lock_inode
if (!get_fuse_conn(inode)->parallel_dirops)
mutex_lock(&get_fuse_inode(inode)->mutex);
---
What fuse_lookup does is a plain lookup with loading inode if necessary,
so I don't see anything wrong making operations parallel.
This is found by a fsmark test,
----
NFILES=100000
time $FSMARK -D 10000 -S0 -n $NFILES -s 0 -L 5 -l /tmp/fs_log.txt \
-d $MNT/0 -d $MNT/1 \
-d $MNT/2 -d $MNT/3 \
-d $MNT/4 -d $MNT/5 \
-d $MNT/6 -d $MNT/7 \
-d $MNT/8 -d $MNT/9 \
-d $MNT/10 -d $MNT/11 \
-d $MNT/12 -d $MNT/13 \
-d $MNT/14 -d $MNT/15
----
the vanilla virtiofs was super slow due to the mutex lock.
thanks,
-liubo
>
> Dave
>
> > ---
> > contrib/virtiofsd/fuse_lowlevel.c | 2 ++
> > 1 file changed, 2 insertions(+)
> >
> > diff --git a/contrib/virtiofsd/fuse_lowlevel.c b/contrib/virtiofsd/fuse_lowlevel.c
> > index c460c4c..93ce788 100644
> > --- a/contrib/virtiofsd/fuse_lowlevel.c
> > +++ b/contrib/virtiofsd/fuse_lowlevel.c
> > @@ -2089,6 +2089,8 @@ static void do_init(fuse_req_t req, fuse_ino_t nodeid,
> >
> > if (se->conn.want & FUSE_CAP_ASYNC_READ)
> > outarg.flags |= FUSE_ASYNC_READ;
> > + if (se->conn.want & FUSE_CAP_PARALLEL_DIROPS)
> > + outarg.flags |= FUSE_PARALLEL_DIROPS;
> > if (se->conn.want & FUSE_CAP_POSIX_LOCKS)
> > outarg.flags |= FUSE_POSIX_LOCKS;
> > if (se->conn.want & FUSE_CAP_ATOMIC_O_TRUNC)
> > --
> > 1.8.3.1
> >
> --
> Dr. David Alan Gilbert / dgilbert at redhat.com / Manchester, UK
More information about the Virtio-fs
mailing list