Signed-off-by: Jiri Denemark <jdenemar@xxxxxxxxxx> --- tools/virsh-domain.c | 33 +++++++++++++++++++++++++++++++-- tools/virsh.pod | 15 +++++++++++---- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 275ac0c318..db0d5d4dcc 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -10557,6 +10557,10 @@ static const vshCmdOptDef opts_migrate[] = { .type = VSH_OT_BOOL, .help = N_("use TLS for migration") }, + {.name = "postcopy-bandwidth", + .type = VSH_OT_INT, + .help = N_("post-copy migration bandwidth limit in MiB/s") + }, {.name = NULL} }; @@ -10753,6 +10757,15 @@ doMigrate(void *opaque) goto save_error; } + if ((rv = vshCommandOptULongLong(ctl, cmd, "postcopy-bandwidth", &ullOpt)) < 0) { + goto out; + } else if (rv > 0) { + if (virTypedParamsAddULLong(¶ms, &nparams, &maxparams, + VIR_MIGRATE_PARAM_BANDWIDTH_POSTCOPY, + ullOpt) < 0) + goto save_error; + } + if (vshCommandOptBool(cmd, "live")) flags |= VIR_MIGRATE_LIVE; if (vshCommandOptBool(cmd, "p2p")) @@ -11150,6 +11163,10 @@ static const vshCmdOptDef opts_migrate_setspeed[] = { .flags = VSH_OFLAG_REQ, .help = N_("migration bandwidth limit in MiB/s") }, + {.name = "postcopy", + .type = VSH_OT_BOOL, + .help = N_("set postcopy migration bandwidth") + }, {.name = NULL} }; @@ -11158,6 +11175,7 @@ cmdMigrateSetMaxSpeed(vshControl *ctl, const vshCmd *cmd) { virDomainPtr dom = NULL; unsigned long bandwidth = 0; + unsigned int flags = 0; bool ret = false; if (!(dom = virshCommandOptDomain(ctl, cmd, NULL))) @@ -11166,7 +11184,10 @@ cmdMigrateSetMaxSpeed(vshControl *ctl, const vshCmd *cmd) if (vshCommandOptULWrap(ctl, cmd, "bandwidth", &bandwidth) < 0) goto done; - if (virDomainMigrateSetMaxSpeed(dom, bandwidth, 0) < 0) + if (vshCommandOptBool(cmd, "postcopy")) + flags |= VIR_DOMAIN_MIGRATE_MAX_SPEED_POSTCOPY; + + if (virDomainMigrateSetMaxSpeed(dom, bandwidth, flags) < 0) goto done; ret = true; @@ -11191,6 +11212,10 @@ static const vshCmdInfo info_migrate_getspeed[] = { static const vshCmdOptDef opts_migrate_getspeed[] = { VIRSH_COMMON_OPT_DOMAIN_FULL(VIR_CONNECT_LIST_DOMAINS_ACTIVE), + {.name = "postcopy", + .type = VSH_OT_BOOL, + .help = N_("get postcopy migration bandwidth") + }, {.name = NULL} }; @@ -11199,12 +11224,16 @@ cmdMigrateGetMaxSpeed(vshControl *ctl, const vshCmd *cmd) { virDomainPtr dom = NULL; unsigned long bandwidth; + unsigned int flags = 0; bool ret = false; if (!(dom = virshCommandOptDomain(ctl, cmd, NULL))) return false; - if (virDomainMigrateGetMaxSpeed(dom, &bandwidth, 0) < 0) + if (vshCommandOptBool(cmd, "postcopy")) + flags |= VIR_DOMAIN_MIGRATE_MAX_SPEED_POSTCOPY; + + if (virDomainMigrateGetMaxSpeed(dom, &bandwidth, flags) < 0) goto done; vshPrint(ctl, "%lu\n", bandwidth); diff --git a/tools/virsh.pod b/tools/virsh.pod index 59a5900162..67edb57b14 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -1903,6 +1903,7 @@ I<domain> I<desturi> [I<migrateuri>] [I<graphicsuri>] [I<listen-address>] [I<dna [I<--comp-mt-level>] [I<--comp-mt-threads>] [I<--comp-mt-dthreads>] [I<--comp-xbzrle-cache>] [I<--auto-converge>] [I<auto-converge-initial>] [I<auto-converge-increment>] [I<--persistent-xml> B<file>] [I<--tls>] +[I<--postcopy-bandwidth> B<bandwidth>] Migrate domain to another host. Add I<--live> for live migration; <--p2p> for peer-2-peer migration; I<--direct> for direct migration; or I<--tunnelled> @@ -1933,6 +1934,8 @@ Once migration is running, the user may switch to post-copy using the B<migrate-postcopy> command sent from another virsh instance or use I<--postcopy-after-precopy> along with I<--postcopy> to let libvirt automatically switch to post-copy after the first pass of pre-copy is finished. +The maximum bandwidth consumed during the post-copy phase may be limited using +I<--postcopy-bandwidth>. I<--auto-converge> forces convergence during live migration. The initial guest CPU throttling rate can be set with I<auto-converge-initial>. If the @@ -2098,17 +2101,21 @@ is supposed to be used while the domain is being live-migrated as a reaction to migration progress and increasing number of compression cache misses obtained from domjobinfo. -=item B<migrate-setspeed> I<domain> I<bandwidth> +=item B<migrate-setspeed> I<domain> I<bandwidth> [I<--postcopy>] Set the maximum migration bandwidth (in MiB/s) for a domain which is being migrated to another host. I<bandwidth> is interpreted as an unsigned long long value. Specifying a negative value results in an essentially unlimited value being provided to the hypervisor. The hypervisor can choose whether to -reject the value or convert it to the maximum value allowed. +reject the value or convert it to the maximum value allowed. If the +I<--postcopy> option is specified, the command will set the maximum bandwidth +allowed during a post-copy migration phase. -=item B<migrate-getspeed> I<domain> +=item B<migrate-getspeed> I<domain> [I<--postcopy>] -Get the maximum migration bandwidth (in MiB/s) for a domain. +Get the maximum migration bandwidth (in MiB/s) for a domain. If the +I<--postcopy> option is specified, the command will get the maximum bandwidth +allowed during a post-copy migration phase. =item B<migrate-postcopy> I<domain> -- 2.20.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list