Ping, for reviews :) regards, tejus
> On 17 Sep 2026, at 11:50 AM, Tejus GK <[email protected]> wrote: > > QEMU supports a migration parameter to determine whether zero-page > checking should be performed and if yes, where it should be performed > (i.e., in the main migration thread or multifd threads). Add support for > this parameter in libvirt. > > Signed-off-by: Tejus GK <[email protected]> > --- > include/libvirt/libvirt-domain.h | 11 +++++++++++ > src/qemu/qemu_migration.c | 1 + > src/qemu/qemu_migration_params.c | 8 ++++++++ > src/qemu/qemu_migration_params.h | 1 + > tools/virsh-domain.c | 13 +++++++++++++ > 5 files changed, 34 insertions(+) > > diff --git a/include/libvirt/libvirt-domain.h > b/include/libvirt/libvirt-domain.h > index 99208137c3..5a4875770b 100644 > --- a/include/libvirt/libvirt-domain.h > +++ b/include/libvirt/libvirt-domain.h > @@ -1468,6 +1468,17 @@ typedef enum { > */ > # define VIR_MIGRATE_PARAM_TLS_DESTINATION "tls.destination" > > +/** > + * VIR_MIGRATE_PARAM_ZERO_PAGE_DETECTION: > + * > + * virDomainMigrate* params field: zero page detection method as > + * VIR_TYPED_PARAM_STRING. Supported values are 'none', 'legacy', and > + * 'multifd'. > + * > + * Since: 12.8.0 > + */ > +# define VIR_MIGRATE_PARAM_ZERO_PAGE_DETECTION "zero_page_detection" > + > /* Domain migration. */ > virDomainPtr virDomainMigrate (virDomainPtr domain, virConnectPtr dconn, > unsigned long flags, const char *dname, > diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c > index 4a43ab83b0..f25506e590 100644 > --- a/src/qemu/qemu_migration.c > +++ b/src/qemu/qemu_migration.c > @@ -110,6 +110,7 @@ const virTypedParamValidationTemplate > qemuMigrationParametersValidation[] = { > { VIR_MIGRATE_PARAM_TLS_DESTINATION, VIR_TYPED_PARAM_STRING }, > { VIR_MIGRATE_PARAM_DISKS_URI, VIR_TYPED_PARAM_STRING }, > { VIR_MIGRATE_PARAM_BANDWIDTH_AVAIL_SWITCHOVER, VIR_TYPED_PARAM_ULLONG }, > + { VIR_MIGRATE_PARAM_ZERO_PAGE_DETECTION, VIR_TYPED_PARAM_STRING}, > { "", 0 } > }; > > diff --git a/src/qemu/qemu_migration_params.c > b/src/qemu/qemu_migration_params.c > index dd47516742..7064140379 100644 > --- a/src/qemu/qemu_migration_params.c > +++ b/src/qemu/qemu_migration_params.c > @@ -131,6 +131,7 @@ VIR_ENUM_IMPL(qemuMigrationParam, > "multifd-zstd-level", > "avail-switchover-bandwidth", > "direct-io", > + "zero-page-detection", > ); > > typedef struct _qemuMigrationParamsAlwaysOnItem > qemuMigrationParamsAlwaysOnItem; > @@ -274,6 +275,10 @@ static const qemuMigrationParamsTPMapItem > qemuMigrationParamsTPMap[] = { > .unit = 1024 * 1024, /* MiB/s */ > .param = QEMU_MIGRATION_PARAM_AVAIL_SWITCHOVER_BANDWIDTH, > .party = QEMU_MIGRATION_SOURCE}, > + > + {.typedParam = VIR_MIGRATE_PARAM_ZERO_PAGE_DETECTION, > + .param = QEMU_MIGRATION_PARAM_ZERO_PAGE_DETECTION, > + .party = QEMU_MIGRATION_SOURCE}, > }; > > static const qemuMigrationParamInfoItem qemuMigrationParamInfo[] = { > @@ -332,6 +337,9 @@ static const qemuMigrationParamInfoItem > qemuMigrationParamInfo[] = { > [QEMU_MIGRATION_PARAM_DIRECT_IO] = { > .type = QEMU_MIGRATION_PARAM_TYPE_BOOL, > }, > + [QEMU_MIGRATION_PARAM_ZERO_PAGE_DETECTION] = { > + .type = QEMU_MIGRATION_PARAM_TYPE_STRING, > + }, > }; > G_STATIC_ASSERT(G_N_ELEMENTS(qemuMigrationParamInfo) == > QEMU_MIGRATION_PARAM_LAST); > > diff --git a/src/qemu/qemu_migration_params.h > b/src/qemu/qemu_migration_params.h > index b7a829b85a..131fe82fc0 100644 > --- a/src/qemu/qemu_migration_params.h > +++ b/src/qemu/qemu_migration_params.h > @@ -67,6 +67,7 @@ typedef enum { > QEMU_MIGRATION_PARAM_MULTIFD_ZSTD_LEVEL, > QEMU_MIGRATION_PARAM_AVAIL_SWITCHOVER_BANDWIDTH, > QEMU_MIGRATION_PARAM_DIRECT_IO, > + QEMU_MIGRATION_PARAM_ZERO_PAGE_DETECTION, > > QEMU_MIGRATION_PARAM_LAST > } qemuMigrationParam; > diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c > index 2c64f19a19..519d8427bd 100644 > --- a/tools/virsh-domain.c > +++ b/tools/virsh-domain.c > @@ -11432,6 +11432,10 @@ static const vshCmdOptDef opts_migrate[] = { > .type = VSH_OT_INT, > .help = N_("bandwidth (in MiB/s) available for the final phase of > migration") > }, > + {.name = "zero-page-detection", > + .type = VSH_OT_STRING, > + .help = N_("zero page detection method for migration") > + }, > {.name = NULL} > }; > > @@ -11733,6 +11737,15 @@ doMigrate(void *opaque) > goto save_error; > } > > + if ((rv = vshCommandOptString(ctl, cmd, "zero-page-detection", &opt)) < > 0) { > + goto out; > + } else if (rv > 0) { > + if (virTypedParamsAddString(¶ms, &nparams, &maxparams, > + VIR_MIGRATE_PARAM_ZERO_PAGE_DETECTION, > + opt) < 0) > + goto save_error; > + } > + > if ((rv = vshCommandOptInt(ctl, cmd, "comp-zlib-level", &intOpt)) < 0) { > goto out; > } else if (rv > 0) { > -- > 2.43.7 >
