From: Peter Xu <peterx@redhat.com>
To: Fabiano Rosas <farosas@suse.de>
Cc: qemu-devel@nongnu.org, Juan Quintela <quintela@redhat.com>,
Lukas Straub <lukasstraub2@web.de>,
Leonardo Bras <leobras@redhat.com>
Subject: Re: [PATCH v6 09/10] migration/yank: Keep track of registered yank instances
Date: Wed, 13 Sep 2023 19:48:16 -0400 [thread overview]
Message-ID: <ZQJKQLNNZe772MUA@x1n> (raw)
In-Reply-To: <87jzstkaen.fsf@suse.de>
On Wed, Sep 13, 2023 at 06:53:20PM -0300, Fabiano Rosas wrote:
> Peter Xu <peterx@redhat.com> writes:
>
> > On Mon, Sep 11, 2023 at 02:13:19PM -0300, Fabiano Rosas wrote:
> >> The core yank code is strict about balanced registering and
> >> unregistering of yank functions.
> >>
> >> This creates a difficulty because the migration code registers one
> >> yank function per QIOChannel, but each QIOChannel can be referenced by
> >> more than one QEMUFile. The yank function should not be removed until
> >> all QEMUFiles have been closed.
> >>
> >> Keep a reference count of how many QEMUFiles are using a QIOChannel
> >> that has a yank function. Only unregister the yank function when all
> >> QEMUFiles have been closed.
> >>
> >> This improves the current code by removing the need for the programmer
> >> to know which QEMUFile is the last one to be cleaned up and fixes the
> >> theoretical issue of removing the yank function while another QEMUFile
> >> could still be using the ioc and require a yank.
> >>
> >> Signed-off-by: Fabiano Rosas <farosas@suse.de>
> >> ---
> >> migration/yank_functions.c | 81 ++++++++++++++++++++++++++++++++++----
> >> migration/yank_functions.h | 8 ++++
> >> 2 files changed, 81 insertions(+), 8 deletions(-)
> >
> > I worry this over-complicate things.
>
> It does. We ran out of simple options.
>
> > If you prefer the cleaness that we operate always on qemufile level, can we
> > just register each yank function per-qemufile?
>
> "just" hehe
>
> we could, but:
>
> i) the yank is a per-channel operation, so this is even more unintuitive;
I mean we can provide something like:
void migration_yank_qemufile(void *opaque)
{
QEMUFile *file = opaque;
QIOChannel *ioc = file->ioc;
qio_channel_shutdown(ioc, QIO_CHANNEL_SHUTDOWN_BOTH, NULL);
}
void migration_qemufile_register_yank(QEMUFile *file)
{
if (migration_ioc_yank_supported(file->ioc)) {
yank_register_function(MIGRATION_YANK_INSTANCE,
migration_yank_qemufile,
file);
}
}
>
> ii) multifd doesn't have a QEMUFile, so it will have to continue using
> the ioc;
We can keep using migration_ioc_[un]register_yank() for them if there's no
qemufile attached. As long as the function will all be registered under
MIGRATION_YANK_INSTANCE we should be fine having different yank func.
>
> iii) we'll have to add a yank to every new QEMUFile created during the
> incoming migration (colo, rdma, etc), otherwise the incoming side
> will be left using iocs while the src uses the QEMUFile;
For RDMA, IIUC it'll simply be a noop as migration_ioc_yank_supported()
will be a noop for it for either reg/unreg.
Currently it seems we will also unreg the ioc even for RDMA (even though we
don't reg for it). But since unreg will be a noop it seems all fine even
if not paired.. maybe we should still try to pair it, e.g. register also in
rdma_start_outgoing_migration() for the rdma ioc so at least they're paired.
I don't see why COLO is special here, though. Maybe I missed something.
>
> iv) this is a functional change of the yank feature for which we have no
> tests.
Having yank tested should be preferrable. Lukas is in the loop, let's see
whether he has something. We can still smoke test it before a selftest
being there.
Taking one step back.. I doubt whether anyone is using yank for migration?
Knowing that migration already have migrate-cancel (for precopy) and
migrate-pause (for postcopy). I never used it myself, and I don't think
it's supported for RHEL. How's that in suse's case?
If no one is using it, maybe we can even avoid registering migration to
yank?
>
> If that's all ok to you I'll go ahead and git it a try.
>
> > I think qmp yank will simply fail the 2nd call on the qemufile if the
> > iochannel is shared with the other one, but that's totally fine, IMHO.
> >
> > What do you think?
> >
> > In all cases, we should probably at least merge patch 1-8 if that can
> > resolve the CI issue. I think all of them are properly reviewed.
>
> I agree. Someone needs to queue this though since Juan has been busy.
Yes, I'll see what I can do.
--
Peter Xu
next prev parent reply other threads:[~2023-09-13 23:49 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-11 17:13 [PATCH v6 00/10] Fix segfault on migration return path Fabiano Rosas
2023-09-11 17:13 ` [PATCH v6 01/10] migration: Fix possible race when setting rp_state.error Fabiano Rosas
2023-09-11 17:13 ` [PATCH v6 02/10] migration: Fix possible races when shutting down the return path Fabiano Rosas
2023-09-11 17:13 ` [PATCH v6 03/10] migration: Fix possible race when shutting down to_dst_file Fabiano Rosas
2023-09-11 17:13 ` [PATCH v6 04/10] migration: Remove redundant cleanup of postcopy_qemufile_src Fabiano Rosas
2023-09-11 17:13 ` [PATCH v6 05/10] migration: Consolidate return path closing code Fabiano Rosas
2023-09-11 17:13 ` [PATCH v6 06/10] migration: Replace the return path retry logic Fabiano Rosas
2023-09-11 17:13 ` [PATCH v6 07/10] migration: Move return path cleanup to main migration thread Fabiano Rosas
2023-09-11 17:13 ` [PATCH v6 08/10] migration/yank: Use channel features Fabiano Rosas
2023-09-11 20:46 ` Philippe Mathieu-Daudé
2023-09-13 20:05 ` Peter Xu
2024-01-22 20:08 ` Fabiano Rosas
2024-01-23 1:27 ` Peter Xu
2023-09-11 17:13 ` [PATCH v6 09/10] migration/yank: Keep track of registered yank instances Fabiano Rosas
2023-09-13 20:13 ` Peter Xu
2023-09-13 21:53 ` Fabiano Rosas
2023-09-13 23:48 ` Peter Xu [this message]
2023-09-14 13:23 ` Fabiano Rosas
2023-09-14 14:57 ` Peter Xu
2023-09-25 7:38 ` Lukas Straub
2023-09-25 12:20 ` Fabiano Rosas
2023-09-25 15:32 ` Lukas Straub
2023-09-11 17:13 ` [PATCH v6 10/10] migration: Add a wrapper to cleanup migration files Fabiano Rosas
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=ZQJKQLNNZe772MUA@x1n \
--to=peterx@redhat.com \
--cc=farosas@suse.de \
--cc=leobras@redhat.com \
--cc=lukasstraub2@web.de \
--cc=qemu-devel@nongnu.org \
--cc=quintela@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.