On 19.11.25 01:05, Peter Xu wrote:
On Tue, Nov 18, 2025 at 11:24:12PM +0300, Vladimir Sementsov-Ogievskiy wrote:
Add Daniel

On 10.11.25 13:39, Alexandr Moshkov wrote:
v3:
- use pre_load_errp instead of pre_load in vhost.c
- change vhost-user-blk property to
    "skip-get-vring-base-inflight-migration"
- refactor vhost-user-blk.c, by moving vhost_user_blk_inflight_needed() higher

v2:
- rewrite migration using VMSD instead of qemufile API
- add vhost-user-blk parameter instead of migration capability

I don't know if VMSD was used cleanly in migration implementation, so
feel free for comments.

Based on Vladimir's work:
[PATCH v2 00/25] vhost-user-blk: live-backend local migration
    which was based on:
      - [PATCH v4 0/7] chardev: postpone connect
        (which in turn is based on [PATCH 0/2] remove deprecated 'reconnect' 
options)
      - [PATCH v3 00/23] vhost refactoring and fixes
      - [PATCH v8 14/19] migration: introduce .pre_incoming() vmsd handler


Hi!

On my series about backend-transfer migration, the final consensus (or at least,
I hope that it's a consensus:) is that using device properties to control 
migration
channel content is wrong. And we should instead use migration parameters.

(discussion here: 
https://lore.kernel.org/qemu-devel/[email protected]/
 )

So the API for backend-transfer features is a migration parameter

     backend-transfer = [ list of QOM paths of devices, for which we want to 
enable backend-transfer ]

and user don't have to change device properties in runtime to setup the 
following migration.

So I assume, similar practice should be applied here: don't use device
properties to control migration.

So, should it be a parameter like

     migrate-inflight-region = [ list of QOM paths of vhost-user devices ]

?

I have concern that if we start doing this more, migration qapi/ will be
completely messed up.

Imagine a world where there'll be tons of lists like:

   migrate-dev1-some-feature-1 = [list of devices (almost only dev1 typed)]
   migrate-dev2-some-feature-2 = [list of devices (almost only dev2 typed)]
   migrate-dev3-some-feature-3 = [list of devices (almost only dev3 typed)]
   ...


Yes, hard to argue against it.

I still hope, Daniel will share his opinion..

From our side, we are OK with any interface, which is accepted)


Let me summarize in short the variants I see:

===

1. lists

Add migrations parameters for such features:

migrate-inflight-region = [ list of QOM paths of vhost-user devices ]
backend-transfer = [ list of QOM paths of devices, which backend should be 
migrated ]

This way, we just need to set the same sets for source and target QEMU before 
migration,
and it have no relation to machine types.

PROS: Like any other migration-capability, setup what (and how) should migrate, 
no
relation to device properties and MT.

CONS: Logically, that's the same as add a device property, but instead we 
implement
lists of devices, and create extra QOM_PATH-links.

===

2. device parameters

Before migration we should loop through devices and call corresponding
qom-set commands, like

qom-set {path: QOM_PATH, property: "backend-transfer", "value": true}
qom-set {path: QOM_PATH, property: "migrate-inflight-region", "value": true}

And of course, we should care to set same values for corresponding devices on 
source
and target.

In this case, we also _can_ rely on machine types for defaults.

Note, that "migrate-inflight-region" may become the default in the 11.0 MT.
But backend-transfer can't be a default, as this way we'll break remote 
migration.

PROS: No lists, native properties

CONS: These properties does not define any portion of device state, internal or
visible to guest. It's not a property of device, but it's and option for 
migration
of that device.

===

2.1 = [2] assisted by one boolean migration-parameter

Still, if we want make backend-transfer "a kind of" default, we'll need one 
boolean
migration parameter "it-is-local-migration", and modify logic to

really_do_backend_transfer = it-is-local-migration and device.backend-transfer
really_do_migrate_inflight_region = not it-is-local-migration and 
device.migrate-inflight-region

PROS: starting from some MT, we'll have good defaults, so that user don't have
to enable/disable the option per device for every migration.

CONS: a precedent of the behavior driven by combination of device property and
corresponding migration parameter (or we have something similar?)

===

4. mixed

Keep [2] for this series, and [1] for backend-transfer.

PROS: list for backend-transfer remains "the only exclusion" instead of "the 
practice",
so we will not have tons of such lists :)

CONS: inconstant solutions for similar things

===

5. implement "per device" migration parameters

They may be set by additional QMP command qmp-migrate-set-device-parameters, 
which
will take additional qom-path parameter.

Or, we may add one list of structures like

[{
   qom_path: ...
   parameters: ..
}, ...]

into common migration parameters.

PROS: keep new features as a property of migration, but avoid several lists of 
QOM paths
CONS: ?

Hmm, we also may select devices not only by qom_path, but by type, for example, 
to enable
feature for all virtio-net devices. Hmm, and this type may be also used as 
discriminator
for parameters, which may be a QAPI union type..

===


Thoughts?


That doesn't look reasonable at all.  If some feature is likely only
supported in one device, that should not appear in migration.json but only
in the specific device.

I don't think I'm fully convinced we can't enable some form of machine type
properties (with QDEV or not) on backends we should stick with something
like that.  I can have some closer look this week, but.. even if not, I
still think migration shouldn't care about some specific behavior of a
specific device.

If we really want to have some way to probe device features, maybe we
should also think about a generic interface (rather than "one new list
every time").  We also have some recent discussions on a proper interface
to query TAP backend features like USO*.  Maybe they share some of the
goals here.

What do you mean by probing device features? Isn't it qom-get command?

--
Best regards,
Vladimir

Reply via email to