From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Peter Xu <peterx@redhat.com>
Cc: qemu-devel@nongnu.org, "Paolo Bonzini" <pbonzini@redhat.com>,
"Juan Quintela" <quintela@redhat.com>,
"Markus Armbruster" <armbru@redhat.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Dr . David Alan Gilbert" <dgilbert@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 09:10:58 +0000 [thread overview]
Message-ID: <20180228091058.GC31550@redhat.com> (raw)
In-Reply-To: <20180228050633.7410-5-peterx@redhat.com>
On Wed, Feb 28, 2018 at 01:06:23PM +0800, Peter Xu 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).
>
> RDMA is not considered for now since it's not even using the QIO APIs at
> all.
Errm, yes, it is.
struct QIOChannelRDMA {
QIOChannel parent;
RDMAContext *rdma;
QEMUFile *file;
size_t len;
bool blocking; /* XXX we don't actually honour this yet */
};
....
>
> 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
>
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2018-02-28 9:11 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é [this message]
2018-03-01 4:33 ` Peter Xu
2018-02-28 17:43 ` Dr. David Alan Gilbert
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=20180228091058.GC31550@redhat.com \
--to=berrange@redhat.com \
--cc=armbru@redhat.com \
--cc=dgilbert@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).