summaryrefslogtreecommitdiffstats
path: root/drivers/vhost/tcm_vhost.h
diff options
context:
space:
mode:
authorAsias He <asias@redhat.com>2013-02-06 13:20:59 +0800
committerNicholas Bellinger <nab@linux-iscsi.org>2013-02-13 11:30:14 -0800
commit1b7f390eb3bfc197c979c5478eadbc2a90f07667 (patch)
tree969efecaf717e4d94b55eaaa5a3fc2f678956459 /drivers/vhost/tcm_vhost.h
parent67e18cf9ab21648a477e91e0d3cb6dbdb1330262 (diff)
downloadlinux-1b7f390eb3bfc197c979c5478eadbc2a90f07667.tar.gz
linux-1b7f390eb3bfc197c979c5478eadbc2a90f07667.tar.bz2
linux-1b7f390eb3bfc197c979c5478eadbc2a90f07667.zip
tcm_vhost: Multi-queue support
This adds virtio-scsi multi-queue support to tcm_vhost. In order to use multi-queue, guest side multi-queue support is need. It can be found here: https://lkml.org/lkml/2012/12/18/166 Currently, only one thread is created by vhost core code for each vhost_scsi instance. Even if there are multi-queues, all the handling of guest kick (vhost_scsi_handle_kick) are processed in one thread. This is not optimal. Luckily, most of the work is offloaded to the tcm_vhost workqueue. Some initial perf numbers: 1 queue, 4 targets, 1 lun per target 4K request size, 50% randread + 50% randwrite: 127K/127k IOPS 4 queues, 4 targets, 1 lun per target 4K request size, 50% randread + 50% randwrite: 181K/181k IOPS Signed-off-by: Asias He <asias@redhat.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/vhost/tcm_vhost.h')
-rw-r--r--drivers/vhost/tcm_vhost.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/vhost/tcm_vhost.h b/drivers/vhost/tcm_vhost.h
index 519a5504d347..1d2ae7a60e11 100644
--- a/drivers/vhost/tcm_vhost.h
+++ b/drivers/vhost/tcm_vhost.h
@@ -23,6 +23,8 @@ struct tcm_vhost_cmd {
struct virtio_scsi_cmd_resp __user *tvc_resp;
/* Pointer to vhost_scsi for our device */
struct vhost_scsi *tvc_vhost;
+ /* Pointer to vhost_virtqueue for the cmd */
+ struct vhost_virtqueue *tvc_vq;
/* Pointer to vhost nexus memory */
struct tcm_vhost_nexus *tvc_nexus;
/* The TCM I/O descriptor that is accessed via container_of() */