[PATCH 00/21] migration: Unify capabilities and parameters

Fabiano Rosas posted 21 patches 5 months, 2 weeks ago
Failed in applying to current master (apply log)
Maintainers: Peter Xu <peterx@redhat.com>, Fabiano Rosas <farosas@suse.de>, Eric Blake <eblake@redhat.com>, Markus Armbruster <armbru@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>, Laurent Vivier <lvivier@redhat.com>
There is a newer version of this series
docs/about/deprecated.rst          |   12 +
migration/migration-hmp-cmds.c     |  484 ++++++++----
migration/migration.c              |   50 +-
migration/migration.h              |    9 +-
migration/options.c                | 1090 +++++++++++++---------------
migration/options.h                |   29 +-
migration/page_cache.c             |    6 +-
migration/ram.c                    |    5 +-
migration/savevm.c                 |    8 +-
migration/tls.c                    |    2 +-
qapi/migration.json                |  573 ++++++---------
qapi/pragma.json                   |    3 +-
system/vl.c                        |    3 +-
tests/qtest/libqtest.c             |   42 ++
tests/qtest/libqtest.h             |   12 +
tests/qtest/migration/framework.h  |    2 +
tests/qtest/migration/misc-tests.c |   39 +
17 files changed, 1243 insertions(+), 1126 deletions(-)
[PATCH 00/21] migration: Unify capabilities and parameters
Posted by Fabiano Rosas 5 months, 2 weeks ago
Hi,

Thanks for the reviews in the last round. Your feedback has allowed me
to reduce the complexity of the series and the code considerably.

Changes in this v2:

- Followed the suggestion to unify the TLS strings as StrOrNull. This
  allows the complete removal of the MigrateSetParameters
  type. Therefore, no need for playing tricks with base types.

- I figured out that block_bitmap_mapping was set as optional in
  qmp_query_migrate_parameters in error. Fixing that allows to
  simplify that function somewhat.

- The suggestion of not checking the has_* fields when setting the
  parameters also led to great simplification. Now there's no need to
  open-code the setting of every single parameter.

- Deprecated the capabilities commands.

- Removed some redundant documentation from migration.json. Now
  there's only 1 (one) place where migration parameters need to be
  documented.

The series:
- passes CI: https://gitlab.com/farosas/qemu/-/pipelines/1849885920
- passes the migration tests in the ASAN build.
- passes the migration compat tests against each of the 3 last QEMU versions.
- passes the iotest 300 (related to block_bitmap_mapping).

v1:
https://lore.kernel.org/r/20250411191443.22565-1-farosas@suse.de

Fabiano Rosas (21):
  migration: Normalize tls arguments
  migration: Remove MigrateSetParameters
  qapi/migration: Don't document MigrationParameter
  migration: Run a post update routine after setting parameters
  migration: Add a flag to track block-bitmap-mapping input
  migration: Remove checks for s->parameters has_* fields
  migration: Set block_bitmap_mapping unconditionally in
    query-migrate-parameters
  migration: Do away with usage of QERR_INVALID_PARAMETER_VALUE
  migration: Extract code to mark all parameters as present
  migration: Use QAPI_CLONE_MEMBERS in query_migrate_parameters
  migration: Use QAPI_CLONE_MEMBERS in migrate_params_test_apply
  migration: Use QAPI_CLONE_MEMBERS in migrate_params_apply
  migration: Use visitors in migrate_params_test_apply
  migration: Cleanup hmp_info_migrate_parameters
  migration: Add capabilities into MigrationParameters
  qapi/migration: Mark that query/set-migrate-parameters support
    capabilities
  migration: Remove s->capabilities
  qapi/migration: Deprecate capabilities commands
  migration: Allow migrate commands to provide the migration config
  libqtest: Add a function to check whether a QMP command supports a
    feature
  tests/qtest/migration: Add a test for config passing

 docs/about/deprecated.rst          |   12 +
 migration/migration-hmp-cmds.c     |  484 ++++++++----
 migration/migration.c              |   50 +-
 migration/migration.h              |    9 +-
 migration/options.c                | 1090 +++++++++++++---------------
 migration/options.h                |   29 +-
 migration/page_cache.c             |    6 +-
 migration/ram.c                    |    5 +-
 migration/savevm.c                 |    8 +-
 migration/tls.c                    |    2 +-
 qapi/migration.json                |  573 ++++++---------
 qapi/pragma.json                   |    3 +-
 system/vl.c                        |    3 +-
 tests/qtest/libqtest.c             |   42 ++
 tests/qtest/libqtest.h             |   12 +
 tests/qtest/migration/framework.h  |    2 +
 tests/qtest/migration/misc-tests.c |   39 +
 17 files changed, 1243 insertions(+), 1126 deletions(-)

-- 
2.35.3
Re: [PATCH 00/21] migration: Unify capabilities and parameters
Posted by Mario Casquero 5 months ago
This series has been successfully tested. Boot up two VMs, one in
source and the other in destination with -incoming defer. Using the
migrate_set_parameter, enable the postcopy-ram, after that check with
info migrate_parameters this is correct.

(qemu) migrate_set_parameter postcopy-ram on
(qemu) info migrate_parameters
...
events: off
postcopy-ram: on
x-colo: off
...

Do migration plus the postcopy and check with info migrate there's a
real postcopy process while migrating

(qemu) migrate -d tcp:${DST_IP}:8888
(qemu) info migrate
Status: postcopy-active
Time (ms): total=3410, setup=34, down=53
RAM info:
  Throughput (Mbps): 1000.82
  Sizes (KiB): pagesize=4, total=16798280,
    transferred=357703, remain=6293884,
    precopy=128792, multifd=0, postcopy=228566
  Pages: normal=88199, zero=440747, rate_per_sec=34875
  Others: dirty_syncs=2, postcopy_req=644

(qemu) info migrate -a
Status: postcopy-active
Sockets: [
tcp::::8888
]
Globals:
  store-global-state: on
  only-migratable: off
  send-configuration: on
  send-section-footer: on
  send-switchover-start: on
  clear-bitmap-shift: 18

Finally migration ends seamlessly.
(qemu) info migrate
Status: completed

Tested-by: Mario Casquero <mcasquer@redhat.com>

On Tue, Jun 3, 2025 at 3:39 AM Fabiano Rosas <farosas@suse.de> wrote:
>
> Hi,
>
> Thanks for the reviews in the last round. Your feedback has allowed me
> to reduce the complexity of the series and the code considerably.
>
> Changes in this v2:
>
> - Followed the suggestion to unify the TLS strings as StrOrNull. This
>   allows the complete removal of the MigrateSetParameters
>   type. Therefore, no need for playing tricks with base types.
>
> - I figured out that block_bitmap_mapping was set as optional in
>   qmp_query_migrate_parameters in error. Fixing that allows to
>   simplify that function somewhat.
>
> - The suggestion of not checking the has_* fields when setting the
>   parameters also led to great simplification. Now there's no need to
>   open-code the setting of every single parameter.
>
> - Deprecated the capabilities commands.
>
> - Removed some redundant documentation from migration.json. Now
>   there's only 1 (one) place where migration parameters need to be
>   documented.
>
> The series:
> - passes CI: https://gitlab.com/farosas/qemu/-/pipelines/1849885920
> - passes the migration tests in the ASAN build.
> - passes the migration compat tests against each of the 3 last QEMU versions.
> - passes the iotest 300 (related to block_bitmap_mapping).
>
> v1:
> https://lore.kernel.org/r/20250411191443.22565-1-farosas@suse.de
>
> Fabiano Rosas (21):
>   migration: Normalize tls arguments
>   migration: Remove MigrateSetParameters
>   qapi/migration: Don't document MigrationParameter
>   migration: Run a post update routine after setting parameters
>   migration: Add a flag to track block-bitmap-mapping input
>   migration: Remove checks for s->parameters has_* fields
>   migration: Set block_bitmap_mapping unconditionally in
>     query-migrate-parameters
>   migration: Do away with usage of QERR_INVALID_PARAMETER_VALUE
>   migration: Extract code to mark all parameters as present
>   migration: Use QAPI_CLONE_MEMBERS in query_migrate_parameters
>   migration: Use QAPI_CLONE_MEMBERS in migrate_params_test_apply
>   migration: Use QAPI_CLONE_MEMBERS in migrate_params_apply
>   migration: Use visitors in migrate_params_test_apply
>   migration: Cleanup hmp_info_migrate_parameters
>   migration: Add capabilities into MigrationParameters
>   qapi/migration: Mark that query/set-migrate-parameters support
>     capabilities
>   migration: Remove s->capabilities
>   qapi/migration: Deprecate capabilities commands
>   migration: Allow migrate commands to provide the migration config
>   libqtest: Add a function to check whether a QMP command supports a
>     feature
>   tests/qtest/migration: Add a test for config passing
>
>  docs/about/deprecated.rst          |   12 +
>  migration/migration-hmp-cmds.c     |  484 ++++++++----
>  migration/migration.c              |   50 +-
>  migration/migration.h              |    9 +-
>  migration/options.c                | 1090 +++++++++++++---------------
>  migration/options.h                |   29 +-
>  migration/page_cache.c             |    6 +-
>  migration/ram.c                    |    5 +-
>  migration/savevm.c                 |    8 +-
>  migration/tls.c                    |    2 +-
>  qapi/migration.json                |  573 ++++++---------
>  qapi/pragma.json                   |    3 +-
>  system/vl.c                        |    3 +-
>  tests/qtest/libqtest.c             |   42 ++
>  tests/qtest/libqtest.h             |   12 +
>  tests/qtest/migration/framework.h  |    2 +
>  tests/qtest/migration/misc-tests.c |   39 +
>  17 files changed, 1243 insertions(+), 1126 deletions(-)
>
> --
> 2.35.3
>
>