From 89ce63425391a619d746af564c9b0c23ffb0aec9 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Fri, 27 Sep 2024 15:18:50 +0200 Subject: [PATCH] virsh: Add support for VIR_MIGRATE_PARAM_MIGRATE_DISKS_DETECT_ZEROES migration parameter Expose the new parameter as '--migrate-disks-detect-zeroes' option. Signed-off-by: Peter Krempa Reviewed-by: Pavel Hrdina --- docs/manpages/virsh.rst | 8 +++++++- tools/virsh-domain.c | 26 ++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst index f02a28156d..6665d46497 100644 --- a/docs/manpages/virsh.rst +++ b/docs/manpages/virsh.rst @@ -3389,7 +3389,9 @@ migrate [--postcopy-after-precopy] [--postcopy-resume] [--zerocopy] domain desturi [migrateuri] [graphicsuri] [listen-address] [dname] [--timeout seconds [--timeout-suspend | --timeout-postcopy]] - [--xml file] [--migrate-disks disk-list] [--disks-port port] + [--xml file] + [--migrate-disks disk-list] [--migrate-disks-detect-zeroes disk-list] + [--disks-port port] [--compressed] [--comp-methods method-list] [--comp-mt-level] [--comp-mt-threads] [--comp-mt-dthreads] [--comp-xbzrle-cache] [--comp-zlib-level] [--comp-zstd-level] @@ -3420,6 +3422,10 @@ images on source host to the images found at the same place on the destination host. By default only non-shared non-readonly images are transferred. Use *--migrate-disks* to explicitly specify a list of disk targets to transfer via the comma separated ``disk-list`` argument. +The *--migrate-disks-detect-zeroes* option which takes a comma separated list of +disk target names enables zeroed block detection for the listed migrated disks. +These blocks are not transferred or allocated on destination, effectively +sparsifying the disk at the cost of CPU overhead. With *--copy-storage-synchronous-writes* flag used the disk data migration will synchronously handle guest disk writes to both the original source and the destination to ensure that the disk migration converges at the price of possibly diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 50e80689a2..e4923284af 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -10691,6 +10691,11 @@ static const vshCmdOptDef opts_migrate[] = { .completer = virshDomainMigrateDisksCompleter, .help = N_("comma separated list of disks to be migrated") }, + {.name = "migrate-disks-detect-zeroes", + .type = VSH_OT_STRING, + .completer = virshDomainMigrateDisksCompleter, + .help = N_("comma separated list of disks to be migrated with zero detection enabled") + }, {.name = "disks-port", .type = VSH_OT_INT, .unwanted_positional = true, @@ -10909,6 +10914,27 @@ doMigrate(void *opaque) } } + if (vshCommandOptString(ctl, cmd, "migrate-disks-detect-zeroes", &opt) < 0) + goto out; + if (opt) { + g_autofree char **val = NULL; + + if (!(flags & (VIR_MIGRATE_NON_SHARED_DISK | VIR_MIGRATE_NON_SHARED_INC))) { + vshError(ctl, "'--migrate-disks-detect-zeroes' requires one of '--copy-storage-all', '--copy-storage-inc'"); + goto out; + } + + val = g_strsplit(opt, ",", 0); + + if (virTypedParamsAddStringList(¶ms, + &nparams, + &maxparams, + VIR_MIGRATE_PARAM_MIGRATE_DISKS_DETECT_ZEROES, + (const char **)val) < 0) { + goto save_error; + } + } + if (vshCommandOptString(ctl, cmd, "comp-methods", &opt) < 0) goto out; if (opt) {