Skip to content

Commit d74b55e

Browse files
mikechristiemstsirkin
authored andcommitted
vhost_scsi: add support for worker ioctls
This has vhost-scsi support the worker ioctls by calling the vhost_worker_ioctl helper. With a single worker, the single thread becomes a bottlneck when trying to use 3 or more virtqueues like: fio --filename=/dev/sdb --direct=1 --rw=randrw --bs=4k \ --ioengine=libaio --iodepth=128 --numjobs=3 With the patches and doing a worker per vq, we can scale to at least 16 vCPUs/vqs (that's my system limit) with the same command fio command above with numjobs=16: fio --filename=/dev/sdb --direct=1 --rw=randrw --bs=4k \ --ioengine=libaio --iodepth=64 --numjobs=16 which gives around 2002K IOPs. Note that for testing I dropped depth to 64 above because the vhost/virt layer supports only 1024 total commands per device. And the only tuning I did was set LIO's emulate_pr to 0 to avoid LIO's PR lock in the main IO path which becomes an issue at around 12 jobs/virtqueues. Signed-off-by: Mike Christie <michael.christie@oracle.com> Message-Id: <20230626232307.97930-17-michael.christie@oracle.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
1 parent c1ecd8e commit d74b55e

1 file changed

Lines changed: 8 additions & 0 deletions

File tree

drivers/vhost/scsi.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1927,6 +1927,14 @@ vhost_scsi_ioctl(struct file *f,
19271927
if (copy_from_user(&features, featurep, sizeof features))
19281928
return -EFAULT;
19291929
return vhost_scsi_set_features(vs, features);
1930+
case VHOST_NEW_WORKER:
1931+
case VHOST_FREE_WORKER:
1932+
case VHOST_ATTACH_VRING_WORKER:
1933+
case VHOST_GET_VRING_WORKER:
1934+
mutex_lock(&vs->dev.mutex);
1935+
r = vhost_worker_ioctl(&vs->dev, ioctl, argp);
1936+
mutex_unlock(&vs->dev.mutex);
1937+
return r;
19301938
default:
19311939
mutex_lock(&vs->dev.mutex);
19321940
r = vhost_dev_ioctl(&vs->dev, ioctl, argp);

0 commit comments

Comments
 (0)