[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v6 18/23] migration/multifd: Add incoming QIOChannelFile support
From: |
Fabiano Rosas |
Subject: |
[PATCH v6 18/23] migration/multifd: Add incoming QIOChannelFile support |
Date: |
Thu, 29 Feb 2024 12:30:12 -0300 |
On the receiving side we don't need to differentiate between main
channel and threads, so whichever channel is defined first gets to be
the main one. And since there are no packets, use the atomic channel
count to index into the params array.
Reviewed-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Fabiano Rosas <farosas@suse.de>
---
migration/file.c | 35 +++++++++++++++++++++++++++--------
migration/migration.c | 3 ++-
migration/multifd.c | 3 +--
3 files changed, 30 insertions(+), 11 deletions(-)
diff --git a/migration/file.c b/migration/file.c
index a350dd61f0..2f8b626b27 100644
--- a/migration/file.c
+++ b/migration/file.c
@@ -8,6 +8,7 @@
#include "qemu/osdep.h"
#include "exec/ramblock.h"
#include "qemu/cutils.h"
+#include "qemu/error-report.h"
#include "qapi/error.h"
#include "channel.h"
#include "file.h"
@@ -15,6 +16,7 @@
#include "multifd.h"
#include "io/channel-file.h"
#include "io/channel-util.h"
+#include "options.h"
#include "trace.h"
#define OFFSET_OPTION ",offset="
@@ -112,7 +114,8 @@ void file_start_incoming_migration(FileMigrationArgs
*file_args, Error **errp)
g_autofree char *filename = g_strdup(file_args->filename);
QIOChannelFile *fioc = NULL;
uint64_t offset = file_args->offset;
- QIOChannel *ioc;
+ int channels = 1;
+ int i = 0;
trace_migration_file_incoming(filename);
@@ -121,13 +124,29 @@ void file_start_incoming_migration(FileMigrationArgs
*file_args, Error **errp)
return;
}
- ioc = QIO_CHANNEL(fioc);
- if (offset && qio_channel_io_seek(ioc, offset, SEEK_SET, errp) < 0) {
+ if (offset &&
+ qio_channel_io_seek(QIO_CHANNEL(fioc), offset, SEEK_SET, errp) < 0) {
return;
}
- qio_channel_set_name(QIO_CHANNEL(ioc), "migration-file-incoming");
- qio_channel_add_watch_full(ioc, G_IO_IN,
- file_accept_incoming_migration,
- NULL, NULL,
- g_main_context_get_thread_default());
+
+ if (migrate_multifd()) {
+ channels += migrate_multifd_channels();
+ }
+
+ do {
+ QIOChannel *ioc = QIO_CHANNEL(fioc);
+
+ qio_channel_set_name(ioc, "migration-file-incoming");
+ qio_channel_add_watch_full(ioc, G_IO_IN,
+ file_accept_incoming_migration,
+ NULL, NULL,
+ g_main_context_get_thread_default());
+
+ fioc = qio_channel_file_new_fd(dup(fioc->fd));
+
+ if (!fioc || fioc->fd == -1) {
+ error_setg(errp, "Error creating migration incoming channel");
+ break;
+ }
+ } while (++i < channels);
}
diff --git a/migration/migration.c b/migration/migration.c
index c1cc003b99..ff3872468f 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -909,7 +909,8 @@ void migration_ioc_process_incoming(QIOChannel *ioc, Error
**errp)
uint32_t channel_magic = 0;
int ret = 0;
- if (migrate_multifd() && !migrate_postcopy_ram() &&
+ if (migrate_multifd() && !migrate_mapped_ram() &&
+ !migrate_postcopy_ram() &&
qio_channel_has_feature(ioc, QIO_CHANNEL_FEATURE_READ_MSG_PEEK)) {
/*
* With multiple channels, it is possible that we receive channels
diff --git a/migration/multifd.c b/migration/multifd.c
index caef1076ca..ea08f1aa9e 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -1545,8 +1545,7 @@ void multifd_recv_new_channel(QIOChannel *ioc, Error
**errp)
}
trace_multifd_recv_new_channel(id);
} else {
- /* next patch gives this a meaningful value */
- id = 0;
+ id = qatomic_read(&multifd_recv_state->count);
}
p = &multifd_recv_state->params[id];
--
2.35.3
- [PATCH v6 09/23] migration/ram: Add outgoing 'mapped-ram' migration, (continued)
- [PATCH v6 09/23] migration/ram: Add outgoing 'mapped-ram' migration, Fabiano Rosas, 2024/02/29
- [PATCH v6 10/23] migration/ram: Add incoming 'mapped-ram' migration, Fabiano Rosas, 2024/02/29
- [PATCH v6 11/23] tests/qtest/migration: Add tests for mapped-ram file-based migration, Fabiano Rosas, 2024/02/29
- [PATCH v6 13/23] migration/multifd: Decouple recv method from pages, Fabiano Rosas, 2024/02/29
- [PATCH v6 12/23] migration/multifd: Rename MultiFDSend|RecvParams::data to compress_data, Fabiano Rosas, 2024/02/29
- [PATCH v6 14/23] migration/multifd: Allow multifd without packets, Fabiano Rosas, 2024/02/29
- [PATCH v6 17/23] migration/multifd: Add outgoing QIOChannelFile support, Fabiano Rosas, 2024/02/29
- [PATCH v6 15/23] migration/multifd: Allow receiving pages without packets, Fabiano Rosas, 2024/02/29
- [PATCH v6 16/23] migration/multifd: Add a wrapper for channels_created, Fabiano Rosas, 2024/02/29
- [PATCH v6 18/23] migration/multifd: Add incoming QIOChannelFile support,
Fabiano Rosas <=
- [PATCH v6 19/23] migration/multifd: Prepare multifd sync for mapped-ram migration, Fabiano Rosas, 2024/02/29
- [PATCH v6 20/23] migration/multifd: Support outgoing mapped-ram stream format, Fabiano Rosas, 2024/02/29
- [PATCH v6 21/23] migration/multifd: Support incoming mapped-ram stream format, Fabiano Rosas, 2024/02/29
- [PATCH v6 23/23] tests/qtest/migration: Add a multifd + mapped-ram migration test, Fabiano Rosas, 2024/02/29
- [PATCH v6 22/23] migration/multifd: Add mapped-ram support to fd: URI, Fabiano Rosas, 2024/02/29
- Re: [PATCH v6 00/23] migration: File based migration with multifd and mapped-ram, Peter Xu, 2024/02/29