mirror of https://github.com/xemu-project/xemu.git
vhost-user-blk-pci: default num_queues to -smp N
Automatically size the number of request virtqueues to match the number of vCPUs. This ensures that completion interrupts are handled on the same vCPU that submitted the request. No IPI is necessary to complete an I/O request and performance is improved. The maximum number of MSI-X vectors and virtqueues limit are respected. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Reviewed-by: Raphael Norwitz <raphael.norwitz@nutanix.com> Message-Id: <20200818143348.310613-8-stefanha@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
9445e1e15e
commit
a4eef0711b
|
@ -420,6 +420,9 @@ static void vhost_user_blk_device_realize(DeviceState *dev, Error **errp)
|
|||
return;
|
||||
}
|
||||
|
||||
if (s->num_queues == VHOST_USER_BLK_AUTO_NUM_QUEUES) {
|
||||
s->num_queues = 1;
|
||||
}
|
||||
if (!s->num_queues || s->num_queues > VIRTIO_QUEUE_MAX) {
|
||||
error_setg(errp, "vhost-user-blk: invalid number of IO queues");
|
||||
return;
|
||||
|
@ -531,7 +534,8 @@ static const VMStateDescription vmstate_vhost_user_blk = {
|
|||
|
||||
static Property vhost_user_blk_properties[] = {
|
||||
DEFINE_PROP_CHR("chardev", VHostUserBlk, chardev),
|
||||
DEFINE_PROP_UINT16("num-queues", VHostUserBlk, num_queues, 1),
|
||||
DEFINE_PROP_UINT16("num-queues", VHostUserBlk, num_queues,
|
||||
VHOST_USER_BLK_AUTO_NUM_QUEUES),
|
||||
DEFINE_PROP_UINT32("queue-size", VHostUserBlk, queue_size, 128),
|
||||
DEFINE_PROP_BIT("config-wce", VHostUserBlk, config_wce, 0, true),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
|
||||
GlobalProperty hw_compat_5_1[] = {
|
||||
{ "vhost-scsi", "num_queues", "1"},
|
||||
{ "vhost-user-blk", "num-queues", "1"},
|
||||
{ "vhost-user-scsi", "num_queues", "1"},
|
||||
{ "virtio-blk-device", "num-queues", "1"},
|
||||
{ "virtio-scsi-device", "num_queues", "1"},
|
||||
|
|
|
@ -54,6 +54,10 @@ static void vhost_user_blk_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
|
|||
VHostUserBlkPCI *dev = VHOST_USER_BLK_PCI(vpci_dev);
|
||||
DeviceState *vdev = DEVICE(&dev->vdev);
|
||||
|
||||
if (dev->vdev.num_queues == VHOST_USER_BLK_AUTO_NUM_QUEUES) {
|
||||
dev->vdev.num_queues = virtio_pci_optimal_num_queues(0);
|
||||
}
|
||||
|
||||
if (vpci_dev->nvectors == DEV_NVECTORS_UNSPECIFIED) {
|
||||
vpci_dev->nvectors = dev->vdev.num_queues + 1;
|
||||
}
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
#define VHOST_USER_BLK(obj) \
|
||||
OBJECT_CHECK(VHostUserBlk, (obj), TYPE_VHOST_USER_BLK)
|
||||
|
||||
#define VHOST_USER_BLK_AUTO_NUM_QUEUES UINT16_MAX
|
||||
|
||||
typedef struct VHostUserBlk {
|
||||
VirtIODevice parent_obj;
|
||||
CharBackend chardev;
|
||||
|
|
Loading…
Reference in New Issue