From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Juan Quintela <quintela@redhat.com>
Cc: qemu-devel@nongnu.org, Laurent Vivier <lvivier@redhat.com>,
Thomas Huth <thuth@redhat.com>,
Markus Armbruster <armbru@redhat.com>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 2/4] multifd: Drop x-multifd-page-count parameter
Date: Thu, 7 Feb 2019 12:33:38 +0000 [thread overview]
Message-ID: <20190207123338.GG19438@redhat.com> (raw)
In-Reply-To: <20190206132331.1694-3-quintela@redhat.com>
On Wed, Feb 06, 2019 at 02:23:29PM +0100, Juan Quintela wrote:
> Libvirt don't want to expose (and explain it). And testing looks like
> 128 is good for all use cases, so just drop it.
One significant concern inline...
>
> Signed-off-by: Juan Quintela <quintela@redhat.com>
> ---
> hmp.c | 7 -------
> migration/migration.c | 30 ------------------------------
> migration/migration.h | 1 -
> migration/ram.c | 13 ++++++++-----
> qapi/migration.json | 13 +------------
> 5 files changed, 9 insertions(+), 55 deletions(-)
> @@ -718,7 +721,7 @@ static void multifd_send_fill_packet(MultiFDSendParams *p)
> packet->magic = cpu_to_be32(MULTIFD_MAGIC);
> packet->version = cpu_to_be32(MULTIFD_VERSION);
> packet->flags = cpu_to_be32(p->flags);
> - packet->size = cpu_to_be32(migrate_multifd_page_count());
> + packet->size = cpu_to_be32(MULTIFD_PAGE_COUNT);
> packet->used = cpu_to_be32(p->pages->used);
> packet->packet_num = cpu_to_be64(p->packet_num);
>
Here the source QEMU sends the page size - which is now
a hardcoded constant - to the target QEMU.
> @@ -756,10 +759,10 @@ static int multifd_recv_unfill_packet(MultiFDRecvParams *p, Error **errp)
> p->flags = be32_to_cpu(packet->flags);
>
> packet->size = be32_to_cpu(packet->size);
> - if (packet->size > migrate_multifd_page_count()) {
> + if (packet->size > MULTIFD_PAGE_COUNT) {
> error_setg(errp, "multifd: received packet "
> "with size %d and expected maximum size %d",
> - packet->size, migrate_multifd_page_count()) ;
> + packet->size, MULTIFD_PAGE_COUNT) ;
> return -1;
> }
>
Here the dest QEMU receives the page size that the source QEMU used, and
checks that it is not larger than its constant.
IIUC, the implication here is that if we ever increase the size of this
constant in future QEMU, we will break live migration from new to old
QEMU due to this check. In fact your previous patch in this series has
done exactly that, so this appears to mean QEMU 4.0 -> QEMU 3.2
multifd migration is broken now.
Alternatively if we decrease the size of the constant in future
QEMU, we will break live migration from old QEMU to new QEMU which
is even worse.
This problem existed before this patch, if the management app was
not explicitly using migrate-set-parameters to set the page count
on both sides of QEMU. So we're already broken, but at least the
feature was marked experimental.
What is the purpose of this packet size check ? Is it something
we can safely remove, so that we can increase or decrease the
size at will without breaking migration compat.
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:[~2019-02-07 12:33 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-06 13:23 [Qemu-devel] [PATCH 0/4] migration: Make multifd not experimental Juan Quintela
2019-02-06 13:23 ` [Qemu-devel] [PATCH 1/4] multifd: Change page count default to 128 Juan Quintela
2019-02-07 11:33 ` Daniel P. Berrangé
2019-02-07 12:13 ` Juan Quintela
2019-02-07 12:13 ` Juan Quintela
2019-02-07 12:41 ` Daniel P. Berrangé
2019-02-06 13:23 ` [Qemu-devel] [PATCH 2/4] multifd: Drop x-multifd-page-count parameter Juan Quintela
2019-02-06 14:20 ` Laurent Vivier
2019-02-06 17:58 ` Juan Quintela
2019-02-06 19:00 ` Laurent Vivier
2019-02-07 12:15 ` Juan Quintela
2019-02-07 12:33 ` Daniel P. Berrangé [this message]
2019-02-12 9:34 ` Juan Quintela
2019-02-12 10:29 ` Daniel P. Berrangé
2019-02-06 13:23 ` [Qemu-devel] [PATCH 3/4] multifd: Drop x- Juan Quintela
2019-02-07 11:23 ` Dr. David Alan Gilbert
2019-02-06 13:23 ` [Qemu-devel] [PATCH 4/4] tests: Add migration multifd test Juan Quintela
2019-02-06 15:49 ` Thomas Huth
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=20190207123338.GG19438@redhat.com \
--to=berrange@redhat.com \
--cc=armbru@redhat.com \
--cc=dgilbert@redhat.com \
--cc=lvivier@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=thuth@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).