From: Peter Xu <peterx@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: "Juan Quintela" <quintela@redhat.com>,
qemu-devel@nongnu.org, "Fabiano Rosas" <farosas@suse.de>,
"Daniel P . Berrangé" <berrange@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Thomas Huth" <thuth@redhat.com>
Subject: Re: Configuring migration (was: [PATCH v3 3/4] migration/qapi: Replace @MigrateSetParameters with @MigrationParameters)
Date: Thu, 2 Nov 2023 14:05:19 -0400 [thread overview]
Message-ID: <ZUPk33GUF/PvAPPo@x1n> (raw)
In-Reply-To: <87msvw6xm2.fsf_-_@pond.sub.org>
On Thu, Nov 02, 2023 at 03:25:25PM +0100, Markus Armbruster wrote:
> Juan Quintela <quintela@redhat.com> writes:
>
> > Markus Armbruster <armbru@redhat.com> wrote:
> >> Peter Xu <peterx@redhat.com> writes:
> >>
> >>> On Wed, Oct 11, 2023 at 04:21:02PM +0200, Markus Armbruster wrote:
> >
> >>> IIRC both of them used to be the goals: either allow compat properties for
> >>> old machine types, or specify migration parameters in cmdline for easier
> >>> debugging and tests. I use "-global" in mostly every migration test script
> >>> after it's introduced.
> >>
> >> You use -global just because it's easier than using monitor commands,
> >> correct?
> >
> > It is long history. But to make things easier I will try to resume.
> > In the beggining there was no "defer" method, so it was imposible to
> > setup migration-channels and that kind of information.
> > So we created that -global migration properties.
> >
> > Time pass, and we need to fix that for real, because more and more
> > migration parameters need to be set bofer we start incoming migration.
> > So we create migration "defer" method. And now we can set things from
> > the command line/QMP.
> >
> > But when one is testing (i.e. migration developers), using the global
> > property is much easier.
> >
> > I am always tempted to modify the monitor command line to allow "read
> > the commands from this file at startup".
> >
> >> Configuration is almost entirely special (own QMP commands for
> >> everything), with a little abuse of general infrastructure stirred in
> >> (-global, compat props). Having capabilities in addition to parameters
> >> is a useless complication. Too many features of questionable utility
> >> with way too many configuration knobs.
> >
> > I also remember that one.
> > In the beggining all migration options were bools. So we have named
> > capabilities. At some point we needed parameters that were not bools,
> > so we had to get the parameters thing because all the migration code
> > supposed that the capabilities were bool.
> >
> > No, I am not defending the choices we made at the time, but that is how
> > it happened.
>
> Decisions that make sense at the time can stop making sense later.
>
> > To be fair, when I have a new "bool" to add to migration,
> > I am never sure if I have to add it as a capability or as a parameter
> > that returns bool.
>
> I'd be unsure, too.
>
>
> Migration has its own idiosyncratic configuration interface, even though
> its configuration needs are not special at all. This is due to a long
> history of decisions that made sense at the time.
>
> What kind of interface would we choose if we could start over now?
>
> Let's have a look at what I consider the two most complex piece of
> configuration to date, namely block backends and QOM objects.
>
> In both cases, configuration is a QAPI object type: BlockdevOptions and
> ObjectOptions.
>
> The common members are the configuration common to all block backends /
> objects. One of them is the type of block backend ("driver" in block
> parlance) or QOM object ("qom-type").
>
> A type's variant members are the configuration specific to that type.
>
> This is suitably expressive.
>
> We create a state object for a given configuration object with
> blockdev-add / object-add.
>
> For block devices, we even have a way to modify a state object's
> configuration: blockdev-reopen. For QOM objects, there's qom-set, but I
> don't expect that to work in the general case. Where "not work" can
> range from "does nothing" to "explodes".
>
> Now let's try to apply this to migration.
>
> As long as we can have just one migration, we need just one QAPI object
> to configure it.
>
> We could create the object with -object / object_add. For convenience,
> we'd probably want to create one with default configuration
> automatically on demand.
>
> We could use qom-set to change configuration. If we're not comfortable
> with using qom-set for production, we could do something like
> blockdev-reopen instead.
>
> Could we move towards such a design? Turn the existing ad hoc interface
> into compatibility sugar for it?
Sounds doable to me.
I'm not familiar with BlockdevOptions, it looks like something setup once
and for all for all relevant parameters need to be set in the same request?
Migration will require each cap/parameter to be set separately anytime,
e.g., the user can adjust downtime / bandwidth even during migration in
progress.
Making all caps/parameters QOM objects, or one object containing both
attributes, sounds like a good fit. object_property_* APIs allows setters,
I think that's good enough for migration to trigger whatever needed (e.g.
migration_rate_set() updates after bandwidth modifications).
We can convert e.g. qmp set parameters into a loop of setting each
property, it'll be slightly slower because we'll need to do sanity check
for each property after each change, but that shouldn't be a hot path
anyway so seems fine.
It'l still be a pity that we still cannot reduce the triplications of qapi
docs immediately even with that. But with that, it seems doable if we will
obsolete QMP migrate-set-parameters after we can do QOM-set.
Thanks,
--
Peter Xu
next prev parent reply other threads:[~2023-11-02 18:06 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-05 16:23 [PATCH v3 0/4] qapi/migration: Dedup migration parameter objects and fix tls-authz crash Peter Xu
2023-09-05 16:23 ` [PATCH v3 1/4] migration/qmp: Fix crash on setting tls-authz with null Peter Xu
2023-09-28 4:47 ` Michael Tokarev
2023-09-28 5:36 ` Markus Armbruster
2023-09-28 6:56 ` Michael Tokarev
2023-10-04 13:58 ` Juan Quintela
2023-10-16 6:05 ` Markus Armbruster
2023-09-05 16:23 ` [PATCH v3 2/4] tests/migration-test: Add a test for null parameter setups Peter Xu
2023-10-04 13:58 ` Juan Quintela
2023-09-05 16:23 ` [PATCH v3 3/4] migration/qapi: Replace @MigrateSetParameters with @MigrationParameters Peter Xu
2023-09-26 20:40 ` Markus Armbruster
2023-10-02 19:52 ` Peter Xu
2023-10-09 12:25 ` Markus Armbruster
2023-10-10 15:05 ` Peter Xu
2023-10-10 19:18 ` Markus Armbruster
2023-10-10 20:09 ` Peter Xu
2023-10-11 4:28 ` Markus Armbruster
2023-10-11 14:21 ` Markus Armbruster
2023-10-12 19:28 ` Peter Xu
2023-10-13 5:36 ` Markus Armbruster
2023-10-31 11:08 ` Juan Quintela
2023-11-02 14:25 ` Configuring migration (was: [PATCH v3 3/4] migration/qapi: Replace @MigrateSetParameters with @MigrationParameters) Markus Armbruster
2023-11-02 18:05 ` Peter Xu [this message]
2023-11-14 7:27 ` Configuring migration Markus Armbruster
2023-11-14 10:20 ` Juan Quintela
2023-11-14 9:13 ` Configuring migration (was: [PATCH v3 3/4] migration/qapi: Replace @MigrateSetParameters with @MigrationParameters) Daniel P. Berrangé
2023-11-14 9:53 ` Configuring migration Markus Armbruster
2023-11-14 9:55 ` Daniel P. Berrangé
2023-11-14 10:28 ` Juan Quintela
2023-11-14 10:34 ` Daniel P. Berrangé
2023-11-14 10:42 ` Juan Quintela
2023-11-14 10:45 ` Daniel P. Berrangé
2023-10-12 15:58 ` [PATCH v3 3/4] migration/qapi: Replace @MigrateSetParameters with @MigrationParameters Peter Xu
2023-10-13 5:41 ` Markus Armbruster
2023-09-05 16:23 ` [PATCH v3 4/4] migration/qapi: Drop @MigrationParameter enum Peter Xu
2023-09-06 4:42 ` Philippe Mathieu-Daudé
2023-09-06 9:00 ` Daniel P. Berrangé
2023-09-06 10:14 ` Philippe Mathieu-Daudé
2023-09-06 10:46 ` Daniel P. Berrangé
2023-09-26 19:05 ` Peter Xu
2023-09-26 20:43 ` Markus Armbruster
2023-10-02 20:42 ` Peter Xu
2023-10-16 6:29 ` Markus Armbruster
2023-10-16 16:16 ` Peter Xu
2023-10-16 17:36 ` Markus Armbruster
2023-09-25 12:59 ` [PATCH v3 0/4] qapi/migration: Dedup migration parameter objects and fix tls-authz crash Markus Armbruster
2023-09-26 17:06 ` Peter Xu
2023-09-26 20:03 ` Markus Armbruster
2023-10-16 7:08 ` Markus Armbruster
2023-10-16 16:29 ` Peter Xu
2023-10-17 6:32 ` Markus Armbruster
2023-10-17 15:28 ` Peter Xu
2023-10-18 5:38 ` Markus Armbruster
2023-10-25 13:17 ` QAPI doc generator improvements (was: [PATCH v3 0/4] qapi/migration: Dedup migration parameter objects and fix tls-authz crash) Markus Armbruster
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=ZUPk33GUF/PvAPPo@x1n \
--to=peterx@redhat.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=farosas@suse.de \
--cc=philmd@linaro.org \
--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).