Hanna Czenczek <hre...@redhat.com> writes: > FUSE allows creating multiple request queues by "cloning" /dev/fuse FDs > (via open("/dev/fuse") + ioctl(FUSE_DEV_IOC_CLONE)). > > We can use this to implement multi-threading. > > Note that the interface presented here differs from the multi-queue > interface of virtio-blk: The latter maps virtqueues to iothreads, which > allows processing multiple virtqueues in a single iothread. The > equivalent (processing multiple FDs in a single iothread) would not make > sense for FUSE because those FDs are used in a round-robin fashion by > the FUSE kernel driver. Putting two of them into a single iothread will > just create a bottleneck. > > Therefore, all we need is an array of iothreads, and we will create one > "queue" (FD) per thread.
[...] > Signed-off-by: Hanna Czenczek <hre...@redhat.com> > --- > qapi/block-export.json | 8 +- > block/export/fuse.c | 214 +++++++++++++++++++++++++++++++++-------- > 2 files changed, 179 insertions(+), 43 deletions(-) > > diff --git a/qapi/block-export.json b/qapi/block-export.json > index c783e01a53..0bdd5992eb 100644 > --- a/qapi/block-export.json > +++ b/qapi/block-export.json > @@ -179,12 +179,18 @@ > # mount the export with allow_other, and if that fails, try again > # without. (since 6.1; default: auto) > # > +# @iothreads: Enables multi-threading: Handle requests in each of the > +# given iothreads (instead of the block device's iothread, or the > +# export's "main" iothread). When does "the block device's iothread" apply, and when "the export's main iothread"? Is this something the QMP user needs to know? > +# For this, the FUSE FD is duplicated so > +# there is one FD per iothread. (since 10.1) Is the file descriptor duplication something the QMP user needs to know? > +# > # Since: 6.0 > ## > { 'struct': 'BlockExportOptionsFuse', > 'data': { 'mountpoint': 'str', > '*growable': 'bool', > - '*allow-other': 'FuseExportAllowOther' }, > + '*allow-other': 'FuseExportAllowOther', > + '*iothreads': ['str'] }, > 'if': 'CONFIG_FUSE' } > > ## [...]