[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 04/14] migration/multifd: Postpone reset of MultiFDPages_t
From: |
peterx |
Subject: |
[PATCH 04/14] migration/multifd: Postpone reset of MultiFDPages_t |
Date: |
Wed, 31 Jan 2024 18:31:01 +0800 |
From: Peter Xu <peterx@redhat.com>
Now we reset MultiFDPages_t object in the multifd sender thread in the
middle of the sending job. That's not necessary, because the "*pages"
struct will not be reused anyway until pending_job is cleared.
Move that to the end after the job is completed, provide a helper to reset
a "*pages" object. Use that same helper when free the object too.
This prepares us to keep using p->pages in the follow up patches, where we
may drop p->normal[].
Signed-off-by: Peter Xu <peterx@redhat.com>
---
migration/multifd.c | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/migration/multifd.c b/migration/multifd.c
index 2c98023d67..5633ac245a 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -172,6 +172,17 @@ void multifd_register_ops(int method, MultiFDMethods *ops)
multifd_ops[method] = ops;
}
+/* Reset a MultiFDPages_t* object for the next use */
+static void multifd_pages_reset(MultiFDPages_t *pages)
+{
+ /*
+ * We don't need to touch offset[] array, because it will be
+ * overwritten later when reused.
+ */
+ pages->num = 0;
+ pages->block = NULL;
+}
+
static int multifd_send_initial_packet(MultiFDSendParams *p, Error **errp)
{
MultiFDInit_t msg = {};
@@ -248,9 +259,8 @@ static MultiFDPages_t *multifd_pages_init(uint32_t n)
static void multifd_pages_clear(MultiFDPages_t *pages)
{
- pages->num = 0;
+ multifd_pages_reset(pages);
pages->allocated = 0;
- pages->block = NULL;
g_free(pages->offset);
pages->offset = NULL;
g_free(pages);
@@ -704,8 +714,6 @@ static void *multifd_send_thread(void *opaque)
p->flags = 0;
p->num_packets++;
p->total_normal_pages += p->normal_num;
- p->pages->num = 0;
- p->pages->block = NULL;
qemu_mutex_unlock(&p->mutex);
trace_multifd_send(p->id, packet_num, p->normal_num, flags,
@@ -732,6 +740,8 @@ static void *multifd_send_thread(void *opaque)
stat64_add(&mig_stats.multifd_bytes,
p->next_packet_size + p->packet_len);
+
+ multifd_pages_reset(p->pages);
p->next_packet_size = 0;
qemu_mutex_lock(&p->mutex);
p->pending_job--;
--
2.43.0
- [PATCH 00/14] migration/multifd: Refactor ->send_prepare() and cleanups, peterx, 2024/01/31
- [PATCH 01/14] migration/multifd: Drop stale comment for multifd zero copy, peterx, 2024/01/31
- [PATCH 02/14] migration/multifd: multifd_send_kick_main(), peterx, 2024/01/31
- [PATCH 03/14] migration/multifd: Drop MultiFDSendParams.quit, cleanup error paths, peterx, 2024/01/31
- [PATCH 04/14] migration/multifd: Postpone reset of MultiFDPages_t,
peterx <=
- [PATCH 06/14] migration/multifd: Separate SYNC request with normal jobs, peterx, 2024/01/31
- [PATCH 07/14] migration/multifd: Simplify locking in sender thread, peterx, 2024/01/31
- [PATCH 05/14] migration/multifd: Drop MultiFDSendParams.normal[] array, peterx, 2024/01/31
- [PATCH 08/14] migration/multifd: Drop pages->num check in sender thread, peterx, 2024/01/31
- [PATCH 10/14] migration/multifd: Move total_normal_pages accounting, peterx, 2024/01/31