qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Si-Wei Liu <si-wei.liu@oracle.com>
To: eperezma@redhat.com, jasowang@redhat.com, mst@redhat.com,
	dtatulea@nvidia.com, leiyang@redhat.com, yin31149@gmail.com,
	boris.ostrovsky@oracle.com, jonah.palmer@oracle.com
Cc: qemu-devel@nongnu.org
Subject: [PATCH 19/40] vdpa: should avoid map flushing with persistent iotlb
Date: Thu,  7 Dec 2023 09:39:32 -0800	[thread overview]
Message-ID: <1701970793-6865-20-git-send-email-si-wei.liu@oracle.com> (raw)
In-Reply-To: <1701970793-6865-1-git-send-email-si-wei.liu@oracle.com>

Today memory listener is unregistered in vhost_vdpa_reset_status
unconditionally, due to which all the maps will be flushed away
from the iotlb. However, map flush is not always needed, and
doing it from performance hot path may have innegligible latency
impact that affects VM reboot time or brown out period during
live migration.

Leverage the IOTLB_PERSIST backend featuae, which ensures durable
iotlb maps and not disappearing even across reset. When it is
supported, we may conditionally keep the maps for cases where the
guest memory mapping doesn't change. Prepare a function so that
the next patch will be able to use it to keep the maps.

Signed-off-by: Si-Wei Liu <si-wei.liu@oracle.com>
---
 hw/virtio/trace-events |  1 +
 hw/virtio/vhost-vdpa.c | 20 ++++++++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/hw/virtio/trace-events b/hw/virtio/trace-events
index 77905d1..9725d44 100644
--- a/hw/virtio/trace-events
+++ b/hw/virtio/trace-events
@@ -66,6 +66,7 @@ vhost_vdpa_set_owner(void *dev) "dev: %p"
 vhost_vdpa_vq_get_addr(void *dev, void *vq, uint64_t desc_user_addr, uint64_t avail_user_addr, uint64_t used_user_addr) "dev: %p vq: %p desc_user_addr: 0x%"PRIx64" avail_user_addr: 0x%"PRIx64" used_user_addr: 0x%"PRIx64
 vhost_vdpa_get_iova_range(void *dev, uint64_t first, uint64_t last) "dev: %p first: 0x%"PRIx64" last: 0x%"PRIx64
 vhost_vdpa_set_config_call(void *dev, int fd)"dev: %p fd: %d"
+vhost_vdpa_maybe_flush_map(void *dev, bool reg, bool flush, bool persist) "dev: %p registered: %d flush_map: %d iotlb_persistent: %d"
 
 # virtio.c
 virtqueue_alloc_element(void *elem, size_t sz, unsigned in_num, unsigned out_num) "elem %p size %zd in_num %u out_num %u"
diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
index ea2dfc8..31e0a55 100644
--- a/hw/virtio/vhost-vdpa.c
+++ b/hw/virtio/vhost-vdpa.c
@@ -1471,6 +1471,26 @@ out_stop:
     return ok ? 0 : -1;
 }
 
+static void vhost_vdpa_maybe_flush_map(struct vhost_dev *dev)
+{
+    struct vhost_vdpa *v = dev->opaque;
+
+    trace_vhost_vdpa_maybe_flush_map(dev, v->shared->listener_registered,
+                                     v->shared->flush_map,
+                                     !!(dev->backend_cap &
+                                     BIT_ULL(VHOST_BACKEND_F_IOTLB_PERSIST)));
+
+    if (!v->shared->listener_registered) {
+        return;
+    }
+
+    if (!(dev->backend_cap & BIT_ULL(VHOST_BACKEND_F_IOTLB_PERSIST)) ||
+        v->shared->flush_map) {
+        memory_listener_unregister(&v->shared->listener);
+        v->shared->listener_registered = false;
+    }
+}
+
 static void vhost_vdpa_reset_status(struct vhost_dev *dev)
 {
     struct vhost_vdpa *v = dev->opaque;
-- 
1.8.3.1



  parent reply	other threads:[~2023-12-07 18:54 UTC|newest]

Thread overview: 102+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-07 17:39 [PATCH 00/40] vdpa-net: improve migration downtime through descriptor ASID and persistent IOTLB Si-Wei Liu
2023-12-07 17:39 ` [PATCH 01/40] linux-headers: add vhost_types.h and vhost.h Si-Wei Liu
2023-12-11  7:47   ` Eugenio Perez Martin
2024-01-11  3:32   ` Jason Wang
2023-12-07 17:39 ` [PATCH 02/40] vdpa: add vhost_vdpa_get_vring_desc_group Si-Wei Liu
2024-01-11  3:51   ` Jason Wang
2023-12-07 17:39 ` [PATCH 03/40] vdpa: probe descriptor group index for data vqs Si-Wei Liu
2023-12-11 18:49   ` Eugenio Perez Martin
2024-01-11  4:02   ` Jason Wang
2023-12-07 17:39 ` [PATCH 04/40] vdpa: piggyback desc_group index when probing isolated cvq Si-Wei Liu
2024-01-11  7:06   ` Jason Wang
2023-12-07 17:39 ` [PATCH 05/40] vdpa: populate desc_group from net_vhost_vdpa_init Si-Wei Liu
2023-12-11 10:46   ` Eugenio Perez Martin
2023-12-11 11:01     ` Eugenio Perez Martin
2024-01-11  7:09   ` Jason Wang
2023-12-07 17:39 ` [PATCH 06/40] vhost: make svq work with gpa without iova translation Si-Wei Liu
2023-12-11 11:17   ` Eugenio Perez Martin
2024-01-11  7:31   ` Jason Wang
2023-12-07 17:39 ` [PATCH 07/40] vdpa: move around vhost_vdpa_set_address_space_id Si-Wei Liu
2023-12-11 11:18   ` Eugenio Perez Martin
2024-01-11  7:33   ` Jason Wang
2023-12-07 17:39 ` [PATCH 08/40] vdpa: add back vhost_vdpa_net_first_nc_vdpa Si-Wei Liu
2023-12-11 11:19   ` Eugenio Perez Martin
2024-01-11  7:37   ` Jason Wang
2023-12-07 17:39 ` [PATCH 09/40] vdpa: no repeat setting shadow_data Si-Wei Liu
2023-12-11 11:21   ` Eugenio Perez Martin
2024-01-11  7:34   ` Jason Wang
2023-12-07 17:39 ` [PATCH 10/40] vdpa: assign svq descriptors a separate ASID when possible Si-Wei Liu
2023-12-11 13:35   ` Eugenio Perez Martin
2024-01-11  8:02   ` Jason Wang
2023-12-07 17:39 ` [PATCH 11/40] vdpa: factor out vhost_vdpa_last_dev Si-Wei Liu
2023-12-11 13:36   ` Eugenio Perez Martin
2024-01-11  8:03   ` Jason Wang
2023-12-07 17:39 ` [PATCH 12/40] vdpa: check map_thread_enabled before join maps thread Si-Wei Liu
2023-12-07 17:39 ` [PATCH 13/40] vdpa: ref counting VhostVDPAShared Si-Wei Liu
2024-01-11  8:12   ` Jason Wang
2023-12-07 17:39 ` [PATCH 14/40] vdpa: convert iova_tree to ref count based Si-Wei Liu
2023-12-11 17:21   ` Eugenio Perez Martin
2024-01-11  8:15   ` Jason Wang
2023-12-07 17:39 ` [PATCH 15/40] vdpa: add svq_switching and flush_map to header Si-Wei Liu
2024-01-11  8:16   ` Jason Wang
2023-12-07 17:39 ` [PATCH 16/40] vdpa: indicate SVQ switching via flag Si-Wei Liu
2024-01-11  8:17   ` Jason Wang
2023-12-07 17:39 ` [PATCH 17/40] vdpa: judge if map can be kept across reset Si-Wei Liu
2023-12-13  9:51   ` Eugenio Perez Martin
2024-01-11  8:24   ` Jason Wang
2023-12-07 17:39 ` [PATCH 18/40] vdpa: unregister listener on last dev cleanup Si-Wei Liu
2023-12-11 17:37   ` Eugenio Perez Martin
2024-01-11  8:26   ` Jason Wang
2023-12-07 17:39 ` Si-Wei Liu [this message]
2024-01-11  8:28   ` [PATCH 19/40] vdpa: should avoid map flushing with persistent iotlb Jason Wang
2023-12-07 17:39 ` [PATCH 20/40] vdpa: avoid mapping flush across reset Si-Wei Liu
2024-01-11  8:30   ` Jason Wang
2023-12-07 17:39 ` [PATCH 21/40] vdpa: vhost_vdpa_dma_batch_end_once rename Si-Wei Liu
2024-01-15  2:40   ` Jason Wang
2024-01-15  2:52     ` Jason Wang
2023-12-07 17:39 ` [PATCH 22/40] vdpa: factor out vhost_vdpa_map_batch_begin Si-Wei Liu
2024-01-15  3:02   ` Jason Wang
2023-12-07 17:39 ` [PATCH 23/40] vdpa: vhost_vdpa_dma_batch_begin_once rename Si-Wei Liu
2024-01-15  3:03   ` Jason Wang
2023-12-07 17:39 ` [PATCH 24/40] vdpa: factor out vhost_vdpa_dma_batch_end Si-Wei Liu
2024-01-15  3:05   ` Jason Wang
2023-12-07 17:39 ` [PATCH 25/40] vdpa: add asid to dma_batch_once API Si-Wei Liu
2023-12-13 15:42   ` Eugenio Perez Martin
2024-01-15  3:07   ` Jason Wang
2023-12-07 17:39 ` [PATCH 26/40] vdpa: return int for " Si-Wei Liu
2023-12-07 17:39 ` [PATCH 27/40] vdpa: add asid to all dma_batch call sites Si-Wei Liu
2023-12-07 17:39 ` [PATCH 28/40] vdpa: support iotlb_batch_asid Si-Wei Liu
2023-12-13 15:42   ` Eugenio Perez Martin
2024-01-15  3:19   ` Jason Wang
2023-12-07 17:39 ` [PATCH 29/40] vdpa: expose API vhost_vdpa_dma_batch_once Si-Wei Liu
2023-12-13 15:42   ` Eugenio Perez Martin
2024-01-15  3:32   ` Jason Wang
2023-12-07 17:39 ` [PATCH 30/40] vdpa: batch map/unmap op per svq pair basis Si-Wei Liu
2024-01-15  3:33   ` Jason Wang
2023-12-07 17:39 ` [PATCH 31/40] vdpa: batch map and unmap around cvq svq start/stop Si-Wei Liu
2024-01-15  3:34   ` Jason Wang
2023-12-07 17:39 ` [PATCH 32/40] vdpa: factor out vhost_vdpa_net_get_nc_vdpa Si-Wei Liu
2024-01-15  3:35   ` Jason Wang
2023-12-07 17:39 ` [PATCH 33/40] vdpa: batch multiple dma_unmap to a single call for vm stop Si-Wei Liu
2023-12-13 16:46   ` Eugenio Perez Martin
2024-01-15  3:47   ` Jason Wang
2023-12-07 17:39 ` [PATCH 34/40] vdpa: fix network breakage after cancelling migration Si-Wei Liu
2024-01-15  3:48   ` Jason Wang
2023-12-07 17:39 ` [PATCH 35/40] vdpa: add vhost_vdpa_set_address_space_id trace Si-Wei Liu
2023-12-11 18:13   ` Eugenio Perez Martin
2024-01-15  3:50   ` Jason Wang
2023-12-07 17:39 ` [PATCH 36/40] vdpa: add vhost_vdpa_get_vring_base trace for svq mode Si-Wei Liu
2023-12-11 18:14   ` Eugenio Perez Martin
2024-01-15  3:52   ` Jason Wang
2023-12-07 17:39 ` [PATCH 37/40] vdpa: add vhost_vdpa_set_dev_vring_base " Si-Wei Liu
2023-12-11 18:14   ` Eugenio Perez Martin
2024-01-15  3:53   ` Jason Wang
2023-12-07 17:39 ` [PATCH 38/40] vdpa: add trace events for eval_flush Si-Wei Liu
2024-01-15  3:57   ` Jason Wang
2023-12-07 17:39 ` [PATCH 39/40] vdpa: add trace events for vhost_vdpa_net_load_cmd Si-Wei Liu
2023-12-11 18:14   ` Eugenio Perez Martin
2023-12-07 17:39 ` [PATCH 40/40] vdpa: add trace event for vhost_vdpa_net_load_mq Si-Wei Liu
2023-12-11 18:15   ` Eugenio Perez Martin
2024-01-15  3:58   ` Jason Wang
2023-12-11 18:39 ` [PATCH 00/40] vdpa-net: improve migration downtime through descriptor ASID and persistent IOTLB Eugenio Perez Martin
2024-01-11  8:21 ` Jason Wang

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=1701970793-6865-20-git-send-email-si-wei.liu@oracle.com \
    --to=si-wei.liu@oracle.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=dtatulea@nvidia.com \
    --cc=eperezma@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=jonah.palmer@oracle.com \
    --cc=leiyang@redhat.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=yin31149@gmail.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).