[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 08/11] multifd: Add capability to enable/disable zero_page
From: |
Juan Quintela |
Subject: |
[PATCH v2 08/11] multifd: Add capability to enable/disable zero_page |
Date: |
Mon, 30 Jan 2023 09:09:53 +0100 |
We have to enable it by default until we introduce the new code.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
Change it to a capability. As capabilities are off by default, have
to change MULTIFD_ZERO_PAGE to MAIN_ZERO_PAGE, so it is false for
default, and true for older versions.
---
qapi/migration.json | 8 +++++++-
migration/migration.h | 1 +
hw/core/machine.c | 1 +
migration/migration.c | 13 ++++++++++++-
4 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/qapi/migration.json b/qapi/migration.json
index 88ecf86ac8..ac5bc071a9 100644
--- a/qapi/migration.json
+++ b/qapi/migration.json
@@ -472,12 +472,18 @@
# Requires that QEMU be permitted to use locked memory
# for guest RAM pages.
# (since 7.1)
+#
# @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)
#
+# @main-zero-page: If enabled, the detection of zero pages will be
+# done on the main thread. Otherwise it is done on
+# the multifd threads.
+# (since 8.0)
+#
# Features:
# @unstable: Members @x-colo and @x-ignore-shared are experimental.
#
@@ -492,7 +498,7 @@
'dirty-bitmaps', 'postcopy-blocktime', 'late-block-activate',
{ 'name': 'x-ignore-shared', 'features': [ 'unstable' ] },
'validate-uuid', 'background-snapshot',
- 'zero-copy-send', 'postcopy-preempt'] }
+ 'zero-copy-send', 'postcopy-preempt', 'main-zero-page'] }
##
# @MigrationCapabilityStatus:
diff --git a/migration/migration.h b/migration/migration.h
index ae4ffd3454..c38a0baf10 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -408,6 +408,7 @@ int migrate_multifd_channels(void);
MultiFDCompression migrate_multifd_compression(void);
int migrate_multifd_zlib_level(void);
int migrate_multifd_zstd_level(void);
+bool migrate_use_main_zero_page(void);
#ifdef CONFIG_LINUX
bool migrate_use_zero_copy_send(void);
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 616f3a207c..97149e2de3 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -52,6 +52,7 @@ const size_t hw_compat_7_1_len = G_N_ELEMENTS(hw_compat_7_1);
GlobalProperty hw_compat_7_0[] = {
{ "arm-gicv3-common", "force-8-bit-prio", "on" },
{ "nvme-ns", "eui64-default", "on"},
+ { "migration", "main-zero-page", "true" },
};
const size_t hw_compat_7_0_len = G_N_ELEMENTS(hw_compat_7_0);
diff --git a/migration/migration.c b/migration/migration.c
index d261c7d16d..ab86c6601d 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -164,7 +164,8 @@ INITIALIZE_MIGRATE_CAPS_SET(check_caps_background_snapshot,
MIGRATION_CAPABILITY_XBZRLE,
MIGRATION_CAPABILITY_X_COLO,
MIGRATION_CAPABILITY_VALIDATE_UUID,
- MIGRATION_CAPABILITY_ZERO_COPY_SEND);
+ MIGRATION_CAPABILITY_ZERO_COPY_SEND,
+ MIGRATION_CAPABILITY_MAIN_ZERO_PAGE);
/* When we add fault tolerance, we could have several
migrations at once. For now we don't need to add
@@ -2603,6 +2604,14 @@ bool migrate_use_multifd(void)
return s->enabled_capabilities[MIGRATION_CAPABILITY_MULTIFD];
}
+bool migrate_use_main_zero_page(void)
+{
+ MigrationState *s = migrate_get_current();
+
+ /* We will enable this when we add the right code. */
+ return true ||
s->enabled_capabilities[MIGRATION_CAPABILITY_MAIN_ZERO_PAGE];
+}
+
bool migrate_pause_before_switchover(void)
{
MigrationState *s;
@@ -4425,6 +4434,8 @@ static Property migration_properties[] = {
DEFINE_PROP_MIG_CAP("x-zero-copy-send",
MIGRATION_CAPABILITY_ZERO_COPY_SEND),
#endif
+ DEFINE_PROP_MIG_CAP("main-zero-page",
+ MIGRATION_CAPABILITY_MAIN_ZERO_PAGE),
DEFINE_PROP_END_OF_LIST(),
};
--
2.39.1
- [PATCH v2 00/11] Multifd zero page support, Juan Quintela, 2023/01/30
- [PATCH v2 01/11] migration: Update atomic stats out of the mutex, Juan Quintela, 2023/01/30
- [PATCH v2 02/11] migration: Make multifd_bytes atomic, Juan Quintela, 2023/01/30
- [PATCH v2 03/11] multifd: We already account for this packet on the multifd thread, Juan Quintela, 2023/01/30
- [PATCH v2 04/11] multifd: Count the number of bytes sent correctly, Juan Quintela, 2023/01/30
- [PATCH v2 05/11] migration: Make ram_save_target_page() a pointer, Juan Quintela, 2023/01/30
- [PATCH v2 06/11] multifd: Make flags field thread local, Juan Quintela, 2023/01/30
- [PATCH v2 07/11] multifd: Prepare to send a packet without the mutex held, Juan Quintela, 2023/01/30
- [PATCH v2 08/11] multifd: Add capability to enable/disable zero_page,
Juan Quintela <=
- [PATCH v2 10/11] multifd: Zero pages transmission, Juan Quintela, 2023/01/30
- [PATCH v2 09/11] multifd: Support for zero pages transmission, Juan Quintela, 2023/01/30
- [PATCH v2 11/11] So we use multifd to transmit zero pages., Juan Quintela, 2023/01/30