[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 04/14] migration: let incoming side use thread c
From: |
Dr. David Alan Gilbert |
Subject: |
Re: [Qemu-devel] [PATCH 04/14] migration: let incoming side use thread context |
Date: |
Wed, 28 Feb 2018 17:43:50 +0000 |
User-agent: |
Mutt/1.9.2 (2017-12-15) |
* Peter Xu (address@hidden) wrote:
> The old incoming migration is running in main thread and default
> gcontext. With the new qio_channel_add_watch_full() we can now let it
> run in the thread's own gcontext (if there is one).
>
> Currently this patch does nothing alone. But when any of the incoming
> migration is run in another iothread (e.g., the upcoming migrate-recover
> command), this patch will bind the incoming logic to the iothread
> instead of the main thread (which may already get page faulted and
> hanged).
Does this make any difference to the Postcopy listener thread, which
takes over reading from the main thread once in postcopy mode?
(See savevm.c:postcopy_ram_listen_thread).
Dave
> RDMA is not considered for now since it's not even using the QIO APIs at
> all.
>
> CC: Juan Quintela <address@hidden>
> CC: Dr. David Alan Gilbert <address@hidden>
> CC: Laurent Vivier <address@hidden>
> Signed-off-by: Peter Xu <address@hidden>
> ---
> migration/exec.c | 11 ++++++-----
> migration/fd.c | 11 ++++++-----
> migration/socket.c | 12 +++++++-----
> 3 files changed, 19 insertions(+), 15 deletions(-)
>
> diff --git a/migration/exec.c b/migration/exec.c
> index 0bc5a427dd..f401fc005e 100644
> --- a/migration/exec.c
> +++ b/migration/exec.c
> @@ -55,6 +55,7 @@ void exec_start_incoming_migration(const char *command,
> Error **errp)
> {
> QIOChannel *ioc;
> const char *argv[] = { "/bin/sh", "-c", command, NULL };
> + GSource *source;
>
> trace_migration_exec_incoming(command);
> ioc = QIO_CHANNEL(qio_channel_command_new_spawn(argv,
> @@ -65,9 +66,9 @@ void exec_start_incoming_migration(const char *command,
> Error **errp)
> }
>
> qio_channel_set_name(ioc, "migration-exec-incoming");
> - qio_channel_add_watch(ioc,
> - G_IO_IN,
> - exec_accept_incoming_migration,
> - NULL,
> - NULL);
> + source = qio_channel_add_watch_full(ioc, G_IO_IN,
> + exec_accept_incoming_migration,
> + NULL, NULL,
> + g_main_context_get_thread_default());
> + g_source_unref(source);
> }
> diff --git a/migration/fd.c b/migration/fd.c
> index cd06182d1e..9c593eb3ff 100644
> --- a/migration/fd.c
> +++ b/migration/fd.c
> @@ -55,6 +55,7 @@ void fd_start_incoming_migration(const char *infd, Error
> **errp)
> {
> QIOChannel *ioc;
> int fd;
> + GSource *source;
>
> fd = strtol(infd, NULL, 0);
> trace_migration_fd_incoming(fd);
> @@ -66,9 +67,9 @@ void fd_start_incoming_migration(const char *infd, Error
> **errp)
> }
>
> qio_channel_set_name(QIO_CHANNEL(ioc), "migration-fd-incoming");
> - qio_channel_add_watch(ioc,
> - G_IO_IN,
> - fd_accept_incoming_migration,
> - NULL,
> - NULL);
> + source = qio_channel_add_watch_full(ioc, G_IO_IN,
> + fd_accept_incoming_migration,
> + NULL, NULL,
> + g_main_context_get_thread_default());
> + g_source_unref(source);
> }
> diff --git a/migration/socket.c b/migration/socket.c
> index e090097077..82c330083c 100644
> --- a/migration/socket.c
> +++ b/migration/socket.c
> @@ -164,6 +164,7 @@ static void socket_start_incoming_migration(SocketAddress
> *saddr,
> Error **errp)
> {
> QIOChannelSocket *listen_ioc = qio_channel_socket_new();
> + GSource *source;
>
> qio_channel_set_name(QIO_CHANNEL(listen_ioc),
> "migration-socket-listener");
> @@ -173,11 +174,12 @@ static void
> socket_start_incoming_migration(SocketAddress *saddr,
> return;
> }
>
> - qio_channel_add_watch(QIO_CHANNEL(listen_ioc),
> - G_IO_IN,
> - socket_accept_incoming_migration,
> - listen_ioc,
> - (GDestroyNotify)object_unref);
> + source = qio_channel_add_watch_full(QIO_CHANNEL(listen_ioc), G_IO_IN,
> + socket_accept_incoming_migration,
> + listen_ioc,
> + (GDestroyNotify)object_unref,
> + g_main_context_get_thread_default());
> + g_source_unref(source);
> }
>
> void tcp_start_incoming_migration(const char *host_port, Error **errp)
> --
> 2.14.3
>
--
Dr. David Alan Gilbert / address@hidden / Manchester, UK
- [Qemu-devel] [PATCH 02/14] qio: rename qio_task_thread_result, (continued)
[Qemu-devel] [PATCH 04/14] migration: let incoming side use thread context, Peter Xu, 2018/02/28
[Qemu-devel] [PATCH 05/14] qio: refactor net listener source operations, Peter Xu, 2018/02/28
[Qemu-devel] [PATCH 06/14] qio: store gsources for net listeners, Peter Xu, 2018/02/28
[Qemu-devel] [PATCH 07/14] qio/chardev: update net listener gcontext, Peter Xu, 2018/02/28
[Qemu-devel] [PATCH 08/14] chardev: allow telnet gsource to switch gcontext, Peter Xu, 2018/02/28
[Qemu-devel] [PATCH 09/14] qio: basic non-default context support for thread, Peter Xu, 2018/02/28
[Qemu-devel] [PATCH 10/14] qio: refcount QIOTask, Peter Xu, 2018/02/28