forked from pool/libvirt
Accepting request 860506 from Virtualization
OBS-URL: https://build.opensuse.org/request/show/860506 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/libvirt?expand=0&rev=321
This commit is contained in:
commit
899e0a166d
@ -1,3 +1,16 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jan 4 19:19:19 UTC 2021 - olaf@aepfle.de
|
||||||
|
|
||||||
|
- Update libxl-set-migration-constraints.patch
|
||||||
|
Remove code which handled --max_factor. The total amount of
|
||||||
|
transferred data is no indicator to trigger the final stop+copy.
|
||||||
|
This should have been removed during upgrade to Xen 4.7.
|
||||||
|
Reduce default value of --max_iters from 5 to 2.
|
||||||
|
The workload within domU will continue to produce dirty pages.
|
||||||
|
It is unreasonable to expect any slowdown during migration.
|
||||||
|
Now there is one initial copy of all memory, one instead of four
|
||||||
|
iteration for dirty memory, and a final copy iteration prior move.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Dec 17 04:20:58 UTC 2020 - James Fehlig <jfehlig@suse.com>
|
Thu Dec 17 04:20:58 UTC 2020 - James Fehlig <jfehlig@suse.com>
|
||||||
|
|
||||||
|
@ -16,11 +16,38 @@ Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
|||||||
tools/virsh.pod | 8 ++++++++
|
tools/virsh.pod | 8 ++++++++
|
||||||
6 files changed, 125 insertions(+), 6 deletions(-)
|
6 files changed, 125 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
Index: libvirt-6.10.0/docs/manpages/virsh.rst
|
||||||
|
===================================================================
|
||||||
|
--- libvirt-6.10.0.orig/docs/manpages/virsh.rst
|
||||||
|
+++ libvirt-6.10.0/docs/manpages/virsh.rst
|
||||||
|
@@ -3134,7 +3134,8 @@ migrate
|
||||||
|
[--postcopy-bandwidth bandwidth]
|
||||||
|
[--parallel [--parallel-connections connections]]
|
||||||
|
[--bandwidth bandwidth] [--tls-destination hostname]
|
||||||
|
- [--disks-uri URI]
|
||||||
|
+ [--disks-uri URI] [--max_iters num]
|
||||||
|
+ [--min_remaining num] [--abort_if_busy]
|
||||||
|
|
||||||
|
Migrate domain to another host. Add *--live* for live migration; <--p2p>
|
||||||
|
for peer-2-peer migration; *--direct* for direct migration; or *--tunnelled*
|
||||||
|
@@ -3240,6 +3241,12 @@ parallel connections. The number of such
|
||||||
|
network link between the source and the target and thus speeding up the
|
||||||
|
migration.
|
||||||
|
|
||||||
|
+SUSE-specific options for Xen: *--max_iters* allows specifying the maximum
|
||||||
|
+number of iterations before final suspend. Default is 2. *--min_remaining*
|
||||||
|
+allows specifying the number of dirty pages before final suspend. Default is 50.
|
||||||
|
+*--abort_if_busy* can be used to abort the migration instead of doing the final
|
||||||
|
+suspend for domUs with busy workloads, to avoid a long suspend-time of the domU.
|
||||||
|
+
|
||||||
|
Running migration can be canceled by interrupting virsh (usually using
|
||||||
|
``Ctrl-C``) or by ``domjobabort`` command sent from another virsh instance.
|
||||||
|
|
||||||
Index: libvirt-6.10.0/include/libvirt/libvirt-domain.h
|
Index: libvirt-6.10.0/include/libvirt/libvirt-domain.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- libvirt-6.10.0.orig/include/libvirt/libvirt-domain.h
|
--- libvirt-6.10.0.orig/include/libvirt/libvirt-domain.h
|
||||||
+++ libvirt-6.10.0/include/libvirt/libvirt-domain.h
|
+++ libvirt-6.10.0/include/libvirt/libvirt-domain.h
|
||||||
@@ -1078,6 +1078,31 @@ typedef enum {
|
@@ -1078,6 +1078,25 @@ typedef enum {
|
||||||
*/
|
*/
|
||||||
# define VIR_MIGRATE_PARAM_TLS_DESTINATION "tls.destination"
|
# define VIR_MIGRATE_PARAM_TLS_DESTINATION "tls.destination"
|
||||||
|
|
||||||
@ -31,12 +58,6 @@ Index: libvirt-6.10.0/include/libvirt/libvirt-domain.h
|
|||||||
+ */
|
+ */
|
||||||
+#define VIR_MIGRATE_PARAM_SUSE_MAX_ITERS "max_iters"
|
+#define VIR_MIGRATE_PARAM_SUSE_MAX_ITERS "max_iters"
|
||||||
+/**
|
+/**
|
||||||
+ * VIR_MIGRATE_PARAM_SUSE_MAX_FACTOR:
|
|
||||||
+ *
|
|
||||||
+ * virDomainMigrate* params field: xc_domain_save max_factor
|
|
||||||
+ */
|
|
||||||
+#define VIR_MIGRATE_PARAM_SUSE_MAX_FACTOR "max_factor"
|
|
||||||
+/**
|
|
||||||
+ * VIR_MIGRATE_PARAM_SUSE_MIN_REMAINING:
|
+ * VIR_MIGRATE_PARAM_SUSE_MIN_REMAINING:
|
||||||
+ *
|
+ *
|
||||||
+ * virDomainMigrate* params field: xc_domain_save min_remaining
|
+ * virDomainMigrate* params field: xc_domain_save min_remaining
|
||||||
@ -66,7 +87,7 @@ Index: libvirt-6.10.0/src/libxl/libxl_driver.c
|
|||||||
|
|
||||||
#ifdef LIBXL_HAVE_NO_SUSPEND_RESUME
|
#ifdef LIBXL_HAVE_NO_SUSPEND_RESUME
|
||||||
virReportUnsupportedError();
|
virReportUnsupportedError();
|
||||||
@@ -6247,6 +6250,18 @@ libxlDomainMigratePerform3Params(virDoma
|
@@ -6247,6 +6250,15 @@ libxlDomainMigratePerform3Params(virDoma
|
||||||
virTypedParamsGetString(params, nparams,
|
virTypedParamsGetString(params, nparams,
|
||||||
VIR_MIGRATE_PARAM_DEST_NAME,
|
VIR_MIGRATE_PARAM_DEST_NAME,
|
||||||
&dname) < 0 ||
|
&dname) < 0 ||
|
||||||
@ -74,9 +95,6 @@ Index: libvirt-6.10.0/src/libxl/libxl_driver.c
|
|||||||
+ VIR_MIGRATE_PARAM_SUSE_MAX_ITERS,
|
+ VIR_MIGRATE_PARAM_SUSE_MAX_ITERS,
|
||||||
+ &props.max_iters) < 0 ||
|
+ &props.max_iters) < 0 ||
|
||||||
+ virTypedParamsGetUInt(params, nparams,
|
+ virTypedParamsGetUInt(params, nparams,
|
||||||
+ VIR_MIGRATE_PARAM_SUSE_MAX_FACTOR,
|
|
||||||
+ &props.max_factor) < 0 ||
|
|
||||||
+ virTypedParamsGetUInt(params, nparams,
|
|
||||||
+ VIR_MIGRATE_PARAM_SUSE_MIN_REMAINING,
|
+ VIR_MIGRATE_PARAM_SUSE_MIN_REMAINING,
|
||||||
+ &props.min_remaining) < 0 ||
|
+ &props.min_remaining) < 0 ||
|
||||||
+ virTypedParamsGetUInt(params, nparams,
|
+ virTypedParamsGetUInt(params, nparams,
|
||||||
@ -85,7 +103,7 @@ Index: libvirt-6.10.0/src/libxl/libxl_driver.c
|
|||||||
virTypedParamsGetString(params, nparams,
|
virTypedParamsGetString(params, nparams,
|
||||||
VIR_MIGRATE_PARAM_URI,
|
VIR_MIGRATE_PARAM_URI,
|
||||||
&uri) < 0)
|
&uri) < 0)
|
||||||
@@ -6261,11 +6276,11 @@ libxlDomainMigratePerform3Params(virDoma
|
@@ -6261,11 +6273,11 @@ libxlDomainMigratePerform3Params(virDoma
|
||||||
|
|
||||||
if ((flags & (VIR_MIGRATE_TUNNELLED | VIR_MIGRATE_PEER2PEER))) {
|
if ((flags & (VIR_MIGRATE_TUNNELLED | VIR_MIGRATE_PEER2PEER))) {
|
||||||
if (libxlDomainMigrationSrcPerformP2P(driver, vm, dom->conn, dom_xml,
|
if (libxlDomainMigrationSrcPerformP2P(driver, vm, dom->conn, dom_xml,
|
||||||
@ -103,7 +121,7 @@ Index: libvirt-6.10.0/src/libxl/libxl_migration.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libvirt-6.10.0.orig/src/libxl/libxl_migration.c
|
--- libvirt-6.10.0.orig/src/libxl/libxl_migration.c
|
||||||
+++ libvirt-6.10.0/src/libxl/libxl_migration.c
|
+++ libvirt-6.10.0/src/libxl/libxl_migration.c
|
||||||
@@ -341,18 +341,39 @@ libxlMigrateDstReceive(virNetSocketPtr s
|
@@ -341,18 +341,38 @@ libxlMigrateDstReceive(virNetSocketPtr s
|
||||||
static int
|
static int
|
||||||
libxlDoMigrateSrcSend(libxlDriverPrivatePtr driver,
|
libxlDoMigrateSrcSend(libxlDriverPrivatePtr driver,
|
||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm,
|
||||||
@ -127,7 +145,6 @@ Index: libvirt-6.10.0/src/libxl/libxl_migration.c
|
|||||||
+ libxl_props.flags |= LIBXL_SUSPEND_LIVE;
|
+ libxl_props.flags |= LIBXL_SUSPEND_LIVE;
|
||||||
+
|
+
|
||||||
+ libxl_props.max_iters = props->max_iters;
|
+ libxl_props.max_iters = props->max_iters;
|
||||||
+ libxl_props.max_factor = props->max_factor;
|
|
||||||
+ libxl_props.min_remaining = props->min_remaining;
|
+ libxl_props.min_remaining = props->min_remaining;
|
||||||
+ if (props->abort_if_busy)
|
+ if (props->abort_if_busy)
|
||||||
+ libxl_props.flags |= LIBXL_SUSPEND_ABORT_IF_BUSY;
|
+ libxl_props.flags |= LIBXL_SUSPEND_ABORT_IF_BUSY;
|
||||||
@ -145,7 +162,7 @@ Index: libvirt-6.10.0/src/libxl/libxl_migration.c
|
|||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
_("Failed to send migration data to destination host"));
|
_("Failed to send migration data to destination host"));
|
||||||
@@ -905,7 +926,7 @@ struct libxlTunnelControl {
|
@@ -905,7 +925,7 @@ struct libxlTunnelControl {
|
||||||
static int
|
static int
|
||||||
libxlMigrationSrcStartTunnel(libxlDriverPrivatePtr driver,
|
libxlMigrationSrcStartTunnel(libxlDriverPrivatePtr driver,
|
||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm,
|
||||||
@ -154,7 +171,7 @@ Index: libvirt-6.10.0/src/libxl/libxl_migration.c
|
|||||||
virStreamPtr st,
|
virStreamPtr st,
|
||||||
struct libxlTunnelControl **tnl)
|
struct libxlTunnelControl **tnl)
|
||||||
{
|
{
|
||||||
@@ -938,7 +959,7 @@ libxlMigrationSrcStartTunnel(libxlDriver
|
@@ -938,7 +958,7 @@ libxlMigrationSrcStartTunnel(libxlDriver
|
||||||
|
|
||||||
virObjectUnlock(vm);
|
virObjectUnlock(vm);
|
||||||
/* Send data to pipe */
|
/* Send data to pipe */
|
||||||
@ -163,7 +180,7 @@ Index: libvirt-6.10.0/src/libxl/libxl_migration.c
|
|||||||
virObjectLock(vm);
|
virObjectLock(vm);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
@@ -974,7 +995,7 @@ libxlDoMigrateSrcP2P(libxlDriverPrivateP
|
@@ -974,7 +994,7 @@ libxlDoMigrateSrcP2P(libxlDriverPrivateP
|
||||||
const char *dconnuri G_GNUC_UNUSED,
|
const char *dconnuri G_GNUC_UNUSED,
|
||||||
const char *dname,
|
const char *dname,
|
||||||
const char *uri,
|
const char *uri,
|
||||||
@ -172,7 +189,7 @@ Index: libvirt-6.10.0/src/libxl/libxl_migration.c
|
|||||||
{
|
{
|
||||||
virDomainPtr ddomain = NULL;
|
virDomainPtr ddomain = NULL;
|
||||||
virTypedParameterPtr params = NULL;
|
virTypedParameterPtr params = NULL;
|
||||||
@@ -1019,11 +1040,11 @@ libxlDoMigrateSrcP2P(libxlDriverPrivateP
|
@@ -1019,11 +1039,11 @@ libxlDoMigrateSrcP2P(libxlDriverPrivateP
|
||||||
/* We don't require the destination to have P2P support
|
/* We don't require the destination to have P2P support
|
||||||
* as it looks to be normal migration from the receiver perspective.
|
* as it looks to be normal migration from the receiver perspective.
|
||||||
*/
|
*/
|
||||||
@ -186,7 +203,7 @@ Index: libvirt-6.10.0/src/libxl/libxl_migration.c
|
|||||||
if (!(st = virStreamNew(dconn, 0)))
|
if (!(st = virStreamNew(dconn, 0)))
|
||||||
goto confirm;
|
goto confirm;
|
||||||
ret = dconn->driver->domainMigratePrepareTunnel3Params
|
ret = dconn->driver->domainMigratePrepareTunnel3Params
|
||||||
@@ -1037,7 +1058,7 @@ libxlDoMigrateSrcP2P(libxlDriverPrivateP
|
@@ -1037,7 +1057,7 @@ libxlDoMigrateSrcP2P(libxlDriverPrivateP
|
||||||
if (ret == -1)
|
if (ret == -1)
|
||||||
goto confirm;
|
goto confirm;
|
||||||
|
|
||||||
@ -195,7 +212,7 @@ Index: libvirt-6.10.0/src/libxl/libxl_migration.c
|
|||||||
if (uri_out) {
|
if (uri_out) {
|
||||||
if (virTypedParamsReplaceString(¶ms, &nparams,
|
if (virTypedParamsReplaceString(¶ms, &nparams,
|
||||||
VIR_MIGRATE_PARAM_URI, uri_out) < 0) {
|
VIR_MIGRATE_PARAM_URI, uri_out) < 0) {
|
||||||
@@ -1052,11 +1073,11 @@ libxlDoMigrateSrcP2P(libxlDriverPrivateP
|
@@ -1052,11 +1072,11 @@ libxlDoMigrateSrcP2P(libxlDriverPrivateP
|
||||||
}
|
}
|
||||||
|
|
||||||
VIR_DEBUG("Perform3 uri=%s", NULLSTR(uri_out));
|
VIR_DEBUG("Perform3 uri=%s", NULLSTR(uri_out));
|
||||||
@ -210,7 +227,7 @@ Index: libvirt-6.10.0/src/libxl/libxl_migration.c
|
|||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
notify_source = false;
|
notify_source = false;
|
||||||
virErrorPreserveLast(&orig_err);
|
virErrorPreserveLast(&orig_err);
|
||||||
@@ -1091,7 +1112,7 @@ libxlDoMigrateSrcP2P(libxlDriverPrivateP
|
@@ -1091,7 +1111,7 @@ libxlDoMigrateSrcP2P(libxlDriverPrivateP
|
||||||
confirm:
|
confirm:
|
||||||
if (notify_source) {
|
if (notify_source) {
|
||||||
VIR_DEBUG("Confirm3 cancelled=%d vm=%p", cancelled, vm);
|
VIR_DEBUG("Confirm3 cancelled=%d vm=%p", cancelled, vm);
|
||||||
@ -219,7 +236,7 @@ Index: libvirt-6.10.0/src/libxl/libxl_migration.c
|
|||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
VIR_WARN("Guest %s probably left in 'paused' state on source",
|
VIR_WARN("Guest %s probably left in 'paused' state on source",
|
||||||
@@ -1099,7 +1120,7 @@ libxlDoMigrateSrcP2P(libxlDriverPrivateP
|
@@ -1099,7 +1119,7 @@ libxlDoMigrateSrcP2P(libxlDriverPrivateP
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
@ -228,7 +245,7 @@ Index: libvirt-6.10.0/src/libxl/libxl_migration.c
|
|||||||
libxlMigrationSrcStopTunnel(tc);
|
libxlMigrationSrcStopTunnel(tc);
|
||||||
virObjectUnref(st);
|
virObjectUnref(st);
|
||||||
}
|
}
|
||||||
@@ -1143,7 +1164,7 @@ libxlDomainMigrationSrcPerformP2P(libxlD
|
@@ -1143,7 +1163,7 @@ libxlDomainMigrationSrcPerformP2P(libxlD
|
||||||
const char *dconnuri,
|
const char *dconnuri,
|
||||||
const char *uri_str G_GNUC_UNUSED,
|
const char *uri_str G_GNUC_UNUSED,
|
||||||
const char *dname,
|
const char *dname,
|
||||||
@ -237,7 +254,7 @@ Index: libvirt-6.10.0/src/libxl/libxl_migration.c
|
|||||||
{
|
{
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
bool useParams;
|
bool useParams;
|
||||||
@@ -1178,7 +1199,7 @@ libxlDomainMigrationSrcPerformP2P(libxlD
|
@@ -1178,7 +1198,7 @@ libxlDomainMigrationSrcPerformP2P(libxlD
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = libxlDoMigrateSrcP2P(driver, vm, sconn, xmlin, dconn, dconnuri,
|
ret = libxlDoMigrateSrcP2P(driver, vm, sconn, xmlin, dconn, dconnuri,
|
||||||
@ -246,7 +263,7 @@ Index: libvirt-6.10.0/src/libxl/libxl_migration.c
|
|||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
/*
|
/*
|
||||||
@@ -1205,7 +1226,7 @@ libxlDomainMigrationSrcPerform(libxlDriv
|
@@ -1205,7 +1225,7 @@ libxlDomainMigrationSrcPerform(libxlDriv
|
||||||
const char *dconnuri G_GNUC_UNUSED,
|
const char *dconnuri G_GNUC_UNUSED,
|
||||||
const char *uri_str,
|
const char *uri_str,
|
||||||
const char *dname G_GNUC_UNUSED,
|
const char *dname G_GNUC_UNUSED,
|
||||||
@ -255,7 +272,7 @@ Index: libvirt-6.10.0/src/libxl/libxl_migration.c
|
|||||||
{
|
{
|
||||||
libxlDomainObjPrivatePtr priv = vm->privateData;
|
libxlDomainObjPrivatePtr priv = vm->privateData;
|
||||||
char *hostname = NULL;
|
char *hostname = NULL;
|
||||||
@@ -1241,7 +1262,7 @@ libxlDomainMigrationSrcPerform(libxlDriv
|
@@ -1241,7 +1261,7 @@ libxlDomainMigrationSrcPerform(libxlDriv
|
||||||
|
|
||||||
/* suspend vm and send saved data to dst through socket fd */
|
/* suspend vm and send saved data to dst through socket fd */
|
||||||
virObjectUnlock(vm);
|
virObjectUnlock(vm);
|
||||||
@ -268,25 +285,23 @@ Index: libvirt-6.10.0/src/libxl/libxl_migration.h
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libvirt-6.10.0.orig/src/libxl/libxl_migration.h
|
--- libvirt-6.10.0.orig/src/libxl/libxl_migration.h
|
||||||
+++ libvirt-6.10.0/src/libxl/libxl_migration.h
|
+++ libvirt-6.10.0/src/libxl/libxl_migration.h
|
||||||
@@ -35,6 +35,10 @@
|
@@ -35,6 +35,9 @@
|
||||||
VIR_MIGRATE_PARAM_URI, VIR_TYPED_PARAM_STRING, \
|
VIR_MIGRATE_PARAM_URI, VIR_TYPED_PARAM_STRING, \
|
||||||
VIR_MIGRATE_PARAM_DEST_NAME, VIR_TYPED_PARAM_STRING, \
|
VIR_MIGRATE_PARAM_DEST_NAME, VIR_TYPED_PARAM_STRING, \
|
||||||
VIR_MIGRATE_PARAM_DEST_XML, VIR_TYPED_PARAM_STRING, \
|
VIR_MIGRATE_PARAM_DEST_XML, VIR_TYPED_PARAM_STRING, \
|
||||||
+ VIR_MIGRATE_PARAM_SUSE_MAX_ITERS, VIR_TYPED_PARAM_UINT, \
|
+ VIR_MIGRATE_PARAM_SUSE_MAX_ITERS, VIR_TYPED_PARAM_UINT, \
|
||||||
+ VIR_MIGRATE_PARAM_SUSE_MAX_FACTOR, VIR_TYPED_PARAM_UINT, \
|
|
||||||
+ VIR_MIGRATE_PARAM_SUSE_MIN_REMAINING, VIR_TYPED_PARAM_UINT, \
|
+ VIR_MIGRATE_PARAM_SUSE_MIN_REMAINING, VIR_TYPED_PARAM_UINT, \
|
||||||
+ VIR_MIGRATE_PARAM_SUSE_ABORT_IF_BUSY, VIR_TYPED_PARAM_UINT, \
|
+ VIR_MIGRATE_PARAM_SUSE_ABORT_IF_BUSY, VIR_TYPED_PARAM_UINT, \
|
||||||
NULL
|
NULL
|
||||||
|
|
||||||
char *
|
char *
|
||||||
@@ -66,6 +70,14 @@ libxlDomainMigrationDstPrepare(virConnec
|
@@ -66,6 +69,13 @@ libxlDomainMigrationDstPrepare(virConnec
|
||||||
int cookieinlen,
|
int cookieinlen,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
+typedef struct {
|
+typedef struct {
|
||||||
+ unsigned int virFlags;
|
+ unsigned int virFlags;
|
||||||
+ unsigned int max_iters;
|
+ unsigned int max_iters;
|
||||||
+ unsigned int max_factor;
|
|
||||||
+ unsigned int min_remaining;
|
+ unsigned int min_remaining;
|
||||||
+ unsigned int abort_if_busy;
|
+ unsigned int abort_if_busy;
|
||||||
+} libxlDomainMigrationProps;
|
+} libxlDomainMigrationProps;
|
||||||
@ -294,7 +309,7 @@ Index: libvirt-6.10.0/src/libxl/libxl_migration.h
|
|||||||
int
|
int
|
||||||
libxlDomainMigrationSrcPerformP2P(libxlDriverPrivatePtr driver,
|
libxlDomainMigrationSrcPerformP2P(libxlDriverPrivatePtr driver,
|
||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm,
|
||||||
@@ -74,7 +86,7 @@ libxlDomainMigrationSrcPerformP2P(libxlD
|
@@ -74,7 +84,7 @@ libxlDomainMigrationSrcPerformP2P(libxlD
|
||||||
const char *dconnuri,
|
const char *dconnuri,
|
||||||
const char *uri_str,
|
const char *uri_str,
|
||||||
const char *dname,
|
const char *dname,
|
||||||
@ -303,7 +318,7 @@ Index: libvirt-6.10.0/src/libxl/libxl_migration.h
|
|||||||
|
|
||||||
int
|
int
|
||||||
libxlDomainMigrationSrcPerform(libxlDriverPrivatePtr driver,
|
libxlDomainMigrationSrcPerform(libxlDriverPrivatePtr driver,
|
||||||
@@ -83,7 +95,7 @@ libxlDomainMigrationSrcPerform(libxlDriv
|
@@ -83,7 +93,7 @@ libxlDomainMigrationSrcPerform(libxlDriv
|
||||||
const char *dconnuri,
|
const char *dconnuri,
|
||||||
const char *uri_str,
|
const char *uri_str,
|
||||||
const char *dname,
|
const char *dname,
|
||||||
@ -316,17 +331,13 @@ Index: libvirt-6.10.0/tools/virsh-domain.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libvirt-6.10.0.orig/tools/virsh-domain.c
|
--- libvirt-6.10.0.orig/tools/virsh-domain.c
|
||||||
+++ libvirt-6.10.0/tools/virsh-domain.c
|
+++ libvirt-6.10.0/tools/virsh-domain.c
|
||||||
@@ -10707,6 +10707,22 @@ static const vshCmdOptDef opts_migrate[]
|
@@ -10707,6 +10707,18 @@ static const vshCmdOptDef opts_migrate[]
|
||||||
.type = VSH_OT_STRING,
|
.type = VSH_OT_STRING,
|
||||||
.help = N_("override the destination host name used for TLS verification")
|
.help = N_("override the destination host name used for TLS verification")
|
||||||
},
|
},
|
||||||
+ {.name = "max_iters",
|
+ {.name = "max_iters",
|
||||||
+ .type = VSH_OT_INT,
|
+ .type = VSH_OT_INT,
|
||||||
+ .help = N_("SUSE libxl: Number of iterations before final suspend (default: 5).")
|
+ .help = N_("SUSE libxl: Number of iterations before final suspend (default: 2).")
|
||||||
+ },
|
|
||||||
+ {.name = "max_factor",
|
|
||||||
+ .type = VSH_OT_INT,
|
|
||||||
+ .help = N_("SUSE libxl: Max amount of memory to transfer before final suspend (default: 3*RAM).")
|
|
||||||
+ },
|
+ },
|
||||||
+ {.name = "min_remaining",
|
+ {.name = "min_remaining",
|
||||||
+ .type = VSH_OT_INT,
|
+ .type = VSH_OT_INT,
|
||||||
@ -339,7 +350,7 @@ Index: libvirt-6.10.0/tools/virsh-domain.c
|
|||||||
{.name = NULL}
|
{.name = NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -10727,6 +10743,7 @@ doMigrate(void *opaque)
|
@@ -10727,6 +10739,7 @@ doMigrate(void *opaque)
|
||||||
unsigned long long ullOpt = 0;
|
unsigned long long ullOpt = 0;
|
||||||
int rv;
|
int rv;
|
||||||
virConnectPtr dconn = data->dconn;
|
virConnectPtr dconn = data->dconn;
|
||||||
@ -347,7 +358,7 @@ Index: libvirt-6.10.0/tools/virsh-domain.c
|
|||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
sigset_t sigmask, oldsigmask;
|
sigset_t sigmask, oldsigmask;
|
||||||
|
|
||||||
@@ -10857,6 +10874,27 @@ doMigrate(void *opaque)
|
@@ -10857,6 +10870,22 @@ doMigrate(void *opaque)
|
||||||
goto save_error;
|
goto save_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -356,11 +367,6 @@ Index: libvirt-6.10.0/tools/virsh-domain.c
|
|||||||
+ VIR_MIGRATE_PARAM_SUSE_MAX_ITERS, uint_opt) < 0)
|
+ VIR_MIGRATE_PARAM_SUSE_MAX_ITERS, uint_opt) < 0)
|
||||||
+ goto save_error;
|
+ goto save_error;
|
||||||
+ }
|
+ }
|
||||||
+ if (vshCommandOptUInt(ctl, cmd, "max_factor", &uint_opt) > 0 && uint_opt) {
|
|
||||||
+ if (virTypedParamsAddUInt(¶ms, &nparams, &maxparams,
|
|
||||||
+ VIR_MIGRATE_PARAM_SUSE_MAX_FACTOR, uint_opt) < 0)
|
|
||||||
+ goto save_error;
|
|
||||||
+ }
|
|
||||||
+ if (vshCommandOptUInt(ctl, cmd, "min_remaining", &uint_opt) > 0 && uint_opt) {
|
+ if (vshCommandOptUInt(ctl, cmd, "min_remaining", &uint_opt) > 0 && uint_opt) {
|
||||||
+ if (virTypedParamsAddUInt(¶ms, &nparams, &maxparams,
|
+ if (virTypedParamsAddUInt(¶ms, &nparams, &maxparams,
|
||||||
+ VIR_MIGRATE_PARAM_SUSE_MIN_REMAINING, uint_opt) < 0)
|
+ VIR_MIGRATE_PARAM_SUSE_MIN_REMAINING, uint_opt) < 0)
|
||||||
@ -375,32 +381,3 @@ Index: libvirt-6.10.0/tools/virsh-domain.c
|
|||||||
if (vshCommandOptStringReq(ctl, cmd, "xml", &opt) < 0)
|
if (vshCommandOptStringReq(ctl, cmd, "xml", &opt) < 0)
|
||||||
goto out;
|
goto out;
|
||||||
if (opt) {
|
if (opt) {
|
||||||
Index: libvirt-6.10.0/docs/manpages/virsh.rst
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-6.10.0.orig/docs/manpages/virsh.rst
|
|
||||||
+++ libvirt-6.10.0/docs/manpages/virsh.rst
|
|
||||||
@@ -3134,7 +3134,8 @@ migrate
|
|
||||||
[--postcopy-bandwidth bandwidth]
|
|
||||||
[--parallel [--parallel-connections connections]]
|
|
||||||
[--bandwidth bandwidth] [--tls-destination hostname]
|
|
||||||
- [--disks-uri URI]
|
|
||||||
+ [--disks-uri URI] [--max_iters num] [--max_factor num]
|
|
||||||
+ [--min_remaining num] [--abort_if_busy]
|
|
||||||
|
|
||||||
Migrate domain to another host. Add *--live* for live migration; <--p2p>
|
|
||||||
for peer-2-peer migration; *--direct* for direct migration; or *--tunnelled*
|
|
||||||
@@ -3240,6 +3241,14 @@ parallel connections. The number of such
|
|
||||||
network link between the source and the target and thus speeding up the
|
|
||||||
migration.
|
|
||||||
|
|
||||||
+SUSE-specific options for Xen: *--max_iters* allows specifying the maximum
|
|
||||||
+number of iterations before final suspend. Default is 5. *--max_factor*
|
|
||||||
+allows specifying the maximum amount of memory to transfer before final suspend.
|
|
||||||
+Default is (3*VM memory size). *--min_remaining* allows specifying the
|
|
||||||
+number of dirty pages before final suspend. Default is 50. *--abort_if_busy*
|
|
||||||
+can be used to abort the migration instead of doing the final suspend for VMs
|
|
||||||
+with busy workloads.
|
|
||||||
+
|
|
||||||
Running migration can be canceled by interrupting virsh (usually using
|
|
||||||
``Ctrl-C``) or by ``domjobabort`` command sent from another virsh instance.
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user