[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 42/51] vdpa: commit all host notifier MRs in a single MR transacti
From: |
Michael S. Tsirkin |
Subject: |
[PULL 42/51] vdpa: commit all host notifier MRs in a single MR transaction |
Date: |
Thu, 5 Jan 2023 04:16:37 -0500 |
From: Longpeng <longpeng2@huawei.com>
This allows the vhost-vdpa device to batch the setup of all its MRs of
host notifiers.
This significantly reduces the device starting time, e.g. the time spend
on setup the host notifier MRs reduce from 423ms to 32ms for a VM with
64 vCPUs and 3 vhost-vDPA generic devices (vdpa_sim_blk, 64vq per device).
Signed-off-by: Longpeng <longpeng2@huawei.com>
Message-Id: <20221227072015.3134-4-longpeng2@huawei.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/virtio/vhost-vdpa.c | 25 +++++++++++++++++++------
1 file changed, 19 insertions(+), 6 deletions(-)
diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
index c295a8c917..542e003101 100644
--- a/hw/virtio/vhost-vdpa.c
+++ b/hw/virtio/vhost-vdpa.c
@@ -519,9 +519,18 @@ static void vhost_vdpa_host_notifiers_uninit(struct
vhost_dev *dev, int n)
{
int i;
+ /*
+ * Pack all the changes to the memory regions in a single
+ * transaction to avoid a few updating of the address space
+ * topology.
+ */
+ memory_region_transaction_begin();
+
for (i = dev->vq_index; i < dev->vq_index + n; i++) {
vhost_vdpa_host_notifier_uninit(dev, i);
}
+
+ memory_region_transaction_commit();
}
static void vhost_vdpa_host_notifiers_init(struct vhost_dev *dev)
@@ -534,17 +543,21 @@ static void vhost_vdpa_host_notifiers_init(struct
vhost_dev *dev)
return;
}
+ /*
+ * Pack all the changes to the memory regions in a single
+ * transaction to avoid a few updating of the address space
+ * topology.
+ */
+ memory_region_transaction_begin();
+
for (i = dev->vq_index; i < dev->vq_index + dev->nvqs; i++) {
if (vhost_vdpa_host_notifier_init(dev, i)) {
- goto err;
+ vhost_vdpa_host_notifiers_uninit(dev, i - dev->vq_index);
+ break;
}
}
- return;
-
-err:
- vhost_vdpa_host_notifiers_uninit(dev, i - dev->vq_index);
- return;
+ memory_region_transaction_commit();
}
static void vhost_vdpa_svq_cleanup(struct vhost_dev *dev)
--
MST
- [PULL 34/51] include/hw/virtio: Break inclusion loop, (continued)
- [PULL 34/51] include/hw/virtio: Break inclusion loop, Michael S. Tsirkin, 2023/01/05
- [PULL 35/51] include: Include headers where needed, Michael S. Tsirkin, 2023/01/05
- [PULL 36/51] include: Don't include qemu/osdep.h, Michael S. Tsirkin, 2023/01/05
- [PULL 37/51] docs/devel: Rules on #include in headers, Michael S. Tsirkin, 2023/01/05
- [PULL 39/51] vdpa: harden the error path if get_iova_range failed, Michael S. Tsirkin, 2023/01/05
- [PULL 40/51] vhost: simplify vhost_dev_enable_notifiers, Michael S. Tsirkin, 2023/01/05
- [PULL 41/51] vhost: configure all host notifiers in a single MR transaction, Michael S. Tsirkin, 2023/01/05
- [PULL 43/51] virtio-pci: fix proxy->vector_irqfd leak in virtio_pci_set_guest_notifiers, Michael S. Tsirkin, 2023/01/05
- [PULL 38/51] vdpa-dev: get iova range explicitly, Michael S. Tsirkin, 2023/01/05
- [PULL 42/51] vdpa: commit all host notifier MRs in a single MR transaction,
Michael S. Tsirkin <=
- [PULL 44/51] tests: virt: Allow changes to PPTT test table, Michael S. Tsirkin, 2023/01/05
- [PULL 45/51] hw/acpi/aml-build: Only generate cluster node in PPTT when specified, Michael S. Tsirkin, 2023/01/05
- [PULL 46/51] tests: virt: Update expected ACPI tables for virt test, Michael S. Tsirkin, 2023/01/05
- [PULL 47/51] tests: acpi: Add and whitelist *.topology blobs, Michael S. Tsirkin, 2023/01/05
- [PULL 48/51] tests: acpi: aarch64: Add topology test for aarch64, Michael S. Tsirkin, 2023/01/05
- [PULL 49/51] tests: acpi: aarch64: Add *.topology tables, Michael S. Tsirkin, 2023/01/05
- [PULL 50/51] acpi: cpuhp: fix guest-visible maximum access size to the legacy reg block, Michael S. Tsirkin, 2023/01/05