qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
	Peter Maydell <peter.maydell@linaro.org>,
	Eduardo Habkost <ehabkost@redhat.com>,
	qemu-block@nongnu.org, Cornelia Huck <cohuck@redhat.com>,
	Max Reitz <mreitz@redhat.com>,
	Stefan Hajnoczi <stefanha@redhat.com>,
	Raphael Norwitz <raphael.norwitz@nutanix.com>
Subject: [PULL 11/13] vhost-user-blk-pci: default num_queues to -smp N
Date: Thu, 27 Aug 2020 09:40:53 -0400	[thread overview]
Message-ID: <20200827133954.2118749-12-mst@redhat.com> (raw)
In-Reply-To: <20200827133954.2118749-1-mst@redhat.com>

From: Stefan Hajnoczi <stefanha@redhat.com>

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>
---
 include/hw/virtio/vhost-user-blk.h | 2 ++
 hw/block/vhost-user-blk.c          | 6 +++++-
 hw/core/machine.c                  | 1 +
 hw/virtio/vhost-user-blk-pci.c     | 4 ++++
 4 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/include/hw/virtio/vhost-user-blk.h b/include/hw/virtio/vhost-user-blk.h
index 34ad6f0c0e..292d17147c 100644
--- a/include/hw/virtio/vhost-user-blk.h
+++ b/include/hw/virtio/vhost-user-blk.h
@@ -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;
diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c
index a00b854736..39aec42dae 100644
--- a/hw/block/vhost-user-blk.c
+++ b/hw/block/vhost-user-blk.c
@@ -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(),
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 7f65fa8743..ea26d61237 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -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"},
diff --git a/hw/virtio/vhost-user-blk-pci.c b/hw/virtio/vhost-user-blk-pci.c
index 4f5d5cbf44..a62a71e067 100644
--- a/hw/virtio/vhost-user-blk-pci.c
+++ b/hw/virtio/vhost-user-blk-pci.c
@@ -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;
     }
-- 
MST



  parent reply	other threads:[~2020-08-27 13:48 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-27 13:40 [PULL 00/13] virtio,pc,acpi: features, fixes Michael S. Tsirkin
2020-08-27 13:40 ` [PULL 01/13] acpi: allow DSDT changes Michael S. Tsirkin
2020-08-27 13:40 ` [PULL 02/13] i386/acpi: fix inconsistent QEMU/OVMF device paths Michael S. Tsirkin
2020-08-27 13:40 ` [PULL 03/13] arm/acpi: fix an out of spec _UID for PCI root Michael S. Tsirkin
2020-08-27 13:40 ` [PULL 04/13] disassemble-aml: -o actually works Michael S. Tsirkin
2020-08-27 13:40 ` [PULL 05/13] acpi: update expected DSDT files with _UID changes Michael S. Tsirkin
2020-08-27 13:40 ` [PULL 06/13] Introduce a new flag for i440fx to disable PCI hotplug on the root bus Michael S. Tsirkin
2020-08-27 17:41   ` Igor Mammedov
2020-08-27 17:59     ` Ani Sinha
2020-08-28  9:49       ` Igor Mammedov
2020-08-28  9:51         ` Ani Sinha
2020-08-28 13:10           ` Julia Suvorova
2020-08-28 13:15             ` Ani Sinha
2020-08-28 15:45               ` Julia Suvorova
2020-09-01  6:27             ` Ani Sinha
2020-09-01 12:04               ` Ani Sinha
2020-08-30 10:02         ` Ani Sinha
2020-08-30 20:57       ` Michael S. Tsirkin
2020-08-31 12:15         ` Ani Sinha
2020-08-30  9:56     ` Michael S. Tsirkin
2020-08-27 13:40 ` [PULL 07/13] virtio-pci: add virtio_pci_optimal_num_queues() helper Michael S. Tsirkin
2020-08-27 13:40 ` [PULL 08/13] virtio-scsi: introduce a constant for fixed virtqueues Michael S. Tsirkin
2020-08-27 13:40 ` [PULL 09/13] virtio-scsi-pci: default num_queues to -smp N Michael S. Tsirkin
2020-08-27 13:40 ` [PULL 10/13] virtio-blk-pci: " Michael S. Tsirkin
2020-08-27 13:40 ` Michael S. Tsirkin [this message]
2020-08-27 13:40 ` [PULL 12/13] hw/smbios: add options for type 4 max-speed and current-speed Michael S. Tsirkin
2020-08-27 13:41 ` [PULL 13/13] tests/bios-tables-test: add smbios cpu speed test Michael S. Tsirkin
2020-08-27 22:09 ` [PULL 00/13] virtio,pc,acpi: features, fixes Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200827133954.2118749-12-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=cohuck@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=raphael.norwitz@nutanix.com \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).