[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v6 19/19] migration/multifd: Add documentation for multifd method
From: |
Fabiano Rosas |
Subject: |
[PATCH v6 19/19] migration/multifd: Add documentation for multifd methods |
Date: |
Tue, 27 Aug 2024 14:46:06 -0300 |
Add documentation clarifying the usage of the multifd methods. The
general idea is that the client code calls into multifd to trigger
send/recv of data and multifd then calls these hooks back from the
worker threads at opportune moments so the client can process a
portion of the data.
Suggested-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Fabiano Rosas <farosas@suse.de>
---
Note that the doc is not symmetrical among send/recv because the recv
side is still wonky. It doesn't give the packet to the hooks, which
forces the p->normal, p->zero, etc. to be processed at the top level
of the threads, where no client-specific information should be.
---
migration/multifd.h | 76 +++++++++++++++++++++++++++++++++++++++++----
1 file changed, 70 insertions(+), 6 deletions(-)
diff --git a/migration/multifd.h b/migration/multifd.h
index 13e7a88c01..ebb17bdbcf 100644
--- a/migration/multifd.h
+++ b/migration/multifd.h
@@ -229,17 +229,81 @@ typedef struct {
} MultiFDRecvParams;
typedef struct {
- /* Setup for sending side */
+ /*
+ * The send_setup, send_cleanup, send_prepare are only called on
+ * the QEMU instance at the migration source.
+ */
+
+ /*
+ * Setup for sending side. Called once per channel during channel
+ * setup phase.
+ *
+ * Must allocate p->iov. If packets are in use (default), one
+ * extra iovec must be allocated for the packet header. Any memory
+ * allocated in this hook must be released at send_cleanup.
+ *
+ * p->write_flags may be used for passing flags to the QIOChannel.
+ *
+ * p->compression_data may be used by compression methods to store
+ * compression data.
+ */
int (*send_setup)(MultiFDSendParams *p, Error **errp);
- /* Cleanup for sending side */
+
+ /*
+ * Cleanup for sending side. Called once per channel during
+ * channel cleanup phase. May be empty.
+ */
void (*send_cleanup)(MultiFDSendParams *p, Error **errp);
- /* Prepare the send packet */
+
+ /*
+ * Prepare the send packet. Called from multifd_send(), with p
+ * pointing to the MultiFDSendParams of a channel that is
+ * currently idle.
+ *
+ * Must populate p->iov with the data to be sent, increment
+ * p->iovs_num to match the amount of iovecs used and set
+ * p->next_packet_size with the amount of data currently present
+ * in p->iov.
+ *
+ * Must indicate whether this is a compression packet by setting
+ * p->flags.
+ *
+ * As a last step, if packets are in use (default), must prepare
+ * the packet by calling multifd_send_fill_packet().
+ */
int (*send_prepare)(MultiFDSendParams *p, Error **errp);
- /* Setup for receiving side */
+
+ /*
+ * The recv_setup, recv_cleanup, recv are only called on the QEMU
+ * instance at the migration destination.
+ */
+
+ /*
+ * Setup for receiving side. Called once per channel during
+ * channel setup phase. May be empty.
+ *
+ * May allocate data structures for the receiving of data. May use
+ * p->iov. Compression methods may use p->compress_data.
+ */
int (*recv_setup)(MultiFDRecvParams *p, Error **errp);
- /* Cleanup for receiving side */
+
+ /*
+ * Cleanup for receiving side. Called once per channel during
+ * channel cleanup phase. May be empty.
+ */
void (*recv_cleanup)(MultiFDRecvParams *p);
- /* Read all data */
+
+ /*
+ * Data receive method. Called from multifd_recv(), with p
+ * pointing to the MultiFDRecvParams of a channel that is
+ * currently idle. Only called if there is data available to
+ * receive.
+ *
+ * Must validate p->flags according to what was set at
+ * send_prepare.
+ *
+ * Must read the data from the QIOChannel p->c.
+ */
int (*recv)(MultiFDRecvParams *p, Error **errp);
} MultiFDMethods;
--
2.35.3
- [PATCH v6 15/19] migration/multifd: Register nocomp ops dynamically, (continued)
- [PATCH v6 15/19] migration/multifd: Register nocomp ops dynamically, Fabiano Rosas, 2024/08/27
- [PATCH v6 14/19] migration/multifd: Standardize on multifd ops names, Fabiano Rosas, 2024/08/27
- [PATCH v6 17/19] migration/multifd: Make MultiFDMethods const, Fabiano Rosas, 2024/08/27
- [PATCH v6 16/19] migration/multifd: Move nocomp code into multifd-nocomp.c, Fabiano Rosas, 2024/08/27
- [PATCH v6 18/19] migration/multifd: Stop changing the packet on recv side, Fabiano Rosas, 2024/08/27
- [PATCH v6 19/19] migration/multifd: Add documentation for multifd methods,
Fabiano Rosas <=
- Re: [PATCH v6 19/19] migration/multifd: Add documentation for multifd methods, Peter Xu, 2024/08/27
- Re: [PATCH v6 19/19] migration/multifd: Add documentation for multifd methods, Fabiano Rosas, 2024/08/27
- Re: [PATCH v6 19/19] migration/multifd: Add documentation for multifd methods, Peter Xu, 2024/08/27
- Re: [PATCH v6 19/19] migration/multifd: Add documentation for multifd methods, Fabiano Rosas, 2024/08/27
- Re: [PATCH v6 19/19] migration/multifd: Add documentation for multifd methods, Peter Xu, 2024/08/27
- Re: [PATCH v6 19/19] migration/multifd: Add documentation for multifd methods, Fabiano Rosas, 2024/08/27
- Re: [PATCH v6 19/19] migration/multifd: Add documentation for multifd methods, Peter Xu, 2024/08/27
- Re: [PATCH v6 19/19] migration/multifd: Add documentation for multifd methods, Fabiano Rosas, 2024/08/28
- Re: [PATCH v6 19/19] migration/multifd: Add documentation for multifd methods, Peter Xu, 2024/08/28