From: "Michael S. Tsirkin" <mst@redhat.com>
To: Juan Quintela <quintela@redhat.com>
Cc: qemu-devel@nongnu.org, "Leonardo Bras" <leobras@redhat.com>,
"Peter Xu" <peterx@redhat.com>,
"Jiri Denemark" <jdenemar@redhat.com>,
"Avihai Horon" <avihaih@nvidia.com>,
"Fiona Ebner" <f.ebner@proxmox.com>,
"Daniel P . Berrangé" <berrange@redhat.com>
Subject: Re: [PATCH v3 2/3] migration/docs: How to migrate when hosts have different features
Date: Wed, 17 May 2023 06:23:26 -0400 [thread overview]
Message-ID: <20230517062128-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20230515083201.55060-3-quintela@redhat.com>
On Mon, May 15, 2023 at 10:32:00AM +0200, Juan Quintela wrote:
> Sometimes devices have different features depending of things outside
> of qemu. For instance the kernel. Document how to handle that cases.
>
> Signed-off-by: Juan Quintela <quintela@redhat.com>
yes, e.g. vhost features are exactly like this.
> ---
>
> If you have some example to put here, I am all ears. I guess that
> virtio-* with some features that are on qemu but not on all kernel
> would do the trick, but I am not a virtio guru myself. Patches
> welcome.
> ---
> docs/devel/migration.rst | 93 ++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 93 insertions(+)
>
> diff --git a/docs/devel/migration.rst b/docs/devel/migration.rst
> index b4c4f3ec35..95e797ee60 100644
> --- a/docs/devel/migration.rst
> +++ b/docs/devel/migration.rst
> @@ -357,6 +357,99 @@ machine types to have the right value: ::
> ...
> };
>
> +A device with diferent features on both sides
> +---------------------------------------------
> +
> +Let's assume that we are using the same QEMU binary on both sides,
> +just to make the things easier. But we have a device that has
> +different features on both sides of the migration. That can be
> +because the devices are different, because the kernel driver of both
> +devices have different features, whatever.
> +
> +How can we get this to work with migration. The way to do that is
> +"theoretically" easy. You have to get the features that the device
> +has in the source of the migration. The features that the device has
> +on the target of the migration, you get the intersection of the
> +features of both sides, and that is the way that you should launch
> +qemu.
> +
> +Notice that this is not completely related to qemu. The most
> +important thing here is that this should be handle by the managing
> +application that launches qemu. If qemu is configured correctly, the
> +migration will suceeed.
> +
> +Once that we have defined that, doing this is complicated. Almost all
> +devices are bad at being able to be launched with only some features
> +enabled. With one big exception: cpus.
> +
> +You can read the documentation for QEMU x86 cpu models here:
> +
> +https://qemu-project.gitlab.io/qemu/system/qemu-cpu-models.html
> +
> +See when they talk about migration they recommend that one chooses the
> +newest cpu model that is supported for all cpus.
> +
> +Let's say that we have:
> +
> +Host A:
> +
> +Device X has the feature Y
> +
> +Host B:
> +
> +Device X has not the feature Y
> +
> +If we try to migrate without any care from host A to host B, it will
> +fail because when migration tries to load the feature Y on
> +destination, it will find that the hardware is not there.
> +
> +Doing this would be the equivalent of doing with cpus:
> +
> +Host A:
> +
> +$ qemu-system-x86_64 -cpu host
> +
> +Host B:
> +
> +$ qemu-system-x86_64 -cpu host
> +
> +When both hosts have different cpu features this is waranteed to fail.
> +Especially if Host B has less features than host A. If host A has
> +less features than host B, sometimes it works. Important word of last
> +sentence is "sometimes".
> +
> +So, forgetting about cpu models and continuing with the -cpu host
> +example, let's see that the differences of the cpus is that Host A and
> +B have the following features:
> +
> +Features: 'pcid' 'stibp' 'taa-no'
> +Host A: X X
> +Host B: X
> +
> +And we want to migrate between them, the way configure both qemu cpu
> +will be:
> +
> +Host A:
> +
> +$ qemu-system-x86_64 -cpu host,pcid=off,stibp=off
> +
> +Host B:
> +
> +$ qemu-system-x86_64 -cpu host,taa-no=off
> +
> +And you would be able to migrate between them. It is responsability
> +of the management application or of the user to make sure that the
> +configuration is correct. QEMU don't know how to look at this kind of
> +features in general.
> +
> +Other devices have worse control about individual features. If they
> +want to be able to migrate between hosts that show different features,
> +the device needs a way to configure which ones it is going to use.
> +
> +In this section we have considered that we are using the same QEMU
> +binary in both sides of the migration. If we use different QEMU
> +versions process, then we need to have into account all other
> +differences and the examples become even more complicated.
How do people know what to do?
How about a tool that will help you get data from hosts
and then tell you how to configure qemu to make them
compatible?
> VMState
> -------
> --
> 2.40.1
next prev parent reply other threads:[~2023-05-17 10:24 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-15 8:31 [PATCH v3 0/3] Migration documentation Juan Quintela
2023-05-15 8:31 ` [PATCH v3 1/3] migration: Add documentation for backwards compatiblity Juan Quintela
2023-05-16 23:39 ` Peter Xu
2023-05-18 1:47 ` Xiaoyao Li
2023-10-17 13:59 ` Juan Quintela
2023-10-23 11:09 ` Juan Quintela
2023-05-15 8:32 ` [PATCH v3 2/3] migration/docs: How to migrate when hosts have different features Juan Quintela
2023-05-16 23:51 ` Peter Xu
2023-10-17 14:05 ` Juan Quintela
2023-05-17 10:23 ` Michael S. Tsirkin [this message]
2023-10-17 14:11 ` Juan Quintela
2023-05-15 8:32 ` [PATCH v3 3/3] migration/doc: We broke backwards compatibility Juan Quintela
2023-05-17 0:03 ` Peter Xu
2023-10-17 14:18 ` Juan Quintela
2023-05-17 7:09 ` Fiona Ebner
2023-10-23 11:09 ` Juan Quintela
2023-05-17 10:20 ` Michael S. Tsirkin
2023-05-17 11:43 ` Juan Quintela
2023-05-17 11:47 ` Michael S. Tsirkin
2023-05-31 13:23 ` Michael S. Tsirkin
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=20230517062128-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=avihaih@nvidia.com \
--cc=berrange@redhat.com \
--cc=f.ebner@proxmox.com \
--cc=jdenemar@redhat.com \
--cc=leobras@redhat.com \
--cc=peterx@redhat.com \
--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.