Introudce option to enable dirty-limit convergence algorithim
during live migration.
Signed-off-by: Hyman Huang <yong.huang(a)smartx.com>
Message-Id:
<697630e5e66de5c4e2980f49b4240854ddf58673.1702094858.git.yong.huang(a)smartx.com>
---
docs/manpages/virsh.rst | 10 +++++++++-
src/libvirt-domain.c | 8 ++++++++
tools/virsh-domain.c | 6 ++++++
3 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst
index ed1027e133..c160fb4c3b 100644
--- a/docs/manpages/virsh.rst
+++ b/docs/manpages/virsh.rst
@@ -3380,7 +3380,7 @@ migrate
[--compressed] [--comp-methods method-list]
[--comp-mt-level] [--comp-mt-threads] [--comp-mt-dthreads]
[--comp-xbzrle-cache] [--comp-zlib-level] [--comp-zstd-level]
- [--auto-converge] [auto-converge-initial]
+ [--dirty-limit] [--auto-converge] [auto-converge-initial]
[auto-converge-increment] [--persistent-xml file] [--tls]
[--postcopy-bandwidth bandwidth]
[--parallel [--parallel-connections connections]]
@@ -3436,6 +3436,14 @@ source or destination host and the ``migrate`` command will report
an error
leaving the domain active on both hosts. To recover from such situation repeat
the original ``migrate`` command with an additional *--postcopy-resume* flag.
+*--dirty-limit* forces convergence using dirty-limit algorithms during live
+migration. For QEMU/KVM, this means migration will throttle vCPUs as needed to
+keep their dirty page rate within the migration parameter ``vcpu-dirty-limit``
+(1 megabits/s by default). This can improve the responsiveness of large guests
+during live migration and result in more stable read performance. It requires
+dirty-ring size configuration and conflicts with the traditional
+``auto-converge`` algorithm.
+
*--auto-converge* forces convergence during live migration. The initial
guest CPU throttling rate can be set with *auto-converge-initial*. If the
initial throttling rate is not enough to ensure convergence, the rate is
diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
index 94e5672ed8..4254d1e3f2 100644
--- a/src/libvirt-domain.c
+++ b/src/libvirt-domain.c
@@ -4227,6 +4227,10 @@ virDomainMigrate3(virDomainPtr domain,
/* Now checkout the destination */
virCheckReadOnlyGoto(dconn->flags, error);
+ VIR_EXCLUSIVE_FLAGS_GOTO(VIR_MIGRATE_AUTO_CONVERGE,
+ VIR_MIGRATE_DIRTY_LIMIT,
+ error);
+
VIR_EXCLUSIVE_FLAGS_GOTO(VIR_MIGRATE_NON_SHARED_DISK,
VIR_MIGRATE_NON_SHARED_INC,
error);
@@ -4652,6 +4656,10 @@ virDomainMigrateToURI3(virDomainPtr domain,
virCheckDomainReturn(domain, -1);
virCheckReadOnlyGoto(domain->conn->flags, error);
+ VIR_EXCLUSIVE_FLAGS_GOTO(VIR_MIGRATE_AUTO_CONVERGE,
+ VIR_MIGRATE_DIRTY_LIMIT,
+ error);
+
VIR_EXCLUSIVE_FLAGS_GOTO(VIR_MIGRATE_TUNNELLED,
VIR_MIGRATE_PARALLEL,
error);
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 58d5a4ab57..aa6f96a999 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -10990,6 +10990,10 @@ static const vshCmdOptDef opts_migrate[] = {
.type = VSH_OT_BOOL,
.help = N_("compress repeated pages during live migration")
},
+ {.name = "dirty-limit",
+ .type = VSH_OT_BOOL,
+ .help = N_("force convergence with dirty-limit algorithim during live
migration")
+ },
{.name = "auto-converge",
.type = VSH_OT_BOOL,
.help = N_("force convergence during live migration")
@@ -11176,6 +11180,7 @@ doMigrate(void *opaque)
{ "change-protection", VIR_MIGRATE_CHANGE_PROTECTION },
{ "unsafe", VIR_MIGRATE_UNSAFE },
{ "compressed", VIR_MIGRATE_COMPRESSED },
+ { "dirty-limit", VIR_MIGRATE_DIRTY_LIMIT },
{ "auto-converge", VIR_MIGRATE_AUTO_CONVERGE },
{ "rdma-pin-all", VIR_MIGRATE_RDMA_PIN_ALL },
{ "offline", VIR_MIGRATE_OFFLINE },
@@ -11528,6 +11533,7 @@ cmdMigrate(vshControl *ctl, const vshCmd *cmd)
VSH_EXCLUSIVE_OPTIONS("live", "offline");
VSH_EXCLUSIVE_OPTIONS("timeout-suspend", "timeout-postcopy");
VSH_EXCLUSIVE_OPTIONS("copy-storage-all", "copy-storage-inc");
+ VSH_EXCLUSIVE_OPTIONS("dirty-limit", "auto-converge");
VSH_REQUIRE_OPTION("postcopy-after-precopy", "postcopy");
VSH_REQUIRE_OPTION("postcopy-resume", "postcopy");
VSH_REQUIRE_OPTION("timeout-postcopy", "postcopy");
--
2.39.1