[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 10/21] migration: Add postcopy-preempt capability
From: |
Peter Xu |
Subject: |
[PATCH v5 10/21] migration: Add postcopy-preempt capability |
Date: |
Mon, 25 Apr 2022 19:38:36 -0400 |
Firstly, postcopy already preempts precopy due to the fact that we do
unqueue_page() first before looking into dirty bits.
However that's not enough, e.g., when there're host huge page enabled, when
sending a precopy huge page, a postcopy request needs to wait until the whole
huge page that is sending to finish. That could introduce quite some delay,
the bigger the huge page is the larger delay it'll bring.
This patch adds a new capability to allow postcopy requests to preempt existing
precopy page during sending a huge page, so that postcopy requests can be
serviced even faster.
Meanwhile to send it even faster, bypass the precopy stream by providing a
standalone postcopy socket for sending requested pages.
Since the new behavior will not be compatible with the old behavior, this will
not be the default, it's enabled only when the new capability is set on both
src/dst QEMUs.
This patch only adds the capability itself, the logic will be added in follow
up patches.
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Peter Xu <peterx@redhat.com>
---
migration/migration.c | 23 +++++++++++++++++++++++
migration/migration.h | 1 +
qapi/migration.json | 8 +++++++-
3 files changed, 31 insertions(+), 1 deletion(-)
diff --git a/migration/migration.c b/migration/migration.c
index 5a31b23bd6..75d9185c3a 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1236,6 +1236,11 @@ static bool migrate_caps_check(bool *cap_list,
error_setg(errp, "Postcopy is not compatible with ignore-shared");
return false;
}
+
+ if (cap_list[MIGRATION_CAPABILITY_MULTIFD]) {
+ error_setg(errp, "Multifd is not supported in postcopy");
+ return false;
+ }
}
if (cap_list[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT]) {
@@ -1279,6 +1284,13 @@ static bool migrate_caps_check(bool *cap_list,
return false;
}
+ if (cap_list[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT]) {
+ if (!cap_list[MIGRATION_CAPABILITY_POSTCOPY_RAM]) {
+ error_setg(errp, "Postcopy preempt requires postcopy-ram");
+ return false;
+ }
+ }
+
return true;
}
@@ -2626,6 +2638,15 @@ bool migrate_background_snapshot(void)
return s->enabled_capabilities[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT];
}
+bool migrate_postcopy_preempt(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->enabled_capabilities[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT];
+}
+
/* migration thread support */
/*
* Something bad happened to the RP stream, mark an error
@@ -4236,6 +4257,8 @@ static Property migration_properties[] = {
DEFINE_PROP_MIG_CAP("x-compress", MIGRATION_CAPABILITY_COMPRESS),
DEFINE_PROP_MIG_CAP("x-events", MIGRATION_CAPABILITY_EVENTS),
DEFINE_PROP_MIG_CAP("x-postcopy-ram", MIGRATION_CAPABILITY_POSTCOPY_RAM),
+ DEFINE_PROP_MIG_CAP("x-postcopy-preempt",
+ MIGRATION_CAPABILITY_POSTCOPY_PREEMPT),
DEFINE_PROP_MIG_CAP("x-colo", MIGRATION_CAPABILITY_X_COLO),
DEFINE_PROP_MIG_CAP("x-release-ram", MIGRATION_CAPABILITY_RELEASE_RAM),
DEFINE_PROP_MIG_CAP("x-block", MIGRATION_CAPABILITY_BLOCK),
diff --git a/migration/migration.h b/migration/migration.h
index a863032b71..af4bcb19c2 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -394,6 +394,7 @@ int migrate_decompress_threads(void);
bool migrate_use_events(void);
bool migrate_postcopy_blocktime(void);
bool migrate_background_snapshot(void);
+bool migrate_postcopy_preempt(void);
/* Sending on the return path - generic and then for each message type */
void migrate_send_rp_shut(MigrationIncomingState *mis,
diff --git a/qapi/migration.json b/qapi/migration.json
index 409eb086a2..f381a94c98 100644
--- a/qapi/migration.json
+++ b/qapi/migration.json
@@ -463,6 +463,12 @@
# procedure starts. The VM RAM is saved with running VM.
# (since 6.0)
#
+# @postcopy-preempt: If enabled, the migration process will allow postcopy
+# requests to preempt precopy stream, so postcopy requests
+# will be handled faster. This is a performance feature and
+# should not affect the correctness of postcopy migration.
+# (since 7.1)
+#
# Features:
# @unstable: Members @x-colo and @x-ignore-shared are experimental.
#
@@ -476,7 +482,7 @@
'block', 'return-path', 'pause-before-switchover', 'multifd',
'dirty-bitmaps', 'postcopy-blocktime', 'late-block-activate',
{ 'name': 'x-ignore-shared', 'features': [ 'unstable' ] },
- 'validate-uuid', 'background-snapshot'] }
+ 'validate-uuid', 'background-snapshot', 'postcopy-preempt'] }
##
# @MigrationCapabilityStatus:
--
2.32.0
- [PATCH v5 00/21] migration: Postcopy Preemption, Peter Xu, 2022/04/25
- [PATCH v5 02/21] tests: add more helper macros for creating TLS x509 certs, Peter Xu, 2022/04/25
- [PATCH v5 01/21] tests: fix encoding of IP addresses in x509 certs, Peter Xu, 2022/04/25
- [PATCH v5 05/21] tests: convert XBZRLE migration test to use common helper, Peter Xu, 2022/04/25
- [PATCH v5 07/21] tests: add multifd migration tests of TLS with PSK credentials, Peter Xu, 2022/04/25
- [PATCH v5 03/21] tests: add migration tests of TLS with PSK credentials, Peter Xu, 2022/04/25
- [PATCH v5 04/21] tests: add migration tests of TLS with x509 credentials, Peter Xu, 2022/04/25
- [PATCH v5 06/21] tests: convert multifd migration tests to use common helper, Peter Xu, 2022/04/25
- [PATCH v5 08/21] tests: add multifd migration tests of TLS with x509 credentials, Peter Xu, 2022/04/25
- [PATCH v5 09/21] tests: ensure migration status isn't reported as failed, Peter Xu, 2022/04/25
- [PATCH v5 10/21] migration: Add postcopy-preempt capability,
Peter Xu <=
- [PATCH v5 11/21] migration: Postcopy preemption preparation on channel creation, Peter Xu, 2022/04/25
- [PATCH v5 12/21] migration: Postcopy preemption enablement, Peter Xu, 2022/04/25
- [PATCH v5 14/21] migration: Create the postcopy preempt channel asynchronously, Peter Xu, 2022/04/25
- [PATCH v5 13/21] migration: Postcopy recover with preempt enabled, Peter Xu, 2022/04/25
- [PATCH v5 15/21] migration: Parameter x-postcopy-preempt-break-huge, Peter Xu, 2022/04/25
- [PATCH v5 17/21] migration: Export tls-[creds|hostname|authz] params to cmdline too, Peter Xu, 2022/04/25
- [PATCH v5 18/21] migration: Enable TLS for preempt channel, Peter Xu, 2022/04/25
- [PATCH v5 16/21] migration: Add helpers to detect TLS capability, Peter Xu, 2022/04/25
- [PATCH v5 19/21] tests: Add postcopy tls migration test, Peter Xu, 2022/04/25
- [PATCH v5 21/21] tests: Add postcopy preempt tests, Peter Xu, 2022/04/25