From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Peter Xu <peterx@redhat.com>
Cc: qemu-devel@nongnu.org, "Paolo Bonzini" <pbonzini@redhat.com>,
"Daniel P . Berrange" <berrange@redhat.com>,
"Juan Quintela" <quintela@redhat.com>,
"Markus Armbruster" <armbru@redhat.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Laurent Vivier" <lvivier@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 04/14] migration: let incoming side use thread context
Date: Wed, 28 Feb 2018 17:43:50 +0000 [thread overview]
Message-ID: <20180228174349.GJ2981@work-vm> (raw)
In-Reply-To: <20180228050633.7410-5-peterx@redhat.com>
* Peter Xu (peterx@redhat.com) 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 <quintela@redhat.com>
> CC: Dr. David Alan Gilbert <dgilbert@redhat.com>
> CC: Laurent Vivier <lvivier@redhat.com>
> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
> 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 / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2018-02-28 17:44 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-28 5:06 [Qemu-devel] [PATCH 00/14] qio: general non-default GMainContext support Peter Xu
2018-02-28 5:06 ` [Qemu-devel] [PATCH 01/14] chardev: fix leak in tcp_chr_telnet_init_io() Peter Xu
2018-02-28 9:26 ` Daniel P. Berrangé
2018-02-28 5:06 ` [Qemu-devel] [PATCH 02/14] qio: rename qio_task_thread_result Peter Xu
2018-02-28 9:26 ` Daniel P. Berrangé
2018-02-28 5:06 ` [Qemu-devel] [PATCH 03/14] qio: introduce qio_channel_add_watch_full() Peter Xu
2018-02-28 9:08 ` Daniel P. Berrangé
2018-02-28 12:44 ` Peter Xu
2018-02-28 12:47 ` Daniel P. Berrangé
2018-02-28 13:01 ` Peter Xu
2018-02-28 5:06 ` [Qemu-devel] [PATCH 04/14] migration: let incoming side use thread context Peter Xu
2018-02-28 9:10 ` Daniel P. Berrangé
2018-03-01 4:33 ` Peter Xu
2018-02-28 17:43 ` Dr. David Alan Gilbert [this message]
2018-03-01 2:53 ` Peter Xu
2018-03-01 9:58 ` Dr. David Alan Gilbert
2018-02-28 5:06 ` [Qemu-devel] [PATCH 05/14] qio: refactor net listener source operations Peter Xu
2018-02-28 5:06 ` [Qemu-devel] [PATCH 06/14] qio: store gsources for net listeners Peter Xu
2018-02-28 5:06 ` [Qemu-devel] [PATCH 07/14] qio/chardev: update net listener gcontext Peter Xu
2018-02-28 9:25 ` Daniel P. Berrangé
2018-02-28 12:52 ` Peter Xu
2018-02-28 13:06 ` Daniel P. Berrangé
2018-02-28 5:06 ` [Qemu-devel] [PATCH 08/14] chardev: allow telnet gsource to switch gcontext Peter Xu
2018-02-28 5:06 ` [Qemu-devel] [PATCH 09/14] qio: basic non-default context support for thread Peter Xu
2018-02-28 5:06 ` [Qemu-devel] [PATCH 10/14] qio: refcount QIOTask Peter Xu
2018-02-28 9:16 ` Daniel P. Berrangé
2018-02-28 12:54 ` Peter Xu
2018-02-28 13:07 ` Daniel P. Berrangé
2018-02-28 13:15 ` Peter Xu
2018-02-28 5:06 ` [Qemu-devel] [PATCH 11/14] qio/chardev: return QIOTask when connect async Peter Xu
2018-02-28 9:20 ` Daniel P. Berrangé
2018-02-28 13:07 ` Peter Xu
2018-02-28 5:06 ` [Qemu-devel] [PATCH 12/14] qio: move QIOTaskThreadData into QIOTask Peter Xu
2018-02-28 5:06 ` [Qemu-devel] [PATCH 13/14] qio: allow threaded qiotask to switch contexts Peter Xu
2018-02-28 9:23 ` Daniel P. Berrangé
2018-02-28 13:05 ` Peter Xu
2018-02-28 13:20 ` Daniel P. Berrangé
2018-03-01 8:49 ` Peter Xu
2018-02-28 5:06 ` [Qemu-devel] [PATCH 14/14] qio/chardev: specify gcontext for TLS handshake Peter Xu
2018-02-28 13:22 ` Daniel P. Berrangé
2018-03-01 6:28 ` Peter Xu
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=20180228174349.GJ2981@work-vm \
--to=dgilbert@redhat.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=lvivier@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=stefanha@redhat.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).