* [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties
@ 2023-04-20 13:39 Juan Quintela
2023-04-20 13:39 ` [PATCH v2 01/43] migration: move migration_global_dump() to migration-hmp-cmds.c Juan Quintela
` (42 more replies)
0 siblings, 43 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Hi
In this v2:
- the first two patches are included on the last pull request.
- Changed copyright from Anthony to Orit (thanks David)
Some archeology required.
- Get all the reviews by from Vladimir.
- Rebased on top of my last pull request.
The first two patches don't belong in this series, but without them I
got lots of confilcts if you try to use the series. That two patches
are independently on the list.
Please review.
[v1]
This series move to options.c:
- all migration capabilities code
- all migration parameters code
- all properties code
- all qmp commands that only touch the previous
And once there:
- sort of functions
- make consistent and coherent all the functions naming/typing
- create accessors for the parameters/capabilties that don't exist
- more cleanups here and there.
Todo:
- There is still capabilities code on savevm.c, but I want this in
before moving that code to options.c, but still needs more thought
for my part. I.e. should I put vmstate sections in options.c, or
should I create new functions to access the capabilities in savevm.c.
Please review.
Juan Quintela (43):
migration: move migration_global_dump() to migration-hmp-cmds.c
spice: move client_migrate_info command to ui/
migration: Create migration_cap_set()
migration: Create options.c
migration: Move migrate_colo_enabled() to options.c
migration: Move migrate_use_compression() to options.c
migration: Move migrate_use_events() to options.c
migration: Move migrate_use_multifd() to options.c
migration: Move migrate_use_zero_copy_send() to options.c
migration: Move migrate_use_xbzrle() to options.c
migration: Move migrate_use_block() to options.c
migration: Move migrate_use_return() to options.c
migration: Create migrate_rdma_pin_all() function
migration: Move migrate_caps_check() to options.c
migration: Move qmp_query_migrate_capabilities() to options.c
migration: Move qmp_migrate_set_capabilities() to options.c
migration: Move migrate_cap_set() to options.c
migration: Move parameters functions to option.c
migration: Use migrate_max_postcopy_bandwidth()
migration: Move migrate_use_block_incremental() to option.c
migration: Create migrate_throttle_trigger_threshold()
migration: Create migrate_checkpoint_delay()
migration: Create migrate_max_cpu_throttle()
migration: Move migrate_announce_params() to option.c
migration: Create migrate_cpu_throttle_initial() to option.c
migration: Create migrate_cpu_throttle_increment() function
migration: Create migrate_cpu_throttle_tailslow() function
migration: Move migrate_use_tls() to options.c
migration: Move migrate_postcopy() to options.c
migration: Create migrate_max_bandwidth() function
migration: Move qmp_query_migrate_parameters() to options.c
migration: Move qmp_migrate_set_parameters() to options.c
migration: Create migrate_params_init() function
migration: Make all functions check have the same format
migration: Create migrate_downtime_limit() function
migration: Move migrate_set_block_incremental() to options.c
migration: Move block_cleanup_parameters() to options.c
migration: Remove MigrationState from block_cleanup_parameters()
migration: Create migrate_tls_creds() function
migration: Create migrate_tls_authz() function
migration: Create migrate_tls_hostname() function
migration: Create migrate_block_bitmap_mapping() function
migration: Move migration_properties to options.c
hw/virtio/virtio-balloon.c | 1 +
include/migration/misc.h | 1 -
migration/block-dirty-bitmap.c | 15 +-
migration/block.c | 5 +-
migration/colo.c | 6 +-
migration/meson.build | 1 +
migration/migration-hmp-cmds.c | 40 +-
migration/migration.c | 1352 +-------------------------------
migration/migration.h | 42 -
migration/multifd-zlib.c | 1 +
migration/multifd-zstd.c | 1 +
migration/multifd.c | 24 +-
migration/options.c | 1318 +++++++++++++++++++++++++++++++
migration/options.h | 106 +++
migration/postcopy-ram.c | 1 +
migration/ram.c | 43 +-
migration/rdma.c | 12 +-
migration/savevm.c | 3 +-
migration/socket.c | 5 +-
migration/tls.c | 23 +-
qapi/migration.json | 28 -
qapi/ui.json | 28 +
ui/ui-hmp-cmds.c | 17 +
ui/ui-qmp-cmds.c | 29 +
24 files changed, 1619 insertions(+), 1483 deletions(-)
create mode 100644 migration/options.c
create mode 100644 migration/options.h
--
2.39.2
^ permalink raw reply [flat|nested] 65+ messages in thread
* [PATCH v2 01/43] migration: move migration_global_dump() to migration-hmp-cmds.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 02/43] spice: move client_migrate_info command to ui/ Juan Quintela
` (41 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
It is only used there, so we can make it static.
Once there, remove spice.h that it is not used.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
fix David Edmonson ui/qemu-spice.h unintended removal
---
include/migration/misc.h | 1 -
migration/migration-hmp-cmds.c | 22 +++++++++++++++++++++-
migration/migration.c | 19 -------------------
3 files changed, 21 insertions(+), 21 deletions(-)
diff --git a/include/migration/misc.h b/include/migration/misc.h
index 8b49841016..5ebe13b4b9 100644
--- a/include/migration/misc.h
+++ b/include/migration/misc.h
@@ -66,7 +66,6 @@ bool migration_has_finished(MigrationState *);
bool migration_has_failed(MigrationState *);
/* ...and after the device transmission */
bool migration_in_postcopy_after_devices(MigrationState *);
-void migration_global_dump(Monitor *mon);
/* True if incoming migration entered POSTCOPY_INCOMING_DISCARD */
bool migration_in_incoming_postcopy(void);
/* True if incoming migration entered POSTCOPY_INCOMING_ADVISE */
diff --git a/migration/migration-hmp-cmds.c b/migration/migration-hmp-cmds.c
index 72519ea99f..71da91967a 100644
--- a/migration/migration-hmp-cmds.c
+++ b/migration/migration-hmp-cmds.c
@@ -15,7 +15,6 @@
#include "qemu/osdep.h"
#include "block/qapi.h"
-#include "migration/misc.h"
#include "migration/snapshot.h"
#include "monitor/hmp.h"
#include "monitor/monitor.h"
@@ -30,6 +29,27 @@
#include "qemu/sockets.h"
#include "sysemu/runstate.h"
#include "ui/qemu-spice.h"
+#include "sysemu/sysemu.h"
+#include "migration.h"
+
+static void migration_global_dump(Monitor *mon)
+{
+ MigrationState *ms = migrate_get_current();
+
+ monitor_printf(mon, "globals:\n");
+ monitor_printf(mon, "store-global-state: %s\n",
+ ms->store_global_state ? "on" : "off");
+ monitor_printf(mon, "only-migratable: %s\n",
+ only_migratable ? "on" : "off");
+ monitor_printf(mon, "send-configuration: %s\n",
+ ms->send_configuration ? "on" : "off");
+ monitor_printf(mon, "send-section-footer: %s\n",
+ ms->send_section_footer ? "on" : "off");
+ monitor_printf(mon, "decompress-error-check: %s\n",
+ ms->decompress_error_check ? "on" : "off");
+ monitor_printf(mon, "clear-bitmap-shift: %u\n",
+ ms->clear_bitmap_shift);
+}
void hmp_info_migrate(Monitor *mon, const QDict *qdict)
{
diff --git a/migration/migration.c b/migration/migration.c
index 7b0d4a9d8f..4be66b1956 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -4421,25 +4421,6 @@ void migrate_fd_connect(MigrationState *s, Error *error_in)
s->migration_thread_running = true;
}
-void migration_global_dump(Monitor *mon)
-{
- MigrationState *ms = migrate_get_current();
-
- monitor_printf(mon, "globals:\n");
- monitor_printf(mon, "store-global-state: %s\n",
- ms->store_global_state ? "on" : "off");
- monitor_printf(mon, "only-migratable: %s\n",
- only_migratable ? "on" : "off");
- monitor_printf(mon, "send-configuration: %s\n",
- ms->send_configuration ? "on" : "off");
- monitor_printf(mon, "send-section-footer: %s\n",
- ms->send_section_footer ? "on" : "off");
- monitor_printf(mon, "decompress-error-check: %s\n",
- ms->decompress_error_check ? "on" : "off");
- monitor_printf(mon, "clear-bitmap-shift: %u\n",
- ms->clear_bitmap_shift);
-}
-
#define DEFINE_PROP_MIG_CAP(name, x) \
DEFINE_PROP_BOOL(name, MigrationState, capabilities[x], false)
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 02/43] spice: move client_migrate_info command to ui/
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
2023-04-20 13:39 ` [PATCH v2 01/43] migration: move migration_global_dump() to migration-hmp-cmds.c Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 03/43] migration: Create migration_cap_set() Juan Quintela
` (40 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
It has nothing to do with migration, except for the "migrate" in the
name of the command. Move it with the rest of the ui commands.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
I would claim that it should be only compiled with CONFIG_SPICE, but
I left that to spice maintainers.
---
migration/migration-hmp-cmds.c | 18 ------------------
migration/migration.c | 30 ------------------------------
qapi/migration.json | 28 ----------------------------
qapi/ui.json | 28 ++++++++++++++++++++++++++++
ui/ui-hmp-cmds.c | 17 +++++++++++++++++
ui/ui-qmp-cmds.c | 29 +++++++++++++++++++++++++++++
6 files changed, 74 insertions(+), 76 deletions(-)
diff --git a/migration/migration-hmp-cmds.c b/migration/migration-hmp-cmds.c
index 71da91967a..83f214d145 100644
--- a/migration/migration-hmp-cmds.c
+++ b/migration/migration-hmp-cmds.c
@@ -28,7 +28,6 @@
#include "qemu/error-report.h"
#include "qemu/sockets.h"
#include "sysemu/runstate.h"
-#include "ui/qemu-spice.h"
#include "sysemu/sysemu.h"
#include "migration.h"
@@ -636,23 +635,6 @@ void hmp_migrate_set_parameter(Monitor *mon, const QDict *qdict)
hmp_handle_error(mon, err);
}
-void hmp_client_migrate_info(Monitor *mon, const QDict *qdict)
-{
- Error *err = NULL;
- const char *protocol = qdict_get_str(qdict, "protocol");
- const char *hostname = qdict_get_str(qdict, "hostname");
- bool has_port = qdict_haskey(qdict, "port");
- int port = qdict_get_try_int(qdict, "port", -1);
- bool has_tls_port = qdict_haskey(qdict, "tls-port");
- int tls_port = qdict_get_try_int(qdict, "tls-port", -1);
- const char *cert_subject = qdict_get_try_str(qdict, "cert-subject");
-
- qmp_client_migrate_info(protocol, hostname,
- has_port, port, has_tls_port, tls_port,
- cert_subject, &err);
- hmp_handle_error(mon, err);
-}
-
void hmp_migrate_start_postcopy(Monitor *mon, const QDict *qdict)
{
Error *err = NULL;
diff --git a/migration/migration.c b/migration/migration.c
index 4be66b1956..74f28cdca6 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -63,7 +63,6 @@
#include "sysemu/cpus.h"
#include "yank_functions.h"
#include "sysemu/qtest.h"
-#include "ui/qemu-spice.h"
#define MAX_THROTTLE (128 << 20) /* Migration transfer speed throttling */
@@ -1018,35 +1017,6 @@ MigrationParameters *qmp_query_migrate_parameters(Error **errp)
return params;
}
-void qmp_client_migrate_info(const char *protocol, const char *hostname,
- bool has_port, int64_t port,
- bool has_tls_port, int64_t tls_port,
- const char *cert_subject,
- Error **errp)
-{
- if (strcmp(protocol, "spice") == 0) {
- if (!qemu_using_spice(errp)) {
- return;
- }
-
- if (!has_port && !has_tls_port) {
- error_setg(errp, QERR_MISSING_PARAMETER, "port/tls-port");
- return;
- }
-
- if (qemu_spice.migrate_info(hostname,
- has_port ? port : -1,
- has_tls_port ? tls_port : -1,
- cert_subject)) {
- error_setg(errp, "Could not set up display for migration");
- return;
- }
- return;
- }
-
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "protocol", "'spice'");
-}
-
AnnounceParameters *migrate_announce_params(void)
{
static AnnounceParameters ap;
diff --git a/qapi/migration.json b/qapi/migration.json
index c84fa10e86..2c35b7b9cf 100644
--- a/qapi/migration.json
+++ b/qapi/migration.json
@@ -1203,34 +1203,6 @@
{ 'command': 'query-migrate-parameters',
'returns': 'MigrationParameters' }
-##
-# @client_migrate_info:
-#
-# Set migration information for remote display. This makes the server
-# ask the client to automatically reconnect using the new parameters
-# once migration finished successfully. Only implemented for SPICE.
-#
-# @protocol: must be "spice"
-# @hostname: migration target hostname
-# @port: spice tcp port for plaintext channels
-# @tls-port: spice tcp port for tls-secured channels
-# @cert-subject: server certificate subject
-#
-# Since: 0.14
-#
-# Example:
-#
-# -> { "execute": "client_migrate_info",
-# "arguments": { "protocol": "spice",
-# "hostname": "virt42.lab.kraxel.org",
-# "port": 1234 } }
-# <- { "return": {} }
-#
-##
-{ 'command': 'client_migrate_info',
- 'data': { 'protocol': 'str', 'hostname': 'str', '*port': 'int',
- '*tls-port': 'int', '*cert-subject': 'str' } }
-
##
# @migrate-start-postcopy:
#
diff --git a/qapi/ui.json b/qapi/ui.json
index 98322342f7..7ddd27a932 100644
--- a/qapi/ui.json
+++ b/qapi/ui.json
@@ -1554,3 +1554,31 @@
{ 'command': 'display-update',
'data': 'DisplayUpdateOptions',
'boxed' : true }
+
+##
+# @client_migrate_info:
+#
+# Set migration information for remote display. This makes the server
+# ask the client to automatically reconnect using the new parameters
+# once migration finished successfully. Only implemented for SPICE.
+#
+# @protocol: must be "spice"
+# @hostname: migration target hostname
+# @port: spice tcp port for plaintext channels
+# @tls-port: spice tcp port for tls-secured channels
+# @cert-subject: server certificate subject
+#
+# Since: 0.14
+#
+# Example:
+#
+# -> { "execute": "client_migrate_info",
+# "arguments": { "protocol": "spice",
+# "hostname": "virt42.lab.kraxel.org",
+# "port": 1234 } }
+# <- { "return": {} }
+#
+##
+{ 'command': 'client_migrate_info',
+ 'data': { 'protocol': 'str', 'hostname': 'str', '*port': 'int',
+ '*tls-port': 'int', '*cert-subject': 'str' } }
diff --git a/ui/ui-hmp-cmds.c b/ui/ui-hmp-cmds.c
index 5c456ecc02..c671389473 100644
--- a/ui/ui-hmp-cmds.c
+++ b/ui/ui-hmp-cmds.c
@@ -458,3 +458,20 @@ hmp_screendump(Monitor *mon, const QDict *qdict)
end:
hmp_handle_error(mon, err);
}
+
+void hmp_client_migrate_info(Monitor *mon, const QDict *qdict)
+{
+ Error *err = NULL;
+ const char *protocol = qdict_get_str(qdict, "protocol");
+ const char *hostname = qdict_get_str(qdict, "hostname");
+ bool has_port = qdict_haskey(qdict, "port");
+ int port = qdict_get_try_int(qdict, "port", -1);
+ bool has_tls_port = qdict_haskey(qdict, "tls-port");
+ int tls_port = qdict_get_try_int(qdict, "tls-port", -1);
+ const char *cert_subject = qdict_get_try_str(qdict, "cert-subject");
+
+ qmp_client_migrate_info(protocol, hostname,
+ has_port, port, has_tls_port, tls_port,
+ cert_subject, &err);
+ hmp_handle_error(mon, err);
+}
diff --git a/ui/ui-qmp-cmds.c b/ui/ui-qmp-cmds.c
index dbc4afcd73..a37a7024f3 100644
--- a/ui/ui-qmp-cmds.c
+++ b/ui/ui-qmp-cmds.c
@@ -175,3 +175,32 @@ void qmp_display_update(DisplayUpdateOptions *arg, Error **errp)
abort();
}
}
+
+void qmp_client_migrate_info(const char *protocol, const char *hostname,
+ bool has_port, int64_t port,
+ bool has_tls_port, int64_t tls_port,
+ const char *cert_subject,
+ Error **errp)
+{
+ if (strcmp(protocol, "spice") == 0) {
+ if (!qemu_using_spice(errp)) {
+ return;
+ }
+
+ if (!has_port && !has_tls_port) {
+ error_setg(errp, QERR_MISSING_PARAMETER, "port/tls-port");
+ return;
+ }
+
+ if (qemu_spice.migrate_info(hostname,
+ has_port ? port : -1,
+ has_tls_port ? tls_port : -1,
+ cert_subject)) {
+ error_setg(errp, "Could not set up display for migration");
+ return;
+ }
+ return;
+ }
+
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "protocol", "'spice'");
+}
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 03/43] migration: Create migration_cap_set()
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
2023-04-20 13:39 ` [PATCH v2 01/43] migration: move migration_global_dump() to migration-hmp-cmds.c Juan Quintela
2023-04-20 13:39 ` [PATCH v2 02/43] spice: move client_migrate_info command to ui/ Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 18:44 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 04/43] migration: Create options.c Juan Quintela
` (39 subsequent siblings)
42 siblings, 1 reply; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
And remove the convoluted use of qmp_migrate_set_capabilities() to
enable disable MIGRATION_CAPABILITY_BLOCK.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 34 ++++++++++++++++------------------
1 file changed, 16 insertions(+), 18 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 74f28cdca6..4bf5df4778 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1913,25 +1913,24 @@ void migrate_set_state(int *state, int old_state, int new_state)
}
}
-static MigrationCapabilityStatus *migrate_cap_add(MigrationCapability index,
- bool state)
+static bool migrate_cap_set(int cap, bool value, Error **errp)
{
- MigrationCapabilityStatus *cap;
+ MigrationState *s = migrate_get_current();
+ bool new_caps[MIGRATION_CAPABILITY__MAX];
- cap = g_new0(MigrationCapabilityStatus, 1);
- cap->capability = index;
- cap->state = state;
+ if (migration_is_running(s->state)) {
+ error_setg(errp, QERR_MIGRATION_ACTIVE);
+ return false;
+ }
- return cap;
-}
+ memcpy(new_caps, s->capabilities, sizeof(new_caps));
+ new_caps[cap] = value;
-void migrate_set_block_enabled(bool value, Error **errp)
-{
- MigrationCapabilityStatusList *cap = NULL;
-
- QAPI_LIST_PREPEND(cap, migrate_cap_add(MIGRATION_CAPABILITY_BLOCK, value));
- qmp_migrate_set_capabilities(cap, errp);
- qapi_free_MigrationCapabilityStatusList(cap);
+ if (!migrate_caps_check(s->capabilities, new_caps, errp)) {
+ return false;
+ }
+ s->capabilities[cap] = value;
+ return true;
}
static void migrate_set_block_incremental(MigrationState *s, bool value)
@@ -1943,7 +1942,7 @@ static void block_cleanup_parameters(MigrationState *s)
{
if (s->must_remove_block_options) {
/* setting to false can never fail */
- migrate_set_block_enabled(false, &error_abort);
+ migrate_cap_set(MIGRATION_CAPABILITY_BLOCK, false, &error_abort);
migrate_set_block_incremental(s, false);
s->must_remove_block_options = false;
}
@@ -2430,8 +2429,7 @@ static bool migrate_prepare(MigrationState *s, bool blk, bool blk_inc,
"current migration capabilities");
return false;
}
- migrate_set_block_enabled(true, &local_err);
- if (local_err) {
+ if (!migrate_cap_set(MIGRATION_CAPABILITY_BLOCK, true, &local_err)) {
error_propagate(errp, local_err);
return false;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 04/43] migration: Create options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (2 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 03/43] migration: Create migration_cap_set() Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 05/43] migration: Move migrate_colo_enabled() to options.c Juan Quintela
` (38 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake,
Dr . David Alan Gilbert
We move there all capabilities helpers from migration.c.
Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
Following David advise:
- looked through the history, capabilities are newer than 2012, so we
can remove that bit of the header.
- This part is posterior to Anthony.
Original Author is Orit. Once there,
I put myself. Peter Xu also did quite a bit of work here.
Anyone else wants/needs to be there? I didn't search too hard
because nobody asked before to be added.
What do you think?
---
hw/virtio/virtio-balloon.c | 1 +
migration/block-dirty-bitmap.c | 1 +
migration/block.c | 1 +
migration/colo.c | 1 +
migration/meson.build | 1 +
migration/migration.c | 109 +----------------------------
migration/migration.h | 12 ----
migration/options.c | 124 +++++++++++++++++++++++++++++++++
migration/options.h | 32 +++++++++
migration/postcopy-ram.c | 1 +
migration/ram.c | 1 +
migration/savevm.c | 1 +
migration/socket.c | 1 +
13 files changed, 166 insertions(+), 120 deletions(-)
create mode 100644 migration/options.c
create mode 100644 migration/options.h
diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
index 746f07c4d2..43092aa634 100644
--- a/hw/virtio/virtio-balloon.c
+++ b/hw/virtio/virtio-balloon.c
@@ -32,6 +32,7 @@
#include "qemu/error-report.h"
#include "migration/misc.h"
#include "migration/migration.h"
+#include "migration/options.h"
#include "hw/virtio/virtio-bus.h"
#include "hw/virtio/virtio-access.h"
diff --git a/migration/block-dirty-bitmap.c b/migration/block-dirty-bitmap.c
index fe73aa94b1..a6ffae0002 100644
--- a/migration/block-dirty-bitmap.c
+++ b/migration/block-dirty-bitmap.c
@@ -79,6 +79,7 @@
#include "qapi/qapi-visit-migration.h"
#include "qapi/clone-visitor.h"
#include "trace.h"
+#include "options.h"
#define CHUNK_SIZE (1 << 10)
diff --git a/migration/block.c b/migration/block.c
index b2497bbd32..4b167fa5cf 100644
--- a/migration/block.c
+++ b/migration/block.c
@@ -28,6 +28,7 @@
#include "migration/vmstate.h"
#include "sysemu/block-backend.h"
#include "trace.h"
+#include "options.h"
#define BLK_MIG_BLOCK_SIZE (1ULL << 20)
#define BDRV_SECTORS_PER_DIRTY_CHUNK (BLK_MIG_BLOCK_SIZE >> BDRV_SECTOR_BITS)
diff --git a/migration/colo.c b/migration/colo.c
index 0716e64689..93b78c9270 100644
--- a/migration/colo.c
+++ b/migration/colo.c
@@ -36,6 +36,7 @@
#include "sysemu/cpus.h"
#include "sysemu/runstate.h"
#include "net/filter.h"
+#include "options.h"
static bool vmstate_loading;
static Notifier packets_compare_notifier;
diff --git a/migration/meson.build b/migration/meson.build
index 0d1bb9f96e..480ff6854a 100644
--- a/migration/meson.build
+++ b/migration/meson.build
@@ -22,6 +22,7 @@ softmmu_ss.add(files(
'migration.c',
'multifd.c',
'multifd-zlib.c',
+ 'options.c',
'postcopy-ram.c',
'savevm.c',
'socket.c',
diff --git a/migration/migration.c b/migration/migration.c
index 4bf5df4778..4bcccdd129 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -63,6 +63,7 @@
#include "sysemu/cpus.h"
#include "yank_functions.h"
#include "sysemu/qtest.h"
+#include "options.h"
#define MAX_THROTTLE (128 << 20) /* Migration transfer speed throttling */
@@ -357,15 +358,6 @@ static void migrate_generate_event(int new_state)
}
}
-static bool migrate_late_block_activate(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_LATE_BLOCK_ACTIVATE];
-}
-
/*
* Send a message on the return channel back to the source
* of the migration.
@@ -2526,56 +2518,11 @@ void qmp_migrate_continue(MigrationStatus state, Error **errp)
qemu_sem_post(&s->pause_sem);
}
-bool migrate_release_ram(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_RELEASE_RAM];
-}
-
-bool migrate_postcopy_ram(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM];
-}
-
bool migrate_postcopy(void)
{
return migrate_postcopy_ram() || migrate_dirty_bitmaps();
}
-bool migrate_auto_converge(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_AUTO_CONVERGE];
-}
-
-bool migrate_zero_blocks(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_ZERO_BLOCKS];
-}
-
-bool migrate_postcopy_blocktime(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_BLOCKTIME];
-}
-
bool migrate_use_compression(void)
{
MigrationState *s;
@@ -2621,33 +2568,6 @@ int migrate_decompress_threads(void)
return s->parameters.decompress_threads;
}
-bool migrate_dirty_bitmaps(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_DIRTY_BITMAPS];
-}
-
-bool migrate_ignore_shared(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_X_IGNORE_SHARED];
-}
-
-bool migrate_validate_uuid(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_VALIDATE_UUID];
-}
-
bool migrate_use_events(void)
{
MigrationState *s;
@@ -2666,15 +2586,6 @@ bool migrate_use_multifd(void)
return s->capabilities[MIGRATION_CAPABILITY_MULTIFD];
}
-bool migrate_pause_before_switchover(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_PAUSE_BEFORE_SWITCHOVER];
-}
-
int migrate_multifd_channels(void)
{
MigrationState *s;
@@ -2786,24 +2697,6 @@ bool migrate_use_block_incremental(void)
return s->parameters.block_incremental;
}
-bool migrate_background_snapshot(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT];
-}
-
-bool migrate_postcopy_preempt(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT];
-}
-
/* migration thread support */
/*
* Something bad happened to the RP stream, mark an error
diff --git a/migration/migration.h b/migration/migration.h
index 04e0860b4e..a25fed6ef0 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -449,16 +449,7 @@ MigrationState *migrate_get_current(void);
bool migrate_postcopy(void);
-bool migrate_release_ram(void);
-bool migrate_postcopy_ram(void);
-bool migrate_zero_blocks(void);
-bool migrate_dirty_bitmaps(void);
-bool migrate_ignore_shared(void);
-bool migrate_validate_uuid(void);
-
-bool migrate_auto_converge(void);
bool migrate_use_multifd(void);
-bool migrate_pause_before_switchover(void);
int migrate_multifd_channels(void);
MultiFDCompression migrate_multifd_compression(void);
int migrate_multifd_zlib_level(void);
@@ -487,9 +478,6 @@ int migrate_compress_threads(void);
int migrate_compress_wait_thread(void);
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/migration/options.c b/migration/options.c
new file mode 100644
index 0000000000..88a9a45913
--- /dev/null
+++ b/migration/options.c
@@ -0,0 +1,124 @@
+/*
+ * QEMU migration capabilities
+ *
+ * Copyright (c) 2012-2023 Red Hat Inc
+ *
+ * Authors:
+ * Orit Wasserman <owasserm@redhat.com>
+ * Juan Quintela <quintela@redhat.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#include "qemu/osdep.h"
+#include "migration.h"
+#include "options.h"
+
+bool migrate_auto_converge(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_AUTO_CONVERGE];
+}
+
+bool migrate_background_snapshot(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT];
+}
+
+bool migrate_dirty_bitmaps(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_DIRTY_BITMAPS];
+}
+
+bool migrate_ignore_shared(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_X_IGNORE_SHARED];
+}
+
+bool migrate_late_block_activate(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_LATE_BLOCK_ACTIVATE];
+}
+
+bool migrate_pause_before_switchover(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_PAUSE_BEFORE_SWITCHOVER];
+}
+
+bool migrate_postcopy_blocktime(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_BLOCKTIME];
+}
+
+bool migrate_postcopy_preempt(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT];
+}
+
+bool migrate_postcopy_ram(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM];
+}
+
+bool migrate_release_ram(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_RELEASE_RAM];
+}
+
+bool migrate_validate_uuid(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_VALIDATE_UUID];
+}
+
+bool migrate_zero_blocks(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_ZERO_BLOCKS];
+}
diff --git a/migration/options.h b/migration/options.h
new file mode 100644
index 0000000000..0dfa0af245
--- /dev/null
+++ b/migration/options.h
@@ -0,0 +1,32 @@
+/*
+ * QEMU migration capabilities
+ *
+ * Copyright (c) 2012-2023 Red Hat Inc
+ *
+ * Authors:
+ * Orit Wasserman <owasserm@redhat.com>
+ * Juan Quintela <quintela@redhat.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#ifndef QEMU_MIGRATION_OPTIONS_H
+#define QEMU_MIGRATION_OPTIONS_H
+
+/* capabilities */
+
+bool migrate_auto_converge(void);
+bool migrate_background_snapshot(void);
+bool migrate_dirty_bitmaps(void);
+bool migrate_ignore_shared(void);
+bool migrate_late_block_activate(void);
+bool migrate_pause_before_switchover(void);
+bool migrate_postcopy_blocktime(void);
+bool migrate_postcopy_preempt(void);
+bool migrate_postcopy_ram(void);
+bool migrate_release_ram(void);
+bool migrate_validate_uuid(void);
+bool migrate_zero_blocks(void);
+
+#endif
diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c
index d7b48dd920..0711500036 100644
--- a/migration/postcopy-ram.c
+++ b/migration/postcopy-ram.c
@@ -37,6 +37,7 @@
#include "tls.h"
#include "qemu/userfaultfd.h"
#include "qemu/mmap-alloc.h"
+#include "options.h"
/* Arbitrary limit on size of each discard command,
* keeps them around ~200 bytes
diff --git a/migration/ram.c b/migration/ram.c
index 7ad92f8756..4019fb6500 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -57,6 +57,7 @@
#include "qemu/iov.h"
#include "multifd.h"
#include "sysemu/runstate.h"
+#include "options.h"
#include "hw/boards.h" /* for machine_dump_guest_core() */
diff --git a/migration/savevm.c b/migration/savevm.c
index 589ef926ab..ebcf571e37 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -67,6 +67,7 @@
#include "qemu/yank.h"
#include "yank_functions.h"
#include "sysemu/qtest.h"
+#include "options.h"
const unsigned int postcopy_ram_discard_version;
diff --git a/migration/socket.c b/migration/socket.c
index e6fdf3c5e1..ebf9ac41af 100644
--- a/migration/socket.c
+++ b/migration/socket.c
@@ -27,6 +27,7 @@
#include "io/net-listener.h"
#include "trace.h"
#include "postcopy-ram.h"
+#include "options.h"
struct SocketOutgoingArgs {
SocketAddress *saddr;
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 05/43] migration: Move migrate_colo_enabled() to options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (3 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 04/43] migration: Create options.c Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 06/43] migration: Move migrate_use_compression() " Juan Quintela
` (37 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Once that we are there, we rename the function to migrate_colo() to be
consistent with all other capabilities.
Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
migration/migration.c | 16 +++++-----------
migration/migration.h | 1 -
migration/options.c | 6 ++++++
migration/options.h | 1 +
4 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 4bcccdd129..c1ffb3c180 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2412,7 +2412,7 @@ static bool migrate_prepare(MigrationState *s, bool blk, bool blk_inc,
}
if (blk || blk_inc) {
- if (migrate_colo_enabled()) {
+ if (migrate_colo()) {
error_setg(errp, "No disk migration is required in COLO mode");
return false;
}
@@ -3293,7 +3293,7 @@ static void migration_completion(MigrationState *s)
ret = global_state_store();
if (!ret) {
- bool inactivate = !migrate_colo_enabled();
+ bool inactivate = !migrate_colo();
ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
trace_migration_completion_vm_stop(ret);
if (ret >= 0) {
@@ -3354,7 +3354,7 @@ static void migration_completion(MigrationState *s)
goto fail_invalidate;
}
- if (migrate_colo_enabled() && s->state == MIGRATION_STATUS_ACTIVE) {
+ if (migrate_colo() && s->state == MIGRATION_STATUS_ACTIVE) {
/* COLO does not support postcopy */
migrate_set_state(&s->state, MIGRATION_STATUS_ACTIVE,
MIGRATION_STATUS_COLO);
@@ -3433,12 +3433,6 @@ fail:
MIGRATION_STATUS_FAILED);
}
-bool migrate_colo_enabled(void)
-{
- MigrationState *s = migrate_get_current();
- return s->capabilities[MIGRATION_CAPABILITY_X_COLO];
-}
-
typedef enum MigThrError {
/* No error detected */
MIG_THR_ERR_NONE = 0,
@@ -3772,7 +3766,7 @@ static void migration_iteration_finish(MigrationState *s)
runstate_set(RUN_STATE_POSTMIGRATE);
break;
case MIGRATION_STATUS_COLO:
- if (!migrate_colo_enabled()) {
+ if (!migrate_colo()) {
error_report("%s: critical error: calling COLO code without "
"COLO enabled", __func__);
}
@@ -3968,7 +3962,7 @@ static void *migration_thread(void *opaque)
qemu_savevm_send_postcopy_advise(s->to_dst_file);
}
- if (migrate_colo_enabled()) {
+ if (migrate_colo()) {
/* Notify migration destination that we enable COLO */
qemu_savevm_send_colo_enable(s->to_dst_file);
}
diff --git a/migration/migration.h b/migration/migration.h
index a25fed6ef0..42f0c68b6f 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -463,7 +463,6 @@ bool migrate_use_zero_copy_send(void);
int migrate_use_tls(void);
int migrate_use_xbzrle(void);
uint64_t migrate_xbzrle_cache_size(void);
-bool migrate_colo_enabled(void);
bool migrate_use_block(void);
bool migrate_use_block_incremental(void);
diff --git a/migration/options.c b/migration/options.c
index 88a9a45913..bd33c5da0a 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -33,6 +33,12 @@ bool migrate_background_snapshot(void)
return s->capabilities[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT];
}
+bool migrate_colo(void)
+{
+ MigrationState *s = migrate_get_current();
+ return s->capabilities[MIGRATION_CAPABILITY_X_COLO];
+}
+
bool migrate_dirty_bitmaps(void)
{
MigrationState *s;
diff --git a/migration/options.h b/migration/options.h
index 0dfa0af245..2a0ee61ff8 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -18,6 +18,7 @@
bool migrate_auto_converge(void);
bool migrate_background_snapshot(void);
+bool migrate_colo(void);
bool migrate_dirty_bitmaps(void);
bool migrate_ignore_shared(void);
bool migrate_late_block_activate(void);
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 06/43] migration: Move migrate_use_compression() to options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (4 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 05/43] migration: Move migrate_colo_enabled() to options.c Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 07/43] migration: Move migrate_use_events() " Juan Quintela
` (36 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Once that we are there, we rename the function to migrate_compress()
to be consistent with all other capabilities.
Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
migration/migration.c | 11 +----------
migration/migration.h | 1 -
migration/options.c | 9 +++++++++
migration/options.h | 1 +
migration/ram.c | 16 ++++++++--------
5 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index c1ffb3c180..4f77e7e1b3 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1133,7 +1133,7 @@ static void populate_ram_info(MigrationInfo *info, MigrationState *s)
info->xbzrle_cache->overflow = xbzrle_counters.overflow;
}
- if (migrate_use_compression()) {
+ if (migrate_compress()) {
info->compression = g_malloc0(sizeof(*info->compression));
info->compression->pages = compression_counters.pages;
info->compression->busy = compression_counters.busy;
@@ -2523,15 +2523,6 @@ bool migrate_postcopy(void)
return migrate_postcopy_ram() || migrate_dirty_bitmaps();
}
-bool migrate_use_compression(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_COMPRESS];
-}
-
int migrate_compress_level(void)
{
MigrationState *s;
diff --git a/migration/migration.h b/migration/migration.h
index 42f0c68b6f..77aa91c840 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -471,7 +471,6 @@ bool migrate_use_return_path(void);
uint64_t ram_get_total_transferred_pages(void);
-bool migrate_use_compression(void);
int migrate_compress_level(void);
int migrate_compress_threads(void);
int migrate_compress_wait_thread(void);
diff --git a/migration/options.c b/migration/options.c
index bd33c5da0a..fa7a13d3dc 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -39,6 +39,15 @@ bool migrate_colo(void)
return s->capabilities[MIGRATION_CAPABILITY_X_COLO];
}
+bool migrate_compress(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_COMPRESS];
+}
+
bool migrate_dirty_bitmaps(void)
{
MigrationState *s;
diff --git a/migration/options.h b/migration/options.h
index 2a0ee61ff8..da2193fd94 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -19,6 +19,7 @@
bool migrate_auto_converge(void);
bool migrate_background_snapshot(void);
bool migrate_colo(void);
+bool migrate_compress(void);
bool migrate_dirty_bitmaps(void);
bool migrate_ignore_shared(void);
bool migrate_late_block_activate(void);
diff --git a/migration/ram.c b/migration/ram.c
index 4019fb6500..9bb7cbd4bb 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -586,7 +586,7 @@ static void compress_threads_save_cleanup(void)
{
int i, thread_count;
- if (!migrate_use_compression() || !comp_param) {
+ if (!migrate_compress() || !comp_param) {
return;
}
@@ -625,7 +625,7 @@ static int compress_threads_save_setup(void)
{
int i, thread_count;
- if (!migrate_use_compression()) {
+ if (!migrate_compress()) {
return 0;
}
thread_count = migrate_compress_threads();
@@ -1156,7 +1156,7 @@ static void migration_update_rates(RAMState *rs, int64_t end_time)
rs->xbzrle_bytes_prev = xbzrle_counters.bytes;
}
- if (migrate_use_compression()) {
+ if (migrate_compress()) {
compression_counters.busy_rate = (double)(compression_counters.busy -
rs->compress_thread_busy_prev) / page_count;
rs->compress_thread_busy_prev = compression_counters.busy;
@@ -2272,7 +2272,7 @@ int ram_save_queue_pages(const char *rbname, ram_addr_t start, ram_addr_t len)
static bool save_page_use_compression(RAMState *rs)
{
- if (!migrate_use_compression()) {
+ if (!migrate_compress()) {
return false;
}
@@ -3736,7 +3736,7 @@ static int wait_for_decompress_done(void)
{
int idx, thread_count;
- if (!migrate_use_compression()) {
+ if (!migrate_compress()) {
return 0;
}
@@ -3755,7 +3755,7 @@ static void compress_threads_load_cleanup(void)
{
int i, thread_count;
- if (!migrate_use_compression()) {
+ if (!migrate_compress()) {
return;
}
thread_count = migrate_decompress_threads();
@@ -3796,7 +3796,7 @@ static int compress_threads_load_setup(QEMUFile *f)
{
int i, thread_count;
- if (!migrate_use_compression()) {
+ if (!migrate_compress()) {
return 0;
}
@@ -4262,7 +4262,7 @@ static int ram_load_precopy(QEMUFile *f)
int flags = 0, ret = 0, invalid_flags = 0, len = 0, i = 0;
/* ADVISE is earlier, it shows the source has the postcopy capability on */
bool postcopy_advised = migration_incoming_postcopy_advised();
- if (!migrate_use_compression()) {
+ if (!migrate_compress()) {
invalid_flags |= RAM_SAVE_FLAG_COMPRESS_PAGE;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 07/43] migration: Move migrate_use_events() to options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (5 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 06/43] migration: Move migrate_use_compression() " Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 08/43] migration: Move migrate_use_multifd() " Juan Quintela
` (35 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Once that we are there, we rename the function to migrate_events()
to be consistent with all other capabilities.
Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
migration/migration.c | 11 +----------
migration/migration.h | 1 -
migration/options.c | 9 +++++++++
migration/options.h | 1 +
migration/ram.c | 2 +-
5 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 4f77e7e1b3..de797c4114 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -353,7 +353,7 @@ void migration_incoming_state_destroy(void)
static void migrate_generate_event(int new_state)
{
- if (migrate_use_events()) {
+ if (migrate_events()) {
qapi_event_send_migration(new_state);
}
}
@@ -2559,15 +2559,6 @@ int migrate_decompress_threads(void)
return s->parameters.decompress_threads;
}
-bool migrate_use_events(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_EVENTS];
-}
-
bool migrate_use_multifd(void)
{
MigrationState *s;
diff --git a/migration/migration.h b/migration/migration.h
index 77aa91c840..bd06520c19 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -475,7 +475,6 @@ int migrate_compress_level(void);
int migrate_compress_threads(void);
int migrate_compress_wait_thread(void);
int migrate_decompress_threads(void);
-bool migrate_use_events(void);
/* Sending on the return path - generic and then for each message type */
void migrate_send_rp_shut(MigrationIncomingState *mis,
diff --git a/migration/options.c b/migration/options.c
index fa7a13d3dc..d2219ee0e4 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -57,6 +57,15 @@ bool migrate_dirty_bitmaps(void)
return s->capabilities[MIGRATION_CAPABILITY_DIRTY_BITMAPS];
}
+bool migrate_events(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_EVENTS];
+}
+
bool migrate_ignore_shared(void)
{
MigrationState *s;
diff --git a/migration/options.h b/migration/options.h
index da2193fd94..b998024eba 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -21,6 +21,7 @@ bool migrate_background_snapshot(void);
bool migrate_colo(void);
bool migrate_compress(void);
bool migrate_dirty_bitmaps(void);
+bool migrate_events(void);
bool migrate_ignore_shared(void);
bool migrate_late_block_activate(void);
bool migrate_pause_before_switchover(void);
diff --git a/migration/ram.c b/migration/ram.c
index 9bb7cbd4bb..663f20d6f0 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -1248,7 +1248,7 @@ static void migration_bitmap_sync(RAMState *rs)
rs->num_dirty_pages_period = 0;
rs->bytes_xfer_prev = stat64_get(&ram_counters.transferred);
}
- if (migrate_use_events()) {
+ if (migrate_events()) {
uint64_t generation = stat64_get(&ram_counters.dirty_sync_count);
qapi_event_send_migration_pass(generation);
}
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 08/43] migration: Move migrate_use_multifd() to options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (6 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 07/43] migration: Move migrate_use_events() " Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 09/43] migration: Move migrate_use_zero_copy_send() " Juan Quintela
` (34 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Once that we are there, we rename the function to migrate_multifd()
to be consistent with all other capabilities.
Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
migration/migration.c | 19 +++++--------------
migration/migration.h | 1 -
migration/multifd.c | 16 ++++++++--------
migration/options.c | 9 +++++++++
migration/options.h | 1 +
migration/ram.c | 2 +-
migration/socket.c | 2 +-
7 files changed, 25 insertions(+), 25 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index de797c4114..465b7ba5a5 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -186,7 +186,7 @@ static void migrate_fd_cancel(MigrationState *s);
static bool migration_needs_multiple_sockets(void)
{
- return migrate_use_multifd() || migrate_postcopy_preempt();
+ return migrate_multifd() || migrate_postcopy_preempt();
}
static bool uri_supports_multi_channels(const char *uri)
@@ -732,7 +732,7 @@ void migration_fd_process_incoming(QEMUFile *f, Error **errp)
static bool migration_should_start_incoming(bool main_channel)
{
/* Multifd doesn't start unless all channels are established */
- if (migrate_use_multifd()) {
+ if (migrate_multifd()) {
return migration_has_all_channels();
}
@@ -759,7 +759,7 @@ void migration_ioc_process_incoming(QIOChannel *ioc, Error **errp)
uint32_t channel_magic = 0;
int ret = 0;
- if (migrate_use_multifd() && !migrate_postcopy_ram() &&
+ if (migrate_multifd() && !migrate_postcopy_ram() &&
qio_channel_has_feature(ioc, QIO_CHANNEL_FEATURE_READ_MSG_PEEK)) {
/*
* With multiple channels, it is possible that we receive channels
@@ -798,7 +798,7 @@ void migration_ioc_process_incoming(QIOChannel *ioc, Error **errp)
} else {
/* Multiple connections */
assert(migration_needs_multiple_sockets());
- if (migrate_use_multifd()) {
+ if (migrate_multifd()) {
multifd_recv_new_channel(ioc, &local_err);
} else {
assert(migrate_postcopy_preempt());
@@ -834,7 +834,7 @@ bool migration_has_all_channels(void)
return false;
}
- if (migrate_use_multifd()) {
+ if (migrate_multifd()) {
return multifd_recv_all_channels_created();
}
@@ -2559,15 +2559,6 @@ int migrate_decompress_threads(void)
return s->parameters.decompress_threads;
}
-bool migrate_use_multifd(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_MULTIFD];
-}
-
int migrate_multifd_channels(void)
{
MigrationState *s;
diff --git a/migration/migration.h b/migration/migration.h
index bd06520c19..49c0e13f41 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -449,7 +449,6 @@ MigrationState *migrate_get_current(void);
bool migrate_postcopy(void);
-bool migrate_use_multifd(void);
int migrate_multifd_channels(void);
MultiFDCompression migrate_multifd_compression(void);
int migrate_multifd_zlib_level(void);
diff --git a/migration/multifd.c b/migration/multifd.c
index 903df2117b..6807328189 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -516,7 +516,7 @@ void multifd_save_cleanup(void)
{
int i;
- if (!migrate_use_multifd()) {
+ if (!migrate_multifd()) {
return;
}
multifd_send_terminate_threads(NULL);
@@ -587,7 +587,7 @@ int multifd_send_sync_main(QEMUFile *f)
int i;
bool flush_zero_copy;
- if (!migrate_use_multifd()) {
+ if (!migrate_multifd()) {
return 0;
}
if (multifd_send_state->pages->num) {
@@ -911,7 +911,7 @@ int multifd_save_setup(Error **errp)
uint32_t page_count = MULTIFD_PACKET_SIZE / qemu_target_page_size();
uint8_t i;
- if (!migrate_use_multifd()) {
+ if (!migrate_multifd()) {
return 0;
}
@@ -1016,7 +1016,7 @@ static void multifd_recv_terminate_threads(Error *err)
void multifd_load_shutdown(void)
{
- if (migrate_use_multifd()) {
+ if (migrate_multifd()) {
multifd_recv_terminate_threads(NULL);
}
}
@@ -1025,7 +1025,7 @@ void multifd_load_cleanup(void)
{
int i;
- if (!migrate_use_multifd()) {
+ if (!migrate_multifd()) {
return;
}
multifd_recv_terminate_threads(NULL);
@@ -1072,7 +1072,7 @@ void multifd_recv_sync_main(void)
{
int i;
- if (!migrate_use_multifd()) {
+ if (!migrate_multifd()) {
return;
}
for (i = 0; i < migrate_multifd_channels(); i++) {
@@ -1170,7 +1170,7 @@ int multifd_load_setup(Error **errp)
* Return successfully if multiFD recv state is already initialised
* or multiFD is not enabled.
*/
- if (multifd_recv_state || !migrate_use_multifd()) {
+ if (multifd_recv_state || !migrate_multifd()) {
return 0;
}
@@ -1216,7 +1216,7 @@ bool multifd_recv_all_channels_created(void)
{
int thread_count = migrate_multifd_channels();
- if (!migrate_use_multifd()) {
+ if (!migrate_multifd()) {
return true;
}
diff --git a/migration/options.c b/migration/options.c
index d2219ee0e4..58673fc101 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -84,6 +84,15 @@ bool migrate_late_block_activate(void)
return s->capabilities[MIGRATION_CAPABILITY_LATE_BLOCK_ACTIVATE];
}
+bool migrate_multifd(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_MULTIFD];
+}
+
bool migrate_pause_before_switchover(void)
{
MigrationState *s;
diff --git a/migration/options.h b/migration/options.h
index b998024eba..d07269ee38 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -24,6 +24,7 @@ bool migrate_dirty_bitmaps(void);
bool migrate_events(void);
bool migrate_ignore_shared(void);
bool migrate_late_block_activate(void);
+bool migrate_multifd(void);
bool migrate_pause_before_switchover(void);
bool migrate_postcopy_blocktime(void);
bool migrate_postcopy_preempt(void);
diff --git a/migration/ram.c b/migration/ram.c
index 663f20d6f0..f2341e25f2 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -2364,7 +2364,7 @@ static int ram_save_target_page_legacy(RAMState *rs, PageSearchStatus *pss)
* if host page size == guest page size the dest guest during run may
* still see partially copied pages which is data corruption.
*/
- if (migrate_use_multifd() && !migration_in_postcopy()) {
+ if (migrate_multifd() && !migration_in_postcopy()) {
return ram_save_multifd_page(pss->pss_channel, block, offset);
}
diff --git a/migration/socket.c b/migration/socket.c
index ebf9ac41af..f4835a256a 100644
--- a/migration/socket.c
+++ b/migration/socket.c
@@ -183,7 +183,7 @@ socket_start_incoming_migration_internal(SocketAddress *saddr,
qio_net_listener_set_name(listener, "migration-socket-listener");
- if (migrate_use_multifd()) {
+ if (migrate_multifd()) {
num = migrate_multifd_channels();
} else if (migrate_postcopy_preempt()) {
num = RAM_CHANNEL_MAX;
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 09/43] migration: Move migrate_use_zero_copy_send() to options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (7 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 08/43] migration: Move migrate_use_multifd() " Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 10/43] migration: Move migrate_use_xbzrle() " Juan Quintela
` (33 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Once that we are there, we rename the function to
migrate_zero_copy_send() to be consistent with all other capabilities.
We can remove the CONFIG_LINUX guard. We already check that we can't
setup this capability in migrate_caps_check().
Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
migration/migration.c | 13 +------------
migration/migration.h | 5 -----
migration/multifd.c | 8 ++++----
migration/options.c | 9 +++++++++
migration/options.h | 1 +
migration/socket.c | 2 +-
6 files changed, 16 insertions(+), 22 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 465b7ba5a5..a17b1598dc 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1610,7 +1610,7 @@ static bool migrate_params_check(MigrationParameters *params, Error **errp)
}
#ifdef CONFIG_LINUX
- if (migrate_use_zero_copy_send() &&
+ if (migrate_zero_copy_send() &&
((params->has_multifd_compression && params->multifd_compression) ||
(params->tls_creds && *params->tls_creds))) {
error_setg(errp,
@@ -2596,17 +2596,6 @@ int migrate_multifd_zstd_level(void)
return s->parameters.multifd_zstd_level;
}
-#ifdef CONFIG_LINUX
-bool migrate_use_zero_copy_send(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_ZERO_COPY_SEND];
-}
-#endif
-
int migrate_use_tls(void)
{
MigrationState *s;
diff --git a/migration/migration.h b/migration/migration.h
index 49c0e13f41..c939f82d53 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -454,11 +454,6 @@ MultiFDCompression migrate_multifd_compression(void);
int migrate_multifd_zlib_level(void);
int migrate_multifd_zstd_level(void);
-#ifdef CONFIG_LINUX
-bool migrate_use_zero_copy_send(void);
-#else
-#define migrate_use_zero_copy_send() (false)
-#endif
int migrate_use_tls(void);
int migrate_use_xbzrle(void);
uint64_t migrate_xbzrle_cache_size(void);
diff --git a/migration/multifd.c b/migration/multifd.c
index 6807328189..cce3ad6988 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -25,7 +25,7 @@
#include "trace.h"
#include "multifd.h"
#include "threadinfo.h"
-
+#include "options.h"
#include "qemu/yank.h"
#include "io/channel-socket.h"
#include "yank_functions.h"
@@ -608,7 +608,7 @@ int multifd_send_sync_main(QEMUFile *f)
* all the dirty bitmaps.
*/
- flush_zero_copy = migrate_use_zero_copy_send();
+ flush_zero_copy = migrate_zero_copy_send();
for (i = 0; i < migrate_multifd_channels(); i++) {
MultiFDSendParams *p = &multifd_send_state->params[i];
@@ -653,7 +653,7 @@ static void *multifd_send_thread(void *opaque)
MigrationThread *thread = NULL;
Error *local_err = NULL;
int ret = 0;
- bool use_zero_copy_send = migrate_use_zero_copy_send();
+ bool use_zero_copy_send = migrate_zero_copy_send();
thread = MigrationThreadAdd(p->name, qemu_get_thread_id());
@@ -945,7 +945,7 @@ int multifd_save_setup(Error **errp)
p->page_size = qemu_target_page_size();
p->page_count = page_count;
- if (migrate_use_zero_copy_send()) {
+ if (migrate_zero_copy_send()) {
p->write_flags = QIO_CHANNEL_WRITE_FLAG_ZERO_COPY;
} else {
p->write_flags = 0;
diff --git a/migration/options.c b/migration/options.c
index 58673fc101..f357c99996 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -155,3 +155,12 @@ bool migrate_zero_blocks(void)
return s->capabilities[MIGRATION_CAPABILITY_ZERO_BLOCKS];
}
+
+bool migrate_zero_copy_send(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_ZERO_COPY_SEND];
+}
diff --git a/migration/options.h b/migration/options.h
index d07269ee38..ad22f4d24a 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -32,5 +32,6 @@ bool migrate_postcopy_ram(void);
bool migrate_release_ram(void);
bool migrate_validate_uuid(void);
bool migrate_zero_blocks(void);
+bool migrate_zero_copy_send(void);
#endif
diff --git a/migration/socket.c b/migration/socket.c
index f4835a256a..1b6f5baefb 100644
--- a/migration/socket.c
+++ b/migration/socket.c
@@ -98,7 +98,7 @@ static void socket_outgoing_migration(QIOTask *task,
trace_migration_socket_outgoing_connected(data->hostname);
- if (migrate_use_zero_copy_send() &&
+ if (migrate_zero_copy_send() &&
!qio_channel_has_feature(sioc, QIO_CHANNEL_FEATURE_WRITE_ZERO_COPY)) {
error_setg(&err, "Zero copy send feature not detected in host kernel");
}
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 10/43] migration: Move migrate_use_xbzrle() to options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (8 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 09/43] migration: Move migrate_use_zero_copy_send() " Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 11/43] migration: Move migrate_use_block() " Juan Quintela
` (32 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Once that we are there, we rename the function to migrate_xbzrle()
to be consistent with all other capabilities.
We change the type to return bool also for consistency.
Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
migration/migration.c | 11 +----------
migration/migration.h | 1 -
migration/options.c | 9 +++++++++
migration/options.h | 1 +
migration/ram.c | 10 +++++-----
5 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index a17b1598dc..f34c5f1895 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1122,7 +1122,7 @@ static void populate_ram_info(MigrationInfo *info, MigrationState *s)
info->ram->downtime_bytes = stat64_get(&ram_counters.downtime_bytes);
info->ram->postcopy_bytes = stat64_get(&ram_counters.postcopy_bytes);
- if (migrate_use_xbzrle()) {
+ if (migrate_xbzrle()) {
info->xbzrle_cache = g_malloc0(sizeof(*info->xbzrle_cache));
info->xbzrle_cache->cache_size = migrate_xbzrle_cache_size();
info->xbzrle_cache->bytes = xbzrle_counters.bytes;
@@ -2605,15 +2605,6 @@ int migrate_use_tls(void)
return s->parameters.tls_creds && *s->parameters.tls_creds;
}
-int migrate_use_xbzrle(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_XBZRLE];
-}
-
uint64_t migrate_xbzrle_cache_size(void)
{
MigrationState *s;
diff --git a/migration/migration.h b/migration/migration.h
index c939f82d53..e2bb5b1e2f 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -455,7 +455,6 @@ int migrate_multifd_zlib_level(void);
int migrate_multifd_zstd_level(void);
int migrate_use_tls(void);
-int migrate_use_xbzrle(void);
uint64_t migrate_xbzrle_cache_size(void);
bool migrate_use_block(void);
diff --git a/migration/options.c b/migration/options.c
index f357c99996..25264c500e 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -147,6 +147,15 @@ bool migrate_validate_uuid(void)
return s->capabilities[MIGRATION_CAPABILITY_VALIDATE_UUID];
}
+bool migrate_xbzrle(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_XBZRLE];
+}
+
bool migrate_zero_blocks(void)
{
MigrationState *s;
diff --git a/migration/options.h b/migration/options.h
index ad22f4d24a..8f76a88329 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -31,6 +31,7 @@ bool migrate_postcopy_preempt(void);
bool migrate_postcopy_ram(void);
bool migrate_release_ram(void);
bool migrate_validate_uuid(void);
+bool migrate_xbzrle(void);
bool migrate_zero_blocks(void);
bool migrate_zero_copy_send(void);
diff --git a/migration/ram.c b/migration/ram.c
index f2341e25f2..7f28588dde 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -156,14 +156,14 @@ static struct {
static void XBZRLE_cache_lock(void)
{
- if (migrate_use_xbzrle()) {
+ if (migrate_xbzrle()) {
qemu_mutex_lock(&XBZRLE.lock);
}
}
static void XBZRLE_cache_unlock(void)
{
- if (migrate_use_xbzrle()) {
+ if (migrate_xbzrle()) {
qemu_mutex_unlock(&XBZRLE.lock);
}
}
@@ -1138,7 +1138,7 @@ static void migration_update_rates(RAMState *rs, int64_t end_time)
return;
}
- if (migrate_use_xbzrle()) {
+ if (migrate_xbzrle()) {
double encoded_size, unencoded_size;
xbzrle_counters.cache_miss_rate = (double)(xbzrle_counters.cache_miss -
@@ -1628,7 +1628,7 @@ static int find_dirty_block(RAMState *rs, PageSearchStatus *pss)
/* Flag that we've looped */
pss->complete_round = true;
/* After the first round, enable XBZRLE. */
- if (migrate_use_xbzrle()) {
+ if (migrate_xbzrle()) {
rs->xbzrle_enabled = true;
}
}
@@ -2981,7 +2981,7 @@ static int xbzrle_init(void)
{
Error *local_err = NULL;
- if (!migrate_use_xbzrle()) {
+ if (!migrate_xbzrle()) {
return 0;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 11/43] migration: Move migrate_use_block() to options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (9 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 10/43] migration: Move migrate_use_xbzrle() " Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 12/43] migration: Move migrate_use_return() " Juan Quintela
` (31 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Once that we are there, we rename the function to migrate_block()
to be consistent with all other capabilities.
Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
migration/block.c | 2 +-
migration/migration.c | 11 +----------
migration/migration.h | 1 -
migration/options.c | 9 +++++++++
migration/options.h | 1 +
migration/savevm.c | 2 +-
6 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/migration/block.c b/migration/block.c
index 4b167fa5cf..f0977217cf 100644
--- a/migration/block.c
+++ b/migration/block.c
@@ -1001,7 +1001,7 @@ static int block_load(QEMUFile *f, void *opaque, int version_id)
static bool block_is_active(void *opaque)
{
- return migrate_use_block();
+ return migrate_block();
}
static SaveVMHandlers savevm_block_handlers = {
diff --git a/migration/migration.c b/migration/migration.c
index f34c5f1895..1d0fe27b92 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2416,7 +2416,7 @@ static bool migrate_prepare(MigrationState *s, bool blk, bool blk_inc,
error_setg(errp, "No disk migration is required in COLO mode");
return false;
}
- if (migrate_use_block() || migrate_use_block_incremental()) {
+ if (migrate_block() || migrate_use_block_incremental()) {
error_setg(errp, "Command options are incompatible with "
"current migration capabilities");
return false;
@@ -2623,15 +2623,6 @@ static int64_t migrate_max_postcopy_bandwidth(void)
return s->parameters.max_postcopy_bandwidth;
}
-bool migrate_use_block(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_BLOCK];
-}
-
bool migrate_use_return_path(void)
{
MigrationState *s;
diff --git a/migration/migration.h b/migration/migration.h
index e2bb5b1e2f..d4b68b08a5 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -457,7 +457,6 @@ int migrate_multifd_zstd_level(void);
int migrate_use_tls(void);
uint64_t migrate_xbzrle_cache_size(void);
-bool migrate_use_block(void);
bool migrate_use_block_incremental(void);
int migrate_max_cpu_throttle(void);
bool migrate_use_return_path(void);
diff --git a/migration/options.c b/migration/options.c
index 25264c500e..fe1eadeed6 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -33,6 +33,15 @@ bool migrate_background_snapshot(void)
return s->capabilities[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT];
}
+bool migrate_block(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_BLOCK];
+}
+
bool migrate_colo(void)
{
MigrationState *s = migrate_get_current();
diff --git a/migration/options.h b/migration/options.h
index 8f76a88329..e985a5233e 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -18,6 +18,7 @@
bool migrate_auto_converge(void);
bool migrate_background_snapshot(void);
+bool migrate_block(void);
bool migrate_colo(void);
bool migrate_compress(void);
bool migrate_dirty_bitmaps(void);
diff --git a/migration/savevm.c b/migration/savevm.c
index ebcf571e37..9671211339 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -1612,7 +1612,7 @@ static int qemu_savevm_state(QEMUFile *f, Error **errp)
return -EINVAL;
}
- if (migrate_use_block()) {
+ if (migrate_block()) {
error_setg(errp, "Block migration and snapshots are incompatible");
return -EINVAL;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 12/43] migration: Move migrate_use_return() to options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (10 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 11/43] migration: Move migrate_use_block() " Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 13/43] migration: Create migrate_rdma_pin_all() function Juan Quintela
` (30 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Once that we are there, we rename the function to migrate_return_path()
to be consistent with all other capabilities.
Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
migration/migration.c | 11 +----------
migration/migration.h | 1 -
migration/options.c | 9 +++++++++
migration/options.h | 1 +
migration/rdma.c | 6 +++---
5 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 1d0fe27b92..f907e17d65 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2623,15 +2623,6 @@ static int64_t migrate_max_postcopy_bandwidth(void)
return s->parameters.max_postcopy_bandwidth;
}
-bool migrate_use_return_path(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->capabilities[MIGRATION_CAPABILITY_RETURN_PATH];
-}
-
bool migrate_use_block_incremental(void)
{
MigrationState *s;
@@ -4176,7 +4167,7 @@ void migrate_fd_connect(MigrationState *s, Error *error_in)
* precopy, only if user specified "return-path" capability would
* QEMU uses the return path.
*/
- if (migrate_postcopy_ram() || migrate_use_return_path()) {
+ if (migrate_postcopy_ram() || migrate_return_path()) {
if (open_return_path_on_source(s, !resume)) {
error_report("Unable to open return-path for postcopy");
migrate_set_state(&s->state, s->state, MIGRATION_STATUS_FAILED);
diff --git a/migration/migration.h b/migration/migration.h
index d4b68b08a5..24184622a8 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -459,7 +459,6 @@ uint64_t migrate_xbzrle_cache_size(void);
bool migrate_use_block_incremental(void);
int migrate_max_cpu_throttle(void);
-bool migrate_use_return_path(void);
uint64_t ram_get_total_transferred_pages(void);
diff --git a/migration/options.c b/migration/options.c
index fe1eadeed6..2003e413da 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -147,6 +147,15 @@ bool migrate_release_ram(void)
return s->capabilities[MIGRATION_CAPABILITY_RELEASE_RAM];
}
+bool migrate_return_path(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_RETURN_PATH];
+}
+
bool migrate_validate_uuid(void)
{
MigrationState *s;
diff --git a/migration/options.h b/migration/options.h
index e985a5233e..316efd1063 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -31,6 +31,7 @@ bool migrate_postcopy_blocktime(void);
bool migrate_postcopy_preempt(void);
bool migrate_postcopy_ram(void);
bool migrate_release_ram(void);
+bool migrate_return_path(void);
bool migrate_validate_uuid(void);
bool migrate_xbzrle(void);
bool migrate_zero_blocks(void);
diff --git a/migration/rdma.c b/migration/rdma.c
index f35f021963..bf55e2f163 100644
--- a/migration/rdma.c
+++ b/migration/rdma.c
@@ -3373,7 +3373,7 @@ static int qemu_rdma_accept(RDMAContext *rdma)
* initialize the RDMAContext for return path for postcopy after first
* connection request reached.
*/
- if ((migrate_postcopy() || migrate_use_return_path())
+ if ((migrate_postcopy() || migrate_return_path())
&& !rdma->is_return_path) {
rdma_return_path = qemu_rdma_data_init(rdma->host_port, NULL);
if (rdma_return_path == NULL) {
@@ -3456,7 +3456,7 @@ static int qemu_rdma_accept(RDMAContext *rdma)
}
/* Accept the second connection request for return path */
- if ((migrate_postcopy() || migrate_use_return_path())
+ if ((migrate_postcopy() || migrate_return_path())
&& !rdma->is_return_path) {
qemu_set_fd_handler(rdma->channel->fd, rdma_accept_incoming_migration,
NULL,
@@ -4193,7 +4193,7 @@ void rdma_start_outgoing_migration(void *opaque,
}
/* RDMA postcopy need a separate queue pair for return path */
- if (migrate_postcopy() || migrate_use_return_path()) {
+ if (migrate_postcopy() || migrate_return_path()) {
rdma_return_path = qemu_rdma_data_init(host_port, errp);
if (rdma_return_path == NULL) {
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 13/43] migration: Create migrate_rdma_pin_all() function
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (11 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 12/43] migration: Move migrate_use_return() " Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 18:46 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 14/43] migration: Move migrate_caps_check() to options.c Juan Quintela
` (29 subsequent siblings)
42 siblings, 1 reply; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
migration/options.c | 7 +++++++
migration/options.h | 1 +
migration/rdma.c | 6 +++---
3 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/migration/options.c b/migration/options.c
index 2003e413da..9c9b8e5863 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -138,6 +138,13 @@ bool migrate_postcopy_ram(void)
return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM];
}
+bool migrate_rdma_pin_all(void)
+{
+ MigrationState *s = migrate_get_current();
+
+ return s->capabilities[MIGRATION_CAPABILITY_RDMA_PIN_ALL];
+}
+
bool migrate_release_ram(void)
{
MigrationState *s;
diff --git a/migration/options.h b/migration/options.h
index 316efd1063..25c002b37a 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -30,6 +30,7 @@ bool migrate_pause_before_switchover(void);
bool migrate_postcopy_blocktime(void);
bool migrate_postcopy_preempt(void);
bool migrate_postcopy_ram(void);
+bool migrate_rdma_pin_all(void);
bool migrate_release_ram(void);
bool migrate_return_path(void);
bool migrate_validate_uuid(void);
diff --git a/migration/rdma.c b/migration/rdma.c
index bf55e2f163..3e7b68c482 100644
--- a/migration/rdma.c
+++ b/migration/rdma.c
@@ -35,6 +35,7 @@
#include <rdma/rdma_cma.h>
#include "trace.h"
#include "qom/object.h"
+#include "options.h"
#include <poll.h>
/*
@@ -4178,8 +4179,7 @@ void rdma_start_outgoing_migration(void *opaque,
goto err;
}
- ret = qemu_rdma_source_init(rdma,
- s->capabilities[MIGRATION_CAPABILITY_RDMA_PIN_ALL], errp);
+ ret = qemu_rdma_source_init(rdma,migrate_rdma_pin_all(), errp);
if (ret) {
goto err;
@@ -4201,7 +4201,7 @@ void rdma_start_outgoing_migration(void *opaque,
}
ret = qemu_rdma_source_init(rdma_return_path,
- s->capabilities[MIGRATION_CAPABILITY_RDMA_PIN_ALL], errp);
+ migrate_rdma_pin_all(), errp);
if (ret) {
goto return_path_err;
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 14/43] migration: Move migrate_caps_check() to options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (12 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 13/43] migration: Create migrate_rdma_pin_all() function Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 18:09 ` Vladimir Sementsov-Ogievskiy
2023-04-20 13:39 ` [PATCH v2 15/43] migration: Move qmp_query_migrate_capabilities() " Juan Quintela
` (28 subsequent siblings)
42 siblings, 1 reply; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 190 -----------------------------------------
migration/options.c | 192 ++++++++++++++++++++++++++++++++++++++++++
migration/options.h | 4 +
3 files changed, 196 insertions(+), 190 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index f907e17d65..933c96792b 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -136,39 +136,6 @@ enum mig_rp_message_type {
MIG_RP_MSG_MAX
};
-/* Migration capabilities set */
-struct MigrateCapsSet {
- int size; /* Capability set size */
- MigrationCapability caps[]; /* Variadic array of capabilities */
-};
-typedef struct MigrateCapsSet MigrateCapsSet;
-
-/* Define and initialize MigrateCapsSet */
-#define INITIALIZE_MIGRATE_CAPS_SET(_name, ...) \
- MigrateCapsSet _name = { \
- .size = sizeof((int []) { __VA_ARGS__ }) / sizeof(int), \
- .caps = { __VA_ARGS__ } \
- }
-
-/* Background-snapshot compatibility check list */
-static const
-INITIALIZE_MIGRATE_CAPS_SET(check_caps_background_snapshot,
- MIGRATION_CAPABILITY_POSTCOPY_RAM,
- MIGRATION_CAPABILITY_DIRTY_BITMAPS,
- MIGRATION_CAPABILITY_POSTCOPY_BLOCKTIME,
- MIGRATION_CAPABILITY_LATE_BLOCK_ACTIVATE,
- MIGRATION_CAPABILITY_RETURN_PATH,
- MIGRATION_CAPABILITY_MULTIFD,
- MIGRATION_CAPABILITY_PAUSE_BEFORE_SWITCHOVER,
- MIGRATION_CAPABILITY_AUTO_CONVERGE,
- MIGRATION_CAPABILITY_RELEASE_RAM,
- MIGRATION_CAPABILITY_RDMA_PIN_ALL,
- MIGRATION_CAPABILITY_COMPRESS,
- MIGRATION_CAPABILITY_XBZRLE,
- MIGRATION_CAPABILITY_X_COLO,
- MIGRATION_CAPABILITY_VALIDATE_UUID,
- MIGRATION_CAPABILITY_ZERO_COPY_SEND);
-
/* When we add fault tolerance, we could have several
migrations at once. For now we don't need to add
dynamic creation of migration */
@@ -1236,163 +1203,6 @@ static void fill_source_migration_info(MigrationInfo *info)
info->status = state;
}
-typedef enum WriteTrackingSupport {
- WT_SUPPORT_UNKNOWN = 0,
- WT_SUPPORT_ABSENT,
- WT_SUPPORT_AVAILABLE,
- WT_SUPPORT_COMPATIBLE
-} WriteTrackingSupport;
-
-static
-WriteTrackingSupport migrate_query_write_tracking(void)
-{
- /* Check if kernel supports required UFFD features */
- if (!ram_write_tracking_available()) {
- return WT_SUPPORT_ABSENT;
- }
- /*
- * Check if current memory configuration is
- * compatible with required UFFD features.
- */
- if (!ram_write_tracking_compatible()) {
- return WT_SUPPORT_AVAILABLE;
- }
-
- return WT_SUPPORT_COMPATIBLE;
-}
-
-/**
- * @migration_caps_check - check capability compatibility
- *
- * @old_caps: old capability list
- * @new_caps: new capability list
- * @errp: set *errp if the check failed, with reason
- *
- * Returns true if check passed, otherwise false.
- */
-static bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp)
-{
- MigrationIncomingState *mis = migration_incoming_get_current();
-
-#ifndef CONFIG_LIVE_BLOCK_MIGRATION
- if (new_caps[MIGRATION_CAPABILITY_BLOCK]) {
- error_setg(errp, "QEMU compiled without old-style (blk/-b, inc/-i) "
- "block migration");
- error_append_hint(errp, "Use drive_mirror+NBD instead.\n");
- return false;
- }
-#endif
-
-#ifndef CONFIG_REPLICATION
- if (new_caps[MIGRATION_CAPABILITY_X_COLO]) {
- error_setg(errp, "QEMU compiled without replication module"
- " can't enable COLO");
- error_append_hint(errp, "Please enable replication before COLO.\n");
- return false;
- }
-#endif
-
- if (new_caps[MIGRATION_CAPABILITY_POSTCOPY_RAM]) {
- /* This check is reasonably expensive, so only when it's being
- * set the first time, also it's only the destination that needs
- * special support.
- */
- if (!old_caps[MIGRATION_CAPABILITY_POSTCOPY_RAM] &&
- runstate_check(RUN_STATE_INMIGRATE) &&
- !postcopy_ram_supported_by_host(mis)) {
- /* postcopy_ram_supported_by_host will have emitted a more
- * detailed message
- */
- error_setg(errp, "Postcopy is not supported");
- return false;
- }
-
- if (new_caps[MIGRATION_CAPABILITY_X_IGNORE_SHARED]) {
- error_setg(errp, "Postcopy is not compatible with ignore-shared");
- return false;
- }
- }
-
- if (new_caps[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT]) {
- WriteTrackingSupport wt_support;
- int idx;
- /*
- * Check if 'background-snapshot' capability is supported by
- * host kernel and compatible with guest memory configuration.
- */
- wt_support = migrate_query_write_tracking();
- if (wt_support < WT_SUPPORT_AVAILABLE) {
- error_setg(errp, "Background-snapshot is not supported by host kernel");
- return false;
- }
- if (wt_support < WT_SUPPORT_COMPATIBLE) {
- error_setg(errp, "Background-snapshot is not compatible "
- "with guest memory configuration");
- return false;
- }
-
- /*
- * Check if there are any migration capabilities
- * incompatible with 'background-snapshot'.
- */
- for (idx = 0; idx < check_caps_background_snapshot.size; idx++) {
- int incomp_cap = check_caps_background_snapshot.caps[idx];
- if (new_caps[incomp_cap]) {
- error_setg(errp,
- "Background-snapshot is not compatible with %s",
- MigrationCapability_str(incomp_cap));
- return false;
- }
- }
- }
-
-#ifdef CONFIG_LINUX
- if (new_caps[MIGRATION_CAPABILITY_ZERO_COPY_SEND] &&
- (!new_caps[MIGRATION_CAPABILITY_MULTIFD] ||
- new_caps[MIGRATION_CAPABILITY_COMPRESS] ||
- new_caps[MIGRATION_CAPABILITY_XBZRLE] ||
- migrate_multifd_compression() ||
- migrate_use_tls())) {
- error_setg(errp,
- "Zero copy only available for non-compressed non-TLS multifd migration");
- return false;
- }
-#else
- if (new_caps[MIGRATION_CAPABILITY_ZERO_COPY_SEND]) {
- error_setg(errp,
- "Zero copy currently only available on Linux");
- return false;
- }
-#endif
-
- if (new_caps[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT]) {
- if (!new_caps[MIGRATION_CAPABILITY_POSTCOPY_RAM]) {
- error_setg(errp, "Postcopy preempt requires postcopy-ram");
- return false;
- }
-
- /*
- * Preempt mode requires urgent pages to be sent in separate
- * channel, OTOH compression logic will disorder all pages into
- * different compression channels, which is not compatible with the
- * preempt assumptions on channel assignments.
- */
- if (new_caps[MIGRATION_CAPABILITY_COMPRESS]) {
- error_setg(errp, "Postcopy preempt not compatible with compress");
- return false;
- }
- }
-
- if (new_caps[MIGRATION_CAPABILITY_MULTIFD]) {
- if (new_caps[MIGRATION_CAPABILITY_COMPRESS]) {
- error_setg(errp, "Multifd is not compatible with compress");
- return false;
- }
- }
-
- return true;
-}
-
static void fill_destination_migration_info(MigrationInfo *info)
{
MigrationIncomingState *mis = migration_incoming_get_current();
diff --git a/migration/options.c b/migration/options.c
index 9c9b8e5863..367c930f46 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -12,7 +12,10 @@
*/
#include "qemu/osdep.h"
+#include "qapi/error.h"
+#include "sysemu/runstate.h"
#include "migration.h"
+#include "ram.h"
#include "options.h"
bool migrate_auto_converge(void)
@@ -198,3 +201,192 @@ bool migrate_zero_copy_send(void)
return s->capabilities[MIGRATION_CAPABILITY_ZERO_COPY_SEND];
}
+typedef enum WriteTrackingSupport {
+ WT_SUPPORT_UNKNOWN = 0,
+ WT_SUPPORT_ABSENT,
+ WT_SUPPORT_AVAILABLE,
+ WT_SUPPORT_COMPATIBLE
+} WriteTrackingSupport;
+
+static
+WriteTrackingSupport migrate_query_write_tracking(void)
+{
+ /* Check if kernel supports required UFFD features */
+ if (!ram_write_tracking_available()) {
+ return WT_SUPPORT_ABSENT;
+ }
+ /*
+ * Check if current memory configuration is
+ * compatible with required UFFD features.
+ */
+ if (!ram_write_tracking_compatible()) {
+ return WT_SUPPORT_AVAILABLE;
+ }
+
+ return WT_SUPPORT_COMPATIBLE;
+}
+
+/* Migration capabilities set */
+struct MigrateCapsSet {
+ int size; /* Capability set size */
+ MigrationCapability caps[]; /* Variadic array of capabilities */
+};
+typedef struct MigrateCapsSet MigrateCapsSet;
+
+/* Define and initialize MigrateCapsSet */
+#define INITIALIZE_MIGRATE_CAPS_SET(_name, ...) \
+ MigrateCapsSet _name = { \
+ .size = sizeof((int []) { __VA_ARGS__ }) / sizeof(int), \
+ .caps = { __VA_ARGS__ } \
+ }
+
+/* Background-snapshot compatibility check list */
+static const
+INITIALIZE_MIGRATE_CAPS_SET(check_caps_background_snapshot,
+ MIGRATION_CAPABILITY_POSTCOPY_RAM,
+ MIGRATION_CAPABILITY_DIRTY_BITMAPS,
+ MIGRATION_CAPABILITY_POSTCOPY_BLOCKTIME,
+ MIGRATION_CAPABILITY_LATE_BLOCK_ACTIVATE,
+ MIGRATION_CAPABILITY_RETURN_PATH,
+ MIGRATION_CAPABILITY_MULTIFD,
+ MIGRATION_CAPABILITY_PAUSE_BEFORE_SWITCHOVER,
+ MIGRATION_CAPABILITY_AUTO_CONVERGE,
+ MIGRATION_CAPABILITY_RELEASE_RAM,
+ MIGRATION_CAPABILITY_RDMA_PIN_ALL,
+ MIGRATION_CAPABILITY_COMPRESS,
+ MIGRATION_CAPABILITY_XBZRLE,
+ MIGRATION_CAPABILITY_X_COLO,
+ MIGRATION_CAPABILITY_VALIDATE_UUID,
+ MIGRATION_CAPABILITY_ZERO_COPY_SEND);
+
+/**
+ * @migration_caps_check - check capability compatibility
+ *
+ * @old_caps: old capability list
+ * @new_caps: new capability list
+ * @errp: set *errp if the check failed, with reason
+ *
+ * Returns true if check passed, otherwise false.
+ */
+bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp)
+{
+ MigrationIncomingState *mis = migration_incoming_get_current();
+
+#ifndef CONFIG_LIVE_BLOCK_MIGRATION
+ if (new_caps[MIGRATION_CAPABILITY_BLOCK]) {
+ error_setg(errp, "QEMU compiled without old-style (blk/-b, inc/-i) "
+ "block migration");
+ error_append_hint(errp, "Use drive_mirror+NBD instead.\n");
+ return false;
+ }
+#endif
+
+#ifndef CONFIG_REPLICATION
+ if (new_caps[MIGRATION_CAPABILITY_X_COLO]) {
+ error_setg(errp, "QEMU compiled without replication module"
+ " can't enable COLO");
+ error_append_hint(errp, "Please enable replication before COLO.\n");
+ return false;
+ }
+#endif
+
+ if (new_caps[MIGRATION_CAPABILITY_POSTCOPY_RAM]) {
+ /* This check is reasonably expensive, so only when it's being
+ * set the first time, also it's only the destination that needs
+ * special support.
+ */
+ if (!old_caps[MIGRATION_CAPABILITY_POSTCOPY_RAM] &&
+ runstate_check(RUN_STATE_INMIGRATE) &&
+ !postcopy_ram_supported_by_host(mis)) {
+ /* postcopy_ram_supported_by_host will have emitted a more
+ * detailed message
+ */
+ error_setg(errp, "Postcopy is not supported");
+ return false;
+ }
+
+ if (new_caps[MIGRATION_CAPABILITY_X_IGNORE_SHARED]) {
+ error_setg(errp, "Postcopy is not compatible with ignore-shared");
+ return false;
+ }
+ }
+
+ if (new_caps[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT]) {
+ WriteTrackingSupport wt_support;
+ int idx;
+ /*
+ * Check if 'background-snapshot' capability is supported by
+ * host kernel and compatible with guest memory configuration.
+ */
+ wt_support = migrate_query_write_tracking();
+ if (wt_support < WT_SUPPORT_AVAILABLE) {
+ error_setg(errp, "Background-snapshot is not supported by host kernel");
+ return false;
+ }
+ if (wt_support < WT_SUPPORT_COMPATIBLE) {
+ error_setg(errp, "Background-snapshot is not compatible "
+ "with guest memory configuration");
+ return false;
+ }
+
+ /*
+ * Check if there are any migration capabilities
+ * incompatible with 'background-snapshot'.
+ */
+ for (idx = 0; idx < check_caps_background_snapshot.size; idx++) {
+ int incomp_cap = check_caps_background_snapshot.caps[idx];
+ if (new_caps[incomp_cap]) {
+ error_setg(errp,
+ "Background-snapshot is not compatible with %s",
+ MigrationCapability_str(incomp_cap));
+ return false;
+ }
+ }
+ }
+
+#ifdef CONFIG_LINUX
+ if (new_caps[MIGRATION_CAPABILITY_ZERO_COPY_SEND] &&
+ (!new_caps[MIGRATION_CAPABILITY_MULTIFD] ||
+ new_caps[MIGRATION_CAPABILITY_COMPRESS] ||
+ new_caps[MIGRATION_CAPABILITY_XBZRLE] ||
+ migrate_multifd_compression() ||
+ migrate_use_tls())) {
+ error_setg(errp,
+ "Zero copy only available for non-compressed non-TLS multifd migration");
+ return false;
+ }
+#else
+ if (new_caps[MIGRATION_CAPABILITY_ZERO_COPY_SEND]) {
+ error_setg(errp,
+ "Zero copy currently only available on Linux");
+ return false;
+ }
+#endif
+
+ if (new_caps[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT]) {
+ if (!new_caps[MIGRATION_CAPABILITY_POSTCOPY_RAM]) {
+ error_setg(errp, "Postcopy preempt requires postcopy-ram");
+ return false;
+ }
+
+ /*
+ * Preempt mode requires urgent pages to be sent in separate
+ * channel, OTOH compression logic will disorder all pages into
+ * different compression channels, which is not compatible with the
+ * preempt assumptions on channel assignments.
+ */
+ if (new_caps[MIGRATION_CAPABILITY_COMPRESS]) {
+ error_setg(errp, "Postcopy preempt not compatible with compress");
+ return false;
+ }
+ }
+
+ if (new_caps[MIGRATION_CAPABILITY_MULTIFD]) {
+ if (new_caps[MIGRATION_CAPABILITY_COMPRESS]) {
+ error_setg(errp, "Multifd is not compatible with compress");
+ return false;
+ }
+ }
+
+ return true;
+}
diff --git a/migration/options.h b/migration/options.h
index 25c002b37a..e779f14161 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -38,4 +38,8 @@ bool migrate_xbzrle(void);
bool migrate_zero_blocks(void);
bool migrate_zero_copy_send(void);
+/* capabilities helpers */
+
+bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp);
+
#endif
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 15/43] migration: Move qmp_query_migrate_capabilities() to options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (13 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 14/43] migration: Move migrate_caps_check() to options.c Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 18:10 ` Vladimir Sementsov-Ogievskiy
2023-04-20 13:39 ` [PATCH v2 16/43] migration: Move qmp_migrate_set_capabilities() " Juan Quintela
` (27 subsequent siblings)
42 siblings, 1 reply; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 22 ----------------------
migration/options.c | 23 +++++++++++++++++++++++
2 files changed, 23 insertions(+), 22 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 933c96792b..bc796879c0 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -886,28 +886,6 @@ void migrate_send_rp_resume_ack(MigrationIncomingState *mis, uint32_t value)
migrate_send_rp_message(mis, MIG_RP_MSG_RESUME_ACK, sizeof(buf), &buf);
}
-MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp)
-{
- MigrationCapabilityStatusList *head = NULL, **tail = &head;
- MigrationCapabilityStatus *caps;
- MigrationState *s = migrate_get_current();
- int i;
-
- for (i = 0; i < MIGRATION_CAPABILITY__MAX; i++) {
-#ifndef CONFIG_LIVE_BLOCK_MIGRATION
- if (i == MIGRATION_CAPABILITY_BLOCK) {
- continue;
- }
-#endif
- caps = g_malloc0(sizeof(*caps));
- caps->capability = i;
- caps->state = s->capabilities[i];
- QAPI_LIST_APPEND(tail, caps);
- }
-
- return head;
-}
-
MigrationParameters *qmp_query_migrate_parameters(Error **errp)
{
MigrationParameters *params;
diff --git a/migration/options.c b/migration/options.c
index 367c930f46..ff621bdeb3 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -13,6 +13,7 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
+#include "qapi/qapi-commands-migration.h"
#include "sysemu/runstate.h"
#include "migration.h"
#include "ram.h"
@@ -390,3 +391,25 @@ bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp)
return true;
}
+
+MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp)
+{
+ MigrationCapabilityStatusList *head = NULL, **tail = &head;
+ MigrationCapabilityStatus *caps;
+ MigrationState *s = migrate_get_current();
+ int i;
+
+ for (i = 0; i < MIGRATION_CAPABILITY__MAX; i++) {
+#ifndef CONFIG_LIVE_BLOCK_MIGRATION
+ if (i == MIGRATION_CAPABILITY_BLOCK) {
+ continue;
+ }
+#endif
+ caps = g_malloc0(sizeof(*caps));
+ caps->capability = i;
+ caps->state = s->capabilities[i];
+ QAPI_LIST_APPEND(tail, caps);
+ }
+
+ return head;
+}
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 16/43] migration: Move qmp_migrate_set_capabilities() to options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (14 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 15/43] migration: Move qmp_query_migrate_capabilities() " Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 18:11 ` Vladimir Sementsov-Ogievskiy
2023-04-20 13:39 ` [PATCH v2 17/43] migration: Move migrate_cap_set() " Juan Quintela
` (26 subsequent siblings)
42 siblings, 1 reply; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 26 --------------------------
migration/options.c | 26 ++++++++++++++++++++++++++
2 files changed, 26 insertions(+), 26 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index bc796879c0..854be12ca6 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1223,32 +1223,6 @@ MigrationInfo *qmp_query_migrate(Error **errp)
return info;
}
-void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
- Error **errp)
-{
- MigrationState *s = migrate_get_current();
- MigrationCapabilityStatusList *cap;
- bool new_caps[MIGRATION_CAPABILITY__MAX];
-
- if (migration_is_running(s->state)) {
- error_setg(errp, QERR_MIGRATION_ACTIVE);
- return;
- }
-
- memcpy(new_caps, s->capabilities, sizeof(new_caps));
- for (cap = params; cap; cap = cap->next) {
- new_caps[cap->value->capability] = cap->value->state;
- }
-
- if (!migrate_caps_check(s->capabilities, new_caps, errp)) {
- return;
- }
-
- for (cap = params; cap; cap = cap->next) {
- s->capabilities[cap->value->capability] = cap->value->state;
- }
-}
-
/*
* Check whether the parameters are valid. Error will be put into errp
* (if provided). Return true if valid, otherwise false.
diff --git a/migration/options.c b/migration/options.c
index ff621bdeb3..4cbe77e35a 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -413,3 +413,29 @@ MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp)
return head;
}
+
+void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
+ Error **errp)
+{
+ MigrationState *s = migrate_get_current();
+ MigrationCapabilityStatusList *cap;
+ bool new_caps[MIGRATION_CAPABILITY__MAX];
+
+ if (migration_is_running(s->state)) {
+ error_setg(errp, QERR_MIGRATION_ACTIVE);
+ return;
+ }
+
+ memcpy(new_caps, s->capabilities, sizeof(new_caps));
+ for (cap = params; cap; cap = cap->next) {
+ new_caps[cap->value->capability] = cap->value->state;
+ }
+
+ if (!migrate_caps_check(s->capabilities, new_caps, errp)) {
+ return;
+ }
+
+ for (cap = params; cap; cap = cap->next) {
+ s->capabilities[cap->value->capability] = cap->value->state;
+ }
+}
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 17/43] migration: Move migrate_cap_set() to options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (15 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 16/43] migration: Move qmp_migrate_set_capabilities() " Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 18:12 ` Vladimir Sementsov-Ogievskiy
2023-04-20 13:39 ` [PATCH v2 18/43] migration: Move parameters functions to option.c Juan Quintela
` (25 subsequent siblings)
42 siblings, 1 reply; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 20 --------------------
migration/options.c | 21 +++++++++++++++++++++
migration/options.h | 1 +
3 files changed, 22 insertions(+), 20 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 854be12ca6..4aac939833 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1667,26 +1667,6 @@ void migrate_set_state(int *state, int old_state, int new_state)
}
}
-static bool migrate_cap_set(int cap, bool value, Error **errp)
-{
- MigrationState *s = migrate_get_current();
- bool new_caps[MIGRATION_CAPABILITY__MAX];
-
- if (migration_is_running(s->state)) {
- error_setg(errp, QERR_MIGRATION_ACTIVE);
- return false;
- }
-
- memcpy(new_caps, s->capabilities, sizeof(new_caps));
- new_caps[cap] = value;
-
- if (!migrate_caps_check(s->capabilities, new_caps, errp)) {
- return false;
- }
- s->capabilities[cap] = value;
- return true;
-}
-
static void migrate_set_block_incremental(MigrationState *s, bool value)
{
s->parameters.block_incremental = value;
diff --git a/migration/options.c b/migration/options.c
index 4cbe77e35a..f3b2d6e482 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -14,6 +14,7 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
#include "qapi/qapi-commands-migration.h"
+#include "qapi/qmp/qerror.h"
#include "sysemu/runstate.h"
#include "migration.h"
#include "ram.h"
@@ -392,6 +393,26 @@ bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp)
return true;
}
+bool migrate_cap_set(int cap, bool value, Error **errp)
+{
+ MigrationState *s = migrate_get_current();
+ bool new_caps[MIGRATION_CAPABILITY__MAX];
+
+ if (migration_is_running(s->state)) {
+ error_setg(errp, QERR_MIGRATION_ACTIVE);
+ return false;
+ }
+
+ memcpy(new_caps, s->capabilities, sizeof(new_caps));
+ new_caps[cap] = value;
+
+ if (!migrate_caps_check(s->capabilities, new_caps, errp)) {
+ return false;
+ }
+ s->capabilities[cap] = value;
+ return true;
+}
+
MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp)
{
MigrationCapabilityStatusList *head = NULL, **tail = &head;
diff --git a/migration/options.h b/migration/options.h
index e779f14161..5979e4ff90 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -41,5 +41,6 @@ bool migrate_zero_copy_send(void);
/* capabilities helpers */
bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp);
+bool migrate_cap_set(int cap, bool value, Error **errp);
#endif
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 18/43] migration: Move parameters functions to option.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (16 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 17/43] migration: Move migrate_cap_set() " Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 18:28 ` Vladimir Sementsov-Ogievskiy
2023-04-20 13:39 ` [PATCH v2 19/43] migration: Use migrate_max_postcopy_bandwidth() Juan Quintela
` (24 subsequent siblings)
42 siblings, 1 reply; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 91 ---------------------------------------
migration/migration.h | 11 -----
migration/multifd-zlib.c | 1 +
migration/multifd-zstd.c | 1 +
migration/options.c | 93 ++++++++++++++++++++++++++++++++++++++++
migration/options.h | 13 ++++++
6 files changed, 108 insertions(+), 102 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 4aac939833..028c297121 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2265,79 +2265,6 @@ bool migrate_postcopy(void)
return migrate_postcopy_ram() || migrate_dirty_bitmaps();
}
-int migrate_compress_level(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.compress_level;
-}
-
-int migrate_compress_threads(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.compress_threads;
-}
-
-int migrate_compress_wait_thread(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.compress_wait_thread;
-}
-
-int migrate_decompress_threads(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.decompress_threads;
-}
-
-int migrate_multifd_channels(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.multifd_channels;
-}
-
-MultiFDCompression migrate_multifd_compression(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- assert(s->parameters.multifd_compression < MULTIFD_COMPRESSION__MAX);
- return s->parameters.multifd_compression;
-}
-
-int migrate_multifd_zlib_level(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.multifd_zlib_level;
-}
-
-int migrate_multifd_zstd_level(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.multifd_zstd_level;
-}
-
int migrate_use_tls(void)
{
MigrationState *s;
@@ -2347,24 +2274,6 @@ int migrate_use_tls(void)
return s->parameters.tls_creds && *s->parameters.tls_creds;
}
-uint64_t migrate_xbzrle_cache_size(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.xbzrle_cache_size;
-}
-
-static int64_t migrate_max_postcopy_bandwidth(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.max_postcopy_bandwidth;
-}
-
bool migrate_use_block_incremental(void)
{
MigrationState *s;
diff --git a/migration/migration.h b/migration/migration.h
index 24184622a8..8451e5f2fe 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -449,24 +449,13 @@ MigrationState *migrate_get_current(void);
bool migrate_postcopy(void);
-int migrate_multifd_channels(void);
-MultiFDCompression migrate_multifd_compression(void);
-int migrate_multifd_zlib_level(void);
-int migrate_multifd_zstd_level(void);
-
int migrate_use_tls(void);
-uint64_t migrate_xbzrle_cache_size(void);
bool migrate_use_block_incremental(void);
int migrate_max_cpu_throttle(void);
uint64_t ram_get_total_transferred_pages(void);
-int migrate_compress_level(void);
-int migrate_compress_threads(void);
-int migrate_compress_wait_thread(void);
-int migrate_decompress_threads(void);
-
/* Sending on the return path - generic and then for each message type */
void migrate_send_rp_shut(MigrationIncomingState *mis,
uint32_t value);
diff --git a/migration/multifd-zlib.c b/migration/multifd-zlib.c
index 37770248e1..81701250ad 100644
--- a/migration/multifd-zlib.c
+++ b/migration/multifd-zlib.c
@@ -18,6 +18,7 @@
#include "qapi/error.h"
#include "migration.h"
#include "trace.h"
+#include "options.h"
#include "multifd.h"
struct zlib_data {
diff --git a/migration/multifd-zstd.c b/migration/multifd-zstd.c
index f4a8e1ed1f..d1d29e76cc 100644
--- a/migration/multifd-zstd.c
+++ b/migration/multifd-zstd.c
@@ -18,6 +18,7 @@
#include "qapi/error.h"
#include "migration.h"
#include "trace.h"
+#include "options.h"
#include "multifd.h"
struct zstd_data {
diff --git a/migration/options.c b/migration/options.c
index f3b2d6e482..8d15be858c 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -460,3 +460,96 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
s->capabilities[cap->value->capability] = cap->value->state;
}
}
+
+/* parameters */
+
+int migrate_compress_level(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.compress_level;
+}
+
+int migrate_compress_threads(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.compress_threads;
+}
+
+int migrate_compress_wait_thread(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.compress_wait_thread;
+}
+
+int migrate_decompress_threads(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.decompress_threads;
+}
+
+int64_t migrate_max_postcopy_bandwidth(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.max_postcopy_bandwidth;
+}
+
+int migrate_multifd_channels(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.multifd_channels;
+}
+
+MultiFDCompression migrate_multifd_compression(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ assert(s->parameters.multifd_compression < MULTIFD_COMPRESSION__MAX);
+ return s->parameters.multifd_compression;
+}
+
+int migrate_multifd_zlib_level(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.multifd_zlib_level;
+}
+
+int migrate_multifd_zstd_level(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.multifd_zstd_level;
+}
+
+uint64_t migrate_xbzrle_cache_size(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.xbzrle_cache_size;
+}
diff --git a/migration/options.h b/migration/options.h
index 5979e4ff90..b24ee92283 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -43,4 +43,17 @@ bool migrate_zero_copy_send(void);
bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp);
bool migrate_cap_set(int cap, bool value, Error **errp);
+/* parameters */
+
+int migrate_compress_level(void);
+int migrate_compress_threads(void);
+int migrate_compress_wait_thread(void);
+int migrate_decompress_threads(void);
+int64_t migrate_max_postcopy_bandwidth(void);
+int migrate_multifd_channels(void);
+MultiFDCompression migrate_multifd_compression(void);
+int migrate_multifd_zlib_level(void);
+int migrate_multifd_zstd_level(void);
+uint64_t migrate_xbzrle_cache_size(void);
+
#endif
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 19/43] migration: Use migrate_max_postcopy_bandwidth()
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (17 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 18/43] migration: Move parameters functions to option.c Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 18:30 ` Vladimir Sementsov-Ogievskiy
2023-04-20 13:39 ` [PATCH v2 20/43] migration: Move migrate_use_block_incremental() to option.c Juan Quintela
` (23 subsequent siblings)
42 siblings, 1 reply; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/migration/migration.c b/migration/migration.c
index 028c297121..88bcaec08e 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -3800,7 +3800,7 @@ void migrate_fd_connect(MigrationState *s, Error *error_in)
if (resume) {
/* This is a resumed migration */
- rate_limit = s->parameters.max_postcopy_bandwidth /
+ rate_limit = migrate_max_postcopy_bandwidth() /
XFER_LIMIT_RATIO;
} else {
/* This is a fresh new migration */
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 20/43] migration: Move migrate_use_block_incremental() to option.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (18 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 19/43] migration: Use migrate_max_postcopy_bandwidth() Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 18:31 ` Vladimir Sementsov-Ogievskiy
2023-04-20 13:39 ` [PATCH v2 21/43] migration: Create migrate_throttle_trigger_threshold() Juan Quintela
` (22 subsequent siblings)
42 siblings, 1 reply; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
To be consistent with every other parameter, rename to migrate_block_incremental().
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/block.c | 2 +-
migration/migration.c | 11 +----------
migration/migration.h | 1 -
migration/options.c | 9 +++++++++
migration/options.h | 1 +
5 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/migration/block.c b/migration/block.c
index f0977217cf..6d532ac7a2 100644
--- a/migration/block.c
+++ b/migration/block.c
@@ -417,7 +417,7 @@ static int init_blk_migration(QEMUFile *f)
bmds->bulk_completed = 0;
bmds->total_sectors = sectors;
bmds->completed_sectors = 0;
- bmds->shared_base = migrate_use_block_incremental();
+ bmds->shared_base = migrate_block_incremental();
assert(i < num_bs);
bmds_bs[i].bmds = bmds;
diff --git a/migration/migration.c b/migration/migration.c
index 88bcaec08e..dbb89c2e7b 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2158,7 +2158,7 @@ static bool migrate_prepare(MigrationState *s, bool blk, bool blk_inc,
error_setg(errp, "No disk migration is required in COLO mode");
return false;
}
- if (migrate_block() || migrate_use_block_incremental()) {
+ if (migrate_block() || migrate_block_incremental()) {
error_setg(errp, "Command options are incompatible with "
"current migration capabilities");
return false;
@@ -2274,15 +2274,6 @@ int migrate_use_tls(void)
return s->parameters.tls_creds && *s->parameters.tls_creds;
}
-bool migrate_use_block_incremental(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.block_incremental;
-}
-
/* migration thread support */
/*
* Something bad happened to the RP stream, mark an error
diff --git a/migration/migration.h b/migration/migration.h
index 8451e5f2fe..86051af132 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -451,7 +451,6 @@ bool migrate_postcopy(void);
int migrate_use_tls(void);
-bool migrate_use_block_incremental(void);
int migrate_max_cpu_throttle(void);
uint64_t ram_get_total_transferred_pages(void);
diff --git a/migration/options.c b/migration/options.c
index 8d15be858c..2b6d88b4b9 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -463,6 +463,15 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
/* parameters */
+bool migrate_block_incremental(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.block_incremental;
+}
+
int migrate_compress_level(void)
{
MigrationState *s;
diff --git a/migration/options.h b/migration/options.h
index b24ee92283..96d5a8e6e4 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -45,6 +45,7 @@ bool migrate_cap_set(int cap, bool value, Error **errp);
/* parameters */
+bool migrate_block_incremental(void);
int migrate_compress_level(void);
int migrate_compress_threads(void);
int migrate_compress_wait_thread(void);
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 21/43] migration: Create migrate_throttle_trigger_threshold()
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (19 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 20/43] migration: Move migrate_use_block_incremental() to option.c Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 18:47 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 22/43] migration: Create migrate_checkpoint_delay() Juan Quintela
` (21 subsequent siblings)
42 siblings, 1 reply; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.c | 9 +++++++++
migration/options.h | 1 +
migration/ram.c | 3 +--
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/migration/options.c b/migration/options.c
index 2b6d88b4b9..b9f3815f7e 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -554,6 +554,15 @@ int migrate_multifd_zstd_level(void)
return s->parameters.multifd_zstd_level;
}
+uint8_t migrate_throttle_trigger_threshold(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.throttle_trigger_threshold;
+}
+
uint64_t migrate_xbzrle_cache_size(void)
{
MigrationState *s;
diff --git a/migration/options.h b/migration/options.h
index 96d5a8e6e4..aa54443353 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -55,6 +55,7 @@ int migrate_multifd_channels(void);
MultiFDCompression migrate_multifd_compression(void);
int migrate_multifd_zlib_level(void);
int migrate_multifd_zstd_level(void);
+uint8_t migrate_throttle_trigger_threshold(void);
uint64_t migrate_xbzrle_cache_size(void);
#endif
diff --git a/migration/ram.c b/migration/ram.c
index 7f28588dde..68801012ba 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -1179,8 +1179,7 @@ static void migration_update_rates(RAMState *rs, int64_t end_time)
static void migration_trigger_throttle(RAMState *rs)
{
- MigrationState *s = migrate_get_current();
- uint64_t threshold = s->parameters.throttle_trigger_threshold;
+ uint64_t threshold = migrate_throttle_trigger_threshold();
uint64_t bytes_xfer_period =
stat64_get(&ram_counters.transferred) - rs->bytes_xfer_prev;
uint64_t bytes_dirty_period = rs->num_dirty_pages_period * TARGET_PAGE_SIZE;
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 22/43] migration: Create migrate_checkpoint_delay()
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (20 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 21/43] migration: Create migrate_throttle_trigger_threshold() Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 19:00 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 23/43] migration: Create migrate_max_cpu_throttle() Juan Quintela
` (20 subsequent siblings)
42 siblings, 1 reply; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/colo.c | 5 ++---
migration/options.c | 9 +++++++++
migration/options.h | 1 +
3 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/migration/colo.c b/migration/colo.c
index 93b78c9270..07bfa21fea 100644
--- a/migration/colo.c
+++ b/migration/colo.c
@@ -576,7 +576,7 @@ static void colo_process_checkpoint(MigrationState *s)
trace_colo_vm_state_change("stop", "run");
timer_mod(s->colo_delay_timer, qemu_clock_get_ms(QEMU_CLOCK_HOST) +
- s->parameters.x_checkpoint_delay);
+ migrate_checkpoint_delay());
while (s->state == MIGRATION_STATUS_COLO) {
if (failover_get_state() != FAILOVER_STATUS_NONE) {
@@ -651,8 +651,7 @@ void colo_checkpoint_notify(void *opaque)
qemu_event_set(&s->colo_checkpoint_event);
s->colo_checkpoint_time = qemu_clock_get_ms(QEMU_CLOCK_HOST);
- next_notify_time = s->colo_checkpoint_time +
- s->parameters.x_checkpoint_delay;
+ next_notify_time = s->colo_checkpoint_time + migrate_checkpoint_delay();
timer_mod(s->colo_delay_timer, next_notify_time);
}
diff --git a/migration/options.c b/migration/options.c
index b9f3815f7e..0e102e5700 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -472,6 +472,15 @@ bool migrate_block_incremental(void)
return s->parameters.block_incremental;
}
+uint32_t migrate_checkpoint_delay(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.x_checkpoint_delay;
+}
+
int migrate_compress_level(void)
{
MigrationState *s;
diff --git a/migration/options.h b/migration/options.h
index aa54443353..adc2879bbb 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -46,6 +46,7 @@ bool migrate_cap_set(int cap, bool value, Error **errp);
/* parameters */
bool migrate_block_incremental(void);
+uint32_t migrate_checkpoint_delay(void);
int migrate_compress_level(void);
int migrate_compress_threads(void);
int migrate_compress_wait_thread(void);
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 23/43] migration: Create migrate_max_cpu_throttle()
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (21 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 22/43] migration: Create migrate_checkpoint_delay() Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 19:01 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 24/43] migration: Move migrate_announce_params() to option.c Juan Quintela
` (19 subsequent siblings)
42 siblings, 1 reply; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.h | 2 --
migration/options.c | 9 +++++++++
migration/options.h | 1 +
migration/ram.c | 2 +-
4 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/migration/migration.h b/migration/migration.h
index 86051af132..3ae938b19c 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -451,8 +451,6 @@ bool migrate_postcopy(void);
int migrate_use_tls(void);
-int migrate_max_cpu_throttle(void);
-
uint64_t ram_get_total_transferred_pages(void);
/* Sending on the return path - generic and then for each message type */
diff --git a/migration/options.c b/migration/options.c
index 0e102e5700..2cb04fbbd1 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -517,6 +517,15 @@ int migrate_decompress_threads(void)
return s->parameters.decompress_threads;
}
+uint8_t migrate_max_cpu_throttle(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.max_cpu_throttle;
+}
+
int64_t migrate_max_postcopy_bandwidth(void)
{
MigrationState *s;
diff --git a/migration/options.h b/migration/options.h
index adc2879bbb..72b1a320b7 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -51,6 +51,7 @@ int migrate_compress_level(void);
int migrate_compress_threads(void);
int migrate_compress_wait_thread(void);
int migrate_decompress_threads(void);
+uint8_t migrate_max_cpu_throttle(void);
int64_t migrate_max_postcopy_bandwidth(void);
int migrate_multifd_channels(void);
MultiFDCompression migrate_multifd_compression(void);
diff --git a/migration/ram.c b/migration/ram.c
index 68801012ba..2ab678bb45 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -715,7 +715,7 @@ static void mig_throttle_guest_down(uint64_t bytes_dirty_period,
uint64_t pct_initial = s->parameters.cpu_throttle_initial;
uint64_t pct_increment = s->parameters.cpu_throttle_increment;
bool pct_tailslow = s->parameters.cpu_throttle_tailslow;
- int pct_max = s->parameters.max_cpu_throttle;
+ int pct_max = migrate_max_cpu_throttle();
uint64_t throttle_now = cpu_throttle_get_percentage();
uint64_t cpu_now, cpu_ideal, throttle_inc;
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 24/43] migration: Move migrate_announce_params() to option.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (22 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 23/43] migration: Create migrate_max_cpu_throttle() Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 19:04 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 25/43] migration: Create migrate_cpu_throttle_initial() " Juan Quintela
` (18 subsequent siblings)
42 siblings, 1 reply; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 14 --------------
migration/options.c | 19 +++++++++++++++++++
2 files changed, 19 insertions(+), 14 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index dbb89c2e7b..2191437b15 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -954,20 +954,6 @@ MigrationParameters *qmp_query_migrate_parameters(Error **errp)
return params;
}
-AnnounceParameters *migrate_announce_params(void)
-{
- static AnnounceParameters ap;
-
- MigrationState *s = migrate_get_current();
-
- ap.initial = s->parameters.announce_initial;
- ap.max = s->parameters.announce_max;
- ap.rounds = s->parameters.announce_rounds;
- ap.step = s->parameters.announce_step;
-
- return ≈
-}
-
/*
* Return true if we're already in the middle of a migration
* (i.e. any of the active or setup states)
diff --git a/migration/options.c b/migration/options.c
index 2cb04fbbd1..ed9d2a226f 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -16,6 +16,7 @@
#include "qapi/qapi-commands-migration.h"
#include "qapi/qmp/qerror.h"
#include "sysemu/runstate.h"
+#include "migration/misc.h"
#include "migration.h"
#include "ram.h"
#include "options.h"
@@ -589,3 +590,21 @@ uint64_t migrate_xbzrle_cache_size(void)
return s->parameters.xbzrle_cache_size;
}
+
+/* parameters helpers */
+
+AnnounceParameters *migrate_announce_params(void)
+{
+ static AnnounceParameters ap;
+
+ MigrationState *s = migrate_get_current();
+
+ ap.initial = s->parameters.announce_initial;
+ ap.max = s->parameters.announce_max;
+ ap.rounds = s->parameters.announce_rounds;
+ ap.step = s->parameters.announce_step;
+
+ return ≈
+}
+
+
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 25/43] migration: Create migrate_cpu_throttle_initial() to option.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (23 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 24/43] migration: Move migrate_announce_params() to option.c Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 19:08 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 26/43] migration: Create migrate_cpu_throttle_increment() function Juan Quintela
` (17 subsequent siblings)
42 siblings, 1 reply; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.c | 9 +++++++++
migration/options.h | 1 +
migration/ram.c | 2 +-
3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/migration/options.c b/migration/options.c
index ed9d2a226f..34a1f58f96 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -509,6 +509,15 @@ int migrate_compress_wait_thread(void)
return s->parameters.compress_wait_thread;
}
+uint8_t migrate_cpu_throttle_initial(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.cpu_throttle_initial;
+}
+
int migrate_decompress_threads(void)
{
MigrationState *s;
diff --git a/migration/options.h b/migration/options.h
index 72b1a320b7..fd8b91d767 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -50,6 +50,7 @@ uint32_t migrate_checkpoint_delay(void);
int migrate_compress_level(void);
int migrate_compress_threads(void);
int migrate_compress_wait_thread(void);
+uint8_t migrate_cpu_throttle_initial(void);
int migrate_decompress_threads(void);
uint8_t migrate_max_cpu_throttle(void);
int64_t migrate_max_postcopy_bandwidth(void);
diff --git a/migration/ram.c b/migration/ram.c
index 2ab678bb45..70576b1f52 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -712,7 +712,7 @@ static void mig_throttle_guest_down(uint64_t bytes_dirty_period,
uint64_t bytes_dirty_threshold)
{
MigrationState *s = migrate_get_current();
- uint64_t pct_initial = s->parameters.cpu_throttle_initial;
+ uint64_t pct_initial = migrate_cpu_throttle_initial();
uint64_t pct_increment = s->parameters.cpu_throttle_increment;
bool pct_tailslow = s->parameters.cpu_throttle_tailslow;
int pct_max = migrate_max_cpu_throttle();
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 26/43] migration: Create migrate_cpu_throttle_increment() function
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (24 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 25/43] migration: Create migrate_cpu_throttle_initial() " Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 19:10 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 27/43] migration: Create migrate_cpu_throttle_tailslow() function Juan Quintela
` (16 subsequent siblings)
42 siblings, 1 reply; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.c | 9 +++++++++
migration/options.h | 1 +
migration/ram.c | 2 +-
3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/migration/options.c b/migration/options.c
index 34a1f58f96..e31d907d3d 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -509,6 +509,15 @@ int migrate_compress_wait_thread(void)
return s->parameters.compress_wait_thread;
}
+uint8_t migrate_cpu_throttle_increment(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.cpu_throttle_increment;
+}
+
uint8_t migrate_cpu_throttle_initial(void)
{
MigrationState *s;
diff --git a/migration/options.h b/migration/options.h
index fd8b91d767..49b29bdafd 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -50,6 +50,7 @@ uint32_t migrate_checkpoint_delay(void);
int migrate_compress_level(void);
int migrate_compress_threads(void);
int migrate_compress_wait_thread(void);
+uint8_t migrate_cpu_throttle_increment(void);
uint8_t migrate_cpu_throttle_initial(void);
int migrate_decompress_threads(void);
uint8_t migrate_max_cpu_throttle(void);
diff --git a/migration/ram.c b/migration/ram.c
index 70576b1f52..c29c47f94d 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -713,7 +713,7 @@ static void mig_throttle_guest_down(uint64_t bytes_dirty_period,
{
MigrationState *s = migrate_get_current();
uint64_t pct_initial = migrate_cpu_throttle_initial();
- uint64_t pct_increment = s->parameters.cpu_throttle_increment;
+ uint64_t pct_increment = migrate_cpu_throttle_increment();
bool pct_tailslow = s->parameters.cpu_throttle_tailslow;
int pct_max = migrate_max_cpu_throttle();
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 27/43] migration: Create migrate_cpu_throttle_tailslow() function
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (25 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 26/43] migration: Create migrate_cpu_throttle_increment() function Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 19:11 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 28/43] migration: Move migrate_use_tls() to options.c Juan Quintela
` (15 subsequent siblings)
42 siblings, 1 reply; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.c | 9 +++++++++
migration/options.h | 1 +
migration/ram.c | 3 +--
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/migration/options.c b/migration/options.c
index e31d907d3d..a111d0d43f 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -527,6 +527,15 @@ uint8_t migrate_cpu_throttle_initial(void)
return s->parameters.cpu_throttle_initial;
}
+bool migrate_cpu_throttle_tailslow(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.cpu_throttle_tailslow;
+}
+
int migrate_decompress_threads(void)
{
MigrationState *s;
diff --git a/migration/options.h b/migration/options.h
index 49b29bdafd..99f6bbd7a1 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -52,6 +52,7 @@ int migrate_compress_threads(void);
int migrate_compress_wait_thread(void);
uint8_t migrate_cpu_throttle_increment(void);
uint8_t migrate_cpu_throttle_initial(void);
+bool migrate_cpu_throttle_tailslow(void);
int migrate_decompress_threads(void);
uint8_t migrate_max_cpu_throttle(void);
int64_t migrate_max_postcopy_bandwidth(void);
diff --git a/migration/ram.c b/migration/ram.c
index c29c47f94d..3862ec0853 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -711,10 +711,9 @@ static size_t save_page_header(PageSearchStatus *pss, QEMUFile *f,
static void mig_throttle_guest_down(uint64_t bytes_dirty_period,
uint64_t bytes_dirty_threshold)
{
- MigrationState *s = migrate_get_current();
uint64_t pct_initial = migrate_cpu_throttle_initial();
uint64_t pct_increment = migrate_cpu_throttle_increment();
- bool pct_tailslow = s->parameters.cpu_throttle_tailslow;
+ bool pct_tailslow = migrate_cpu_throttle_tailslow();
int pct_max = migrate_max_cpu_throttle();
uint64_t throttle_now = cpu_throttle_get_percentage();
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 28/43] migration: Move migrate_use_tls() to options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (26 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 27/43] migration: Create migrate_cpu_throttle_tailslow() function Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 19:19 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 29/43] migration: Move migrate_postcopy() " Juan Quintela
` (14 subsequent siblings)
42 siblings, 1 reply; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Once there, rename it to migrate_tls() and make it return bool for
consistency.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 9 ---------
migration/migration.h | 2 --
migration/options.c | 16 +++++++++++++++-
migration/options.h | 9 +++++++++
migration/tls.c | 3 ++-
5 files changed, 26 insertions(+), 13 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 2191437b15..bbc9a07fd7 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2251,15 +2251,6 @@ bool migrate_postcopy(void)
return migrate_postcopy_ram() || migrate_dirty_bitmaps();
}
-int migrate_use_tls(void)
-{
- MigrationState *s;
-
- s = migrate_get_current();
-
- return s->parameters.tls_creds && *s->parameters.tls_creds;
-}
-
/* migration thread support */
/*
* Something bad happened to the RP stream, mark an error
diff --git a/migration/migration.h b/migration/migration.h
index 3ae938b19c..2099470e8e 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -449,8 +449,6 @@ MigrationState *migrate_get_current(void);
bool migrate_postcopy(void);
-int migrate_use_tls(void);
-
uint64_t ram_get_total_transferred_pages(void);
/* Sending on the return path - generic and then for each message type */
diff --git a/migration/options.c b/migration/options.c
index a111d0d43f..6db221157f 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -204,6 +204,20 @@ bool migrate_zero_copy_send(void)
return s->capabilities[MIGRATION_CAPABILITY_ZERO_COPY_SEND];
}
+
+/* pseudo capabilities */
+
+bool migrate_tls(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.tls_creds && *s->parameters.tls_creds;
+}
+
+
+
typedef enum WriteTrackingSupport {
WT_SUPPORT_UNKNOWN = 0,
WT_SUPPORT_ABSENT,
@@ -353,7 +367,7 @@ bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp)
new_caps[MIGRATION_CAPABILITY_COMPRESS] ||
new_caps[MIGRATION_CAPABILITY_XBZRLE] ||
migrate_multifd_compression() ||
- migrate_use_tls())) {
+ migrate_tls())) {
error_setg(errp,
"Zero copy only available for non-compressed non-TLS multifd migration");
return false;
diff --git a/migration/options.h b/migration/options.h
index 99f6bbd7a1..c91d5cbef0 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -38,6 +38,15 @@ bool migrate_xbzrle(void);
bool migrate_zero_blocks(void);
bool migrate_zero_copy_send(void);
+/*
+ * pseudo capabilities
+ *
+ * This are functions that are used in a similar way that capabilities
+ * check, but they are not a capability.
+ */
+
+bool migrate_tls(void);
+
/* capabilities helpers */
bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp);
diff --git a/migration/tls.c b/migration/tls.c
index 4d2166a209..acd38e0b62 100644
--- a/migration/tls.c
+++ b/migration/tls.c
@@ -22,6 +22,7 @@
#include "channel.h"
#include "migration.h"
#include "tls.h"
+#include "options.h"
#include "crypto/tlscreds.h"
#include "qemu/error-report.h"
#include "qapi/error.h"
@@ -165,7 +166,7 @@ void migration_tls_channel_connect(MigrationState *s,
bool migrate_channel_requires_tls_upgrade(QIOChannel *ioc)
{
- if (!migrate_use_tls()) {
+ if (!migrate_tls()) {
return false;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 29/43] migration: Move migrate_postcopy() to options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (27 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 28/43] migration: Move migrate_use_tls() to options.c Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 19:25 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 30/43] migration: Create migrate_max_bandwidth() function Juan Quintela
` (13 subsequent siblings)
42 siblings, 1 reply; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 5 -----
migration/migration.h | 2 --
migration/options.c | 5 +++++
migration/options.h | 1 +
4 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index bbc9a07fd7..efb098c4e4 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2246,11 +2246,6 @@ void qmp_migrate_continue(MigrationStatus state, Error **errp)
qemu_sem_post(&s->pause_sem);
}
-bool migrate_postcopy(void)
-{
- return migrate_postcopy_ram() || migrate_dirty_bitmaps();
-}
-
/* migration thread support */
/*
* Something bad happened to the RP stream, mark an error
diff --git a/migration/migration.h b/migration/migration.h
index 2099470e8e..2b71df8617 100644
--- a/migration/migration.h
+++ b/migration/migration.h
@@ -447,8 +447,6 @@ bool migration_is_blocked(Error **errp);
bool migration_in_postcopy(void);
MigrationState *migrate_get_current(void);
-bool migrate_postcopy(void);
-
uint64_t ram_get_total_transferred_pages(void);
/* Sending on the return path - generic and then for each message type */
diff --git a/migration/options.c b/migration/options.c
index 6db221157f..360faf53ca 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -207,6 +207,11 @@ bool migrate_zero_copy_send(void)
/* pseudo capabilities */
+bool migrate_postcopy(void)
+{
+ return migrate_postcopy_ram() || migrate_dirty_bitmaps();
+}
+
bool migrate_tls(void)
{
MigrationState *s;
diff --git a/migration/options.h b/migration/options.h
index c91d5cbef0..c1413c0e85 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -45,6 +45,7 @@ bool migrate_zero_copy_send(void);
* check, but they are not a capability.
*/
+bool migrate_postcopy(void);
bool migrate_tls(void);
/* capabilities helpers */
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 30/43] migration: Create migrate_max_bandwidth() function
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (28 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 29/43] migration: Move migrate_postcopy() " Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 19:30 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 31/43] migration: Move qmp_query_migrate_parameters() to options.c Juan Quintela
` (12 subsequent siblings)
42 siblings, 1 reply; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 2 +-
migration/options.c | 9 +++++++++
migration/options.h | 1 +
3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/migration/migration.c b/migration/migration.c
index efb098c4e4..2bbb4e888b 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -3767,7 +3767,7 @@ void migrate_fd_connect(MigrationState *s, Error *error_in)
XFER_LIMIT_RATIO;
} else {
/* This is a fresh new migration */
- rate_limit = s->parameters.max_bandwidth / XFER_LIMIT_RATIO;
+ rate_limit = migrate_max_bandwidth() / XFER_LIMIT_RATIO;
/* Notify before starting migration thread */
notifier_list_notify(&migration_state_notifiers, s);
diff --git a/migration/options.c b/migration/options.c
index 360faf53ca..0f4862b822 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -573,6 +573,15 @@ uint8_t migrate_max_cpu_throttle(void)
return s->parameters.max_cpu_throttle;
}
+uint64_t migrate_max_bandwidth(void)
+{
+ MigrationState *s;
+
+ s = migrate_get_current();
+
+ return s->parameters.max_bandwidth;
+}
+
int64_t migrate_max_postcopy_bandwidth(void)
{
MigrationState *s;
diff --git a/migration/options.h b/migration/options.h
index c1413c0e85..41d7c75662 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -65,6 +65,7 @@ uint8_t migrate_cpu_throttle_initial(void);
bool migrate_cpu_throttle_tailslow(void);
int migrate_decompress_threads(void);
uint8_t migrate_max_cpu_throttle(void);
+uint64_t migrate_max_bandwidth(void);
int64_t migrate_max_postcopy_bandwidth(void);
int migrate_multifd_channels(void);
MultiFDCompression migrate_multifd_compression(void);
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 31/43] migration: Move qmp_query_migrate_parameters() to options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (29 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 30/43] migration: Create migrate_max_bandwidth() function Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 32/43] migration: Move qmp_migrate_set_parameters() " Juan Quintela
` (11 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 68 -------------------------------------------
migration/options.c | 68 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 68 insertions(+), 68 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 2bbb4e888b..dee6d836bf 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -886,74 +886,6 @@ void migrate_send_rp_resume_ack(MigrationIncomingState *mis, uint32_t value)
migrate_send_rp_message(mis, MIG_RP_MSG_RESUME_ACK, sizeof(buf), &buf);
}
-MigrationParameters *qmp_query_migrate_parameters(Error **errp)
-{
- MigrationParameters *params;
- MigrationState *s = migrate_get_current();
-
- /* TODO use QAPI_CLONE() instead of duplicating it inline */
- params = g_malloc0(sizeof(*params));
- params->has_compress_level = true;
- params->compress_level = s->parameters.compress_level;
- params->has_compress_threads = true;
- params->compress_threads = s->parameters.compress_threads;
- params->has_compress_wait_thread = true;
- params->compress_wait_thread = s->parameters.compress_wait_thread;
- params->has_decompress_threads = true;
- params->decompress_threads = s->parameters.decompress_threads;
- params->has_throttle_trigger_threshold = true;
- params->throttle_trigger_threshold = s->parameters.throttle_trigger_threshold;
- params->has_cpu_throttle_initial = true;
- params->cpu_throttle_initial = s->parameters.cpu_throttle_initial;
- params->has_cpu_throttle_increment = true;
- params->cpu_throttle_increment = s->parameters.cpu_throttle_increment;
- params->has_cpu_throttle_tailslow = true;
- params->cpu_throttle_tailslow = s->parameters.cpu_throttle_tailslow;
- params->tls_creds = g_strdup(s->parameters.tls_creds);
- params->tls_hostname = g_strdup(s->parameters.tls_hostname);
- params->tls_authz = g_strdup(s->parameters.tls_authz ?
- s->parameters.tls_authz : "");
- params->has_max_bandwidth = true;
- params->max_bandwidth = s->parameters.max_bandwidth;
- params->has_downtime_limit = true;
- params->downtime_limit = s->parameters.downtime_limit;
- params->has_x_checkpoint_delay = true;
- params->x_checkpoint_delay = s->parameters.x_checkpoint_delay;
- params->has_block_incremental = true;
- params->block_incremental = s->parameters.block_incremental;
- params->has_multifd_channels = true;
- params->multifd_channels = s->parameters.multifd_channels;
- params->has_multifd_compression = true;
- params->multifd_compression = s->parameters.multifd_compression;
- params->has_multifd_zlib_level = true;
- params->multifd_zlib_level = s->parameters.multifd_zlib_level;
- params->has_multifd_zstd_level = true;
- params->multifd_zstd_level = s->parameters.multifd_zstd_level;
- params->has_xbzrle_cache_size = true;
- params->xbzrle_cache_size = s->parameters.xbzrle_cache_size;
- params->has_max_postcopy_bandwidth = true;
- params->max_postcopy_bandwidth = s->parameters.max_postcopy_bandwidth;
- params->has_max_cpu_throttle = true;
- params->max_cpu_throttle = s->parameters.max_cpu_throttle;
- params->has_announce_initial = true;
- params->announce_initial = s->parameters.announce_initial;
- params->has_announce_max = true;
- params->announce_max = s->parameters.announce_max;
- params->has_announce_rounds = true;
- params->announce_rounds = s->parameters.announce_rounds;
- params->has_announce_step = true;
- params->announce_step = s->parameters.announce_step;
-
- if (s->parameters.has_block_bitmap_mapping) {
- params->has_block_bitmap_mapping = true;
- params->block_bitmap_mapping =
- QAPI_CLONE(BitmapMigrationNodeAliasList,
- s->parameters.block_bitmap_mapping);
- }
-
- return params;
-}
-
/*
* Return true if we're already in the middle of a migration
* (i.e. any of the active or setup states)
diff --git a/migration/options.c b/migration/options.c
index 0f4862b822..ccbfb9bd90 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -12,8 +12,10 @@
*/
#include "qemu/osdep.h"
+#include "qapi/clone-visitor.h"
#include "qapi/error.h"
#include "qapi/qapi-commands-migration.h"
+#include "qapi/qapi-visit-migration.h"
#include "qapi/qmp/qerror.h"
#include "sysemu/runstate.h"
#include "migration/misc.h"
@@ -662,4 +664,70 @@ AnnounceParameters *migrate_announce_params(void)
return ≈
}
+MigrationParameters *qmp_query_migrate_parameters(Error **errp)
+{
+ MigrationParameters *params;
+ MigrationState *s = migrate_get_current();
+ /* TODO use QAPI_CLONE() instead of duplicating it inline */
+ params = g_malloc0(sizeof(*params));
+ params->has_compress_level = true;
+ params->compress_level = s->parameters.compress_level;
+ params->has_compress_threads = true;
+ params->compress_threads = s->parameters.compress_threads;
+ params->has_compress_wait_thread = true;
+ params->compress_wait_thread = s->parameters.compress_wait_thread;
+ params->has_decompress_threads = true;
+ params->decompress_threads = s->parameters.decompress_threads;
+ params->has_throttle_trigger_threshold = true;
+ params->throttle_trigger_threshold = s->parameters.throttle_trigger_threshold;
+ params->has_cpu_throttle_initial = true;
+ params->cpu_throttle_initial = s->parameters.cpu_throttle_initial;
+ params->has_cpu_throttle_increment = true;
+ params->cpu_throttle_increment = s->parameters.cpu_throttle_increment;
+ params->has_cpu_throttle_tailslow = true;
+ params->cpu_throttle_tailslow = s->parameters.cpu_throttle_tailslow;
+ params->tls_creds = g_strdup(s->parameters.tls_creds);
+ params->tls_hostname = g_strdup(s->parameters.tls_hostname);
+ params->tls_authz = g_strdup(s->parameters.tls_authz ?
+ s->parameters.tls_authz : "");
+ params->has_max_bandwidth = true;
+ params->max_bandwidth = s->parameters.max_bandwidth;
+ params->has_downtime_limit = true;
+ params->downtime_limit = s->parameters.downtime_limit;
+ params->has_x_checkpoint_delay = true;
+ params->x_checkpoint_delay = s->parameters.x_checkpoint_delay;
+ params->has_block_incremental = true;
+ params->block_incremental = s->parameters.block_incremental;
+ params->has_multifd_channels = true;
+ params->multifd_channels = s->parameters.multifd_channels;
+ params->has_multifd_compression = true;
+ params->multifd_compression = s->parameters.multifd_compression;
+ params->has_multifd_zlib_level = true;
+ params->multifd_zlib_level = s->parameters.multifd_zlib_level;
+ params->has_multifd_zstd_level = true;
+ params->multifd_zstd_level = s->parameters.multifd_zstd_level;
+ params->has_xbzrle_cache_size = true;
+ params->xbzrle_cache_size = s->parameters.xbzrle_cache_size;
+ params->has_max_postcopy_bandwidth = true;
+ params->max_postcopy_bandwidth = s->parameters.max_postcopy_bandwidth;
+ params->has_max_cpu_throttle = true;
+ params->max_cpu_throttle = s->parameters.max_cpu_throttle;
+ params->has_announce_initial = true;
+ params->announce_initial = s->parameters.announce_initial;
+ params->has_announce_max = true;
+ params->announce_max = s->parameters.announce_max;
+ params->has_announce_rounds = true;
+ params->announce_rounds = s->parameters.announce_rounds;
+ params->has_announce_step = true;
+ params->announce_step = s->parameters.announce_step;
+
+ if (s->parameters.has_block_bitmap_mapping) {
+ params->has_block_bitmap_mapping = true;
+ params->block_bitmap_mapping =
+ QAPI_CLONE(BitmapMigrationNodeAliasList,
+ s->parameters.block_bitmap_mapping);
+ }
+
+ return params;
+}
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 32/43] migration: Move qmp_migrate_set_parameters() to options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (30 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 31/43] migration: Move qmp_query_migrate_parameters() to options.c Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 33/43] migration: Create migrate_params_init() function Juan Quintela
` (10 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 420 ------------------------------------------
migration/options.c | 418 +++++++++++++++++++++++++++++++++++++++++
migration/options.h | 11 ++
3 files changed, 429 insertions(+), 420 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index dee6d836bf..5599b8ac5b 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -67,19 +67,10 @@
#define MAX_THROTTLE (128 << 20) /* Migration transfer speed throttling */
-/* Amount of time to allocate to each "chunk" of bandwidth-throttled
- * data. */
-#define BUFFER_DELAY 100
-#define XFER_LIMIT_RATIO (1000 / BUFFER_DELAY)
-
/* Time in milliseconds we are allowed to stop the source,
* for sending the last part */
#define DEFAULT_MIGRATE_SET_DOWNTIME 300
-/* Maximum migrate downtime set to 2000 seconds */
-#define MAX_MIGRATE_DOWNTIME_SECONDS 2000
-#define MAX_MIGRATE_DOWNTIME (MAX_MIGRATE_DOWNTIME_SECONDS * 1000)
-
/* Default compression thread count */
#define DEFAULT_MIGRATE_COMPRESS_THREAD_COUNT 8
/* Default decompression thread count, usually decompression is at
@@ -1141,417 +1132,6 @@ MigrationInfo *qmp_query_migrate(Error **errp)
return info;
}
-/*
- * Check whether the parameters are valid. Error will be put into errp
- * (if provided). Return true if valid, otherwise false.
- */
-static bool migrate_params_check(MigrationParameters *params, Error **errp)
-{
- if (params->has_compress_level &&
- (params->compress_level > 9)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "compress_level",
- "a value between 0 and 9");
- return false;
- }
-
- if (params->has_compress_threads && (params->compress_threads < 1)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "compress_threads",
- "a value between 1 and 255");
- return false;
- }
-
- if (params->has_decompress_threads && (params->decompress_threads < 1)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "decompress_threads",
- "a value between 1 and 255");
- return false;
- }
-
- if (params->has_throttle_trigger_threshold &&
- (params->throttle_trigger_threshold < 1 ||
- params->throttle_trigger_threshold > 100)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "throttle_trigger_threshold",
- "an integer in the range of 1 to 100");
- return false;
- }
-
- if (params->has_cpu_throttle_initial &&
- (params->cpu_throttle_initial < 1 ||
- params->cpu_throttle_initial > 99)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "cpu_throttle_initial",
- "an integer in the range of 1 to 99");
- return false;
- }
-
- if (params->has_cpu_throttle_increment &&
- (params->cpu_throttle_increment < 1 ||
- params->cpu_throttle_increment > 99)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "cpu_throttle_increment",
- "an integer in the range of 1 to 99");
- return false;
- }
-
- if (params->has_max_bandwidth && (params->max_bandwidth > SIZE_MAX)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "max_bandwidth",
- "an integer in the range of 0 to "stringify(SIZE_MAX)
- " bytes/second");
- return false;
- }
-
- if (params->has_downtime_limit &&
- (params->downtime_limit > MAX_MIGRATE_DOWNTIME)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "downtime_limit",
- "an integer in the range of 0 to "
- stringify(MAX_MIGRATE_DOWNTIME)" ms");
- return false;
- }
-
- /* x_checkpoint_delay is now always positive */
-
- if (params->has_multifd_channels && (params->multifd_channels < 1)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "multifd_channels",
- "a value between 1 and 255");
- return false;
- }
-
- if (params->has_multifd_zlib_level &&
- (params->multifd_zlib_level > 9)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "multifd_zlib_level",
- "a value between 0 and 9");
- return false;
- }
-
- if (params->has_multifd_zstd_level &&
- (params->multifd_zstd_level > 20)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "multifd_zstd_level",
- "a value between 0 and 20");
- return false;
- }
-
- if (params->has_xbzrle_cache_size &&
- (params->xbzrle_cache_size < qemu_target_page_size() ||
- !is_power_of_2(params->xbzrle_cache_size))) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "xbzrle_cache_size",
- "a power of two no less than the target page size");
- return false;
- }
-
- if (params->has_max_cpu_throttle &&
- (params->max_cpu_throttle < params->cpu_throttle_initial ||
- params->max_cpu_throttle > 99)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "max_cpu_throttle",
- "an integer in the range of cpu_throttle_initial to 99");
- return false;
- }
-
- if (params->has_announce_initial &&
- params->announce_initial > 100000) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "announce_initial",
- "a value between 0 and 100000");
- return false;
- }
- if (params->has_announce_max &&
- params->announce_max > 100000) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "announce_max",
- "a value between 0 and 100000");
- return false;
- }
- if (params->has_announce_rounds &&
- params->announce_rounds > 1000) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "announce_rounds",
- "a value between 0 and 1000");
- return false;
- }
- if (params->has_announce_step &&
- (params->announce_step < 1 ||
- params->announce_step > 10000)) {
- error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
- "announce_step",
- "a value between 0 and 10000");
- return false;
- }
-
- if (params->has_block_bitmap_mapping &&
- !check_dirty_bitmap_mig_alias_map(params->block_bitmap_mapping, errp)) {
- error_prepend(errp, "Invalid mapping given for block-bitmap-mapping: ");
- return false;
- }
-
-#ifdef CONFIG_LINUX
- if (migrate_zero_copy_send() &&
- ((params->has_multifd_compression && params->multifd_compression) ||
- (params->tls_creds && *params->tls_creds))) {
- error_setg(errp,
- "Zero copy only available for non-compressed non-TLS multifd migration");
- return false;
- }
-#endif
-
- return true;
-}
-
-static void migrate_params_test_apply(MigrateSetParameters *params,
- MigrationParameters *dest)
-{
- *dest = migrate_get_current()->parameters;
-
- /* TODO use QAPI_CLONE() instead of duplicating it inline */
-
- if (params->has_compress_level) {
- dest->compress_level = params->compress_level;
- }
-
- if (params->has_compress_threads) {
- dest->compress_threads = params->compress_threads;
- }
-
- if (params->has_compress_wait_thread) {
- dest->compress_wait_thread = params->compress_wait_thread;
- }
-
- if (params->has_decompress_threads) {
- dest->decompress_threads = params->decompress_threads;
- }
-
- if (params->has_throttle_trigger_threshold) {
- dest->throttle_trigger_threshold = params->throttle_trigger_threshold;
- }
-
- if (params->has_cpu_throttle_initial) {
- dest->cpu_throttle_initial = params->cpu_throttle_initial;
- }
-
- if (params->has_cpu_throttle_increment) {
- dest->cpu_throttle_increment = params->cpu_throttle_increment;
- }
-
- if (params->has_cpu_throttle_tailslow) {
- dest->cpu_throttle_tailslow = params->cpu_throttle_tailslow;
- }
-
- if (params->tls_creds) {
- assert(params->tls_creds->type == QTYPE_QSTRING);
- dest->tls_creds = params->tls_creds->u.s;
- }
-
- if (params->tls_hostname) {
- assert(params->tls_hostname->type == QTYPE_QSTRING);
- dest->tls_hostname = params->tls_hostname->u.s;
- }
-
- if (params->has_max_bandwidth) {
- dest->max_bandwidth = params->max_bandwidth;
- }
-
- if (params->has_downtime_limit) {
- dest->downtime_limit = params->downtime_limit;
- }
-
- if (params->has_x_checkpoint_delay) {
- dest->x_checkpoint_delay = params->x_checkpoint_delay;
- }
-
- if (params->has_block_incremental) {
- dest->block_incremental = params->block_incremental;
- }
- if (params->has_multifd_channels) {
- dest->multifd_channels = params->multifd_channels;
- }
- if (params->has_multifd_compression) {
- dest->multifd_compression = params->multifd_compression;
- }
- if (params->has_xbzrle_cache_size) {
- dest->xbzrle_cache_size = params->xbzrle_cache_size;
- }
- if (params->has_max_postcopy_bandwidth) {
- dest->max_postcopy_bandwidth = params->max_postcopy_bandwidth;
- }
- if (params->has_max_cpu_throttle) {
- dest->max_cpu_throttle = params->max_cpu_throttle;
- }
- if (params->has_announce_initial) {
- dest->announce_initial = params->announce_initial;
- }
- if (params->has_announce_max) {
- dest->announce_max = params->announce_max;
- }
- if (params->has_announce_rounds) {
- dest->announce_rounds = params->announce_rounds;
- }
- if (params->has_announce_step) {
- dest->announce_step = params->announce_step;
- }
-
- if (params->has_block_bitmap_mapping) {
- dest->has_block_bitmap_mapping = true;
- dest->block_bitmap_mapping = params->block_bitmap_mapping;
- }
-}
-
-static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
-{
- MigrationState *s = migrate_get_current();
-
- /* TODO use QAPI_CLONE() instead of duplicating it inline */
-
- if (params->has_compress_level) {
- s->parameters.compress_level = params->compress_level;
- }
-
- if (params->has_compress_threads) {
- s->parameters.compress_threads = params->compress_threads;
- }
-
- if (params->has_compress_wait_thread) {
- s->parameters.compress_wait_thread = params->compress_wait_thread;
- }
-
- if (params->has_decompress_threads) {
- s->parameters.decompress_threads = params->decompress_threads;
- }
-
- if (params->has_throttle_trigger_threshold) {
- s->parameters.throttle_trigger_threshold = params->throttle_trigger_threshold;
- }
-
- if (params->has_cpu_throttle_initial) {
- s->parameters.cpu_throttle_initial = params->cpu_throttle_initial;
- }
-
- if (params->has_cpu_throttle_increment) {
- s->parameters.cpu_throttle_increment = params->cpu_throttle_increment;
- }
-
- if (params->has_cpu_throttle_tailslow) {
- s->parameters.cpu_throttle_tailslow = params->cpu_throttle_tailslow;
- }
-
- if (params->tls_creds) {
- g_free(s->parameters.tls_creds);
- assert(params->tls_creds->type == QTYPE_QSTRING);
- s->parameters.tls_creds = g_strdup(params->tls_creds->u.s);
- }
-
- if (params->tls_hostname) {
- g_free(s->parameters.tls_hostname);
- assert(params->tls_hostname->type == QTYPE_QSTRING);
- s->parameters.tls_hostname = g_strdup(params->tls_hostname->u.s);
- }
-
- if (params->tls_authz) {
- g_free(s->parameters.tls_authz);
- assert(params->tls_authz->type == QTYPE_QSTRING);
- s->parameters.tls_authz = g_strdup(params->tls_authz->u.s);
- }
-
- if (params->has_max_bandwidth) {
- s->parameters.max_bandwidth = params->max_bandwidth;
- if (s->to_dst_file && !migration_in_postcopy()) {
- qemu_file_set_rate_limit(s->to_dst_file,
- s->parameters.max_bandwidth / XFER_LIMIT_RATIO);
- }
- }
-
- if (params->has_downtime_limit) {
- s->parameters.downtime_limit = params->downtime_limit;
- }
-
- if (params->has_x_checkpoint_delay) {
- s->parameters.x_checkpoint_delay = params->x_checkpoint_delay;
- if (migration_in_colo_state()) {
- colo_checkpoint_notify(s);
- }
- }
-
- if (params->has_block_incremental) {
- s->parameters.block_incremental = params->block_incremental;
- }
- if (params->has_multifd_channels) {
- s->parameters.multifd_channels = params->multifd_channels;
- }
- if (params->has_multifd_compression) {
- s->parameters.multifd_compression = params->multifd_compression;
- }
- if (params->has_xbzrle_cache_size) {
- s->parameters.xbzrle_cache_size = params->xbzrle_cache_size;
- xbzrle_cache_resize(params->xbzrle_cache_size, errp);
- }
- if (params->has_max_postcopy_bandwidth) {
- s->parameters.max_postcopy_bandwidth = params->max_postcopy_bandwidth;
- if (s->to_dst_file && migration_in_postcopy()) {
- qemu_file_set_rate_limit(s->to_dst_file,
- s->parameters.max_postcopy_bandwidth / XFER_LIMIT_RATIO);
- }
- }
- if (params->has_max_cpu_throttle) {
- s->parameters.max_cpu_throttle = params->max_cpu_throttle;
- }
- if (params->has_announce_initial) {
- s->parameters.announce_initial = params->announce_initial;
- }
- if (params->has_announce_max) {
- s->parameters.announce_max = params->announce_max;
- }
- if (params->has_announce_rounds) {
- s->parameters.announce_rounds = params->announce_rounds;
- }
- if (params->has_announce_step) {
- s->parameters.announce_step = params->announce_step;
- }
-
- if (params->has_block_bitmap_mapping) {
- qapi_free_BitmapMigrationNodeAliasList(
- s->parameters.block_bitmap_mapping);
-
- s->parameters.has_block_bitmap_mapping = true;
- s->parameters.block_bitmap_mapping =
- QAPI_CLONE(BitmapMigrationNodeAliasList,
- params->block_bitmap_mapping);
- }
-}
-
-void qmp_migrate_set_parameters(MigrateSetParameters *params, Error **errp)
-{
- MigrationParameters tmp;
-
- /* TODO Rewrite "" to null instead */
- if (params->tls_creds
- && params->tls_creds->type == QTYPE_QNULL) {
- qobject_unref(params->tls_creds->u.n);
- params->tls_creds->type = QTYPE_QSTRING;
- params->tls_creds->u.s = strdup("");
- }
- /* TODO Rewrite "" to null instead */
- if (params->tls_hostname
- && params->tls_hostname->type == QTYPE_QNULL) {
- qobject_unref(params->tls_hostname->u.n);
- params->tls_hostname->type = QTYPE_QSTRING;
- params->tls_hostname->u.s = strdup("");
- }
-
- migrate_params_test_apply(params, &tmp);
-
- if (!migrate_params_check(&tmp, errp)) {
- /* Invalid parameter */
- return;
- }
-
- migrate_params_apply(params, errp);
-}
-
-
void qmp_migrate_start_postcopy(Error **errp)
{
MigrationState *s = migrate_get_current();
diff --git a/migration/options.c b/migration/options.c
index ccbfb9bd90..255a5433b4 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -12,17 +12,25 @@
*/
#include "qemu/osdep.h"
+#include "exec/target_page.h"
#include "qapi/clone-visitor.h"
#include "qapi/error.h"
#include "qapi/qapi-commands-migration.h"
#include "qapi/qapi-visit-migration.h"
#include "qapi/qmp/qerror.h"
+#include "qapi/qmp/qnull.h"
#include "sysemu/runstate.h"
+#include "migration/colo.h"
#include "migration/misc.h"
#include "migration.h"
+#include "qemu-file.h"
#include "ram.h"
#include "options.h"
+/* Maximum migrate downtime set to 2000 seconds */
+#define MAX_MIGRATE_DOWNTIME_SECONDS 2000
+#define MAX_MIGRATE_DOWNTIME (MAX_MIGRATE_DOWNTIME_SECONDS * 1000)
+
bool migrate_auto_converge(void)
{
MigrationState *s;
@@ -731,3 +739,413 @@ MigrationParameters *qmp_query_migrate_parameters(Error **errp)
return params;
}
+
+/*
+ * Check whether the parameters are valid. Error will be put into errp
+ * (if provided). Return true if valid, otherwise false.
+ */
+bool migrate_params_check(MigrationParameters *params, Error **errp)
+{
+ if (params->has_compress_level &&
+ (params->compress_level > 9)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "compress_level",
+ "a value between 0 and 9");
+ return false;
+ }
+
+ if (params->has_compress_threads && (params->compress_threads < 1)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "compress_threads",
+ "a value between 1 and 255");
+ return false;
+ }
+
+ if (params->has_decompress_threads && (params->decompress_threads < 1)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "decompress_threads",
+ "a value between 1 and 255");
+ return false;
+ }
+
+ if (params->has_throttle_trigger_threshold &&
+ (params->throttle_trigger_threshold < 1 ||
+ params->throttle_trigger_threshold > 100)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "throttle_trigger_threshold",
+ "an integer in the range of 1 to 100");
+ return false;
+ }
+
+ if (params->has_cpu_throttle_initial &&
+ (params->cpu_throttle_initial < 1 ||
+ params->cpu_throttle_initial > 99)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "cpu_throttle_initial",
+ "an integer in the range of 1 to 99");
+ return false;
+ }
+
+ if (params->has_cpu_throttle_increment &&
+ (params->cpu_throttle_increment < 1 ||
+ params->cpu_throttle_increment > 99)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "cpu_throttle_increment",
+ "an integer in the range of 1 to 99");
+ return false;
+ }
+
+ if (params->has_max_bandwidth && (params->max_bandwidth > SIZE_MAX)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "max_bandwidth",
+ "an integer in the range of 0 to "stringify(SIZE_MAX)
+ " bytes/second");
+ return false;
+ }
+
+ if (params->has_downtime_limit &&
+ (params->downtime_limit > MAX_MIGRATE_DOWNTIME)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "downtime_limit",
+ "an integer in the range of 0 to "
+ stringify(MAX_MIGRATE_DOWNTIME)" ms");
+ return false;
+ }
+
+ /* x_checkpoint_delay is now always positive */
+
+ if (params->has_multifd_channels && (params->multifd_channels < 1)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "multifd_channels",
+ "a value between 1 and 255");
+ return false;
+ }
+
+ if (params->has_multifd_zlib_level &&
+ (params->multifd_zlib_level > 9)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "multifd_zlib_level",
+ "a value between 0 and 9");
+ return false;
+ }
+
+ if (params->has_multifd_zstd_level &&
+ (params->multifd_zstd_level > 20)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "multifd_zstd_level",
+ "a value between 0 and 20");
+ return false;
+ }
+
+ if (params->has_xbzrle_cache_size &&
+ (params->xbzrle_cache_size < qemu_target_page_size() ||
+ !is_power_of_2(params->xbzrle_cache_size))) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "xbzrle_cache_size",
+ "a power of two no less than the target page size");
+ return false;
+ }
+
+ if (params->has_max_cpu_throttle &&
+ (params->max_cpu_throttle < params->cpu_throttle_initial ||
+ params->max_cpu_throttle > 99)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "max_cpu_throttle",
+ "an integer in the range of cpu_throttle_initial to 99");
+ return false;
+ }
+
+ if (params->has_announce_initial &&
+ params->announce_initial > 100000) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "announce_initial",
+ "a value between 0 and 100000");
+ return false;
+ }
+ if (params->has_announce_max &&
+ params->announce_max > 100000) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "announce_max",
+ "a value between 0 and 100000");
+ return false;
+ }
+ if (params->has_announce_rounds &&
+ params->announce_rounds > 1000) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "announce_rounds",
+ "a value between 0 and 1000");
+ return false;
+ }
+ if (params->has_announce_step &&
+ (params->announce_step < 1 ||
+ params->announce_step > 10000)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+ "announce_step",
+ "a value between 0 and 10000");
+ return false;
+ }
+
+ if (params->has_block_bitmap_mapping &&
+ !check_dirty_bitmap_mig_alias_map(params->block_bitmap_mapping, errp)) {
+ error_prepend(errp, "Invalid mapping given for block-bitmap-mapping: ");
+ return false;
+ }
+
+#ifdef CONFIG_LINUX
+ if (migrate_zero_copy_send() &&
+ ((params->has_multifd_compression && params->multifd_compression) ||
+ (params->tls_creds && *params->tls_creds))) {
+ error_setg(errp,
+ "Zero copy only available for non-compressed non-TLS multifd migration");
+ return false;
+ }
+#endif
+
+ return true;
+}
+
+static void migrate_params_test_apply(MigrateSetParameters *params,
+ MigrationParameters *dest)
+{
+ *dest = migrate_get_current()->parameters;
+
+ /* TODO use QAPI_CLONE() instead of duplicating it inline */
+
+ if (params->has_compress_level) {
+ dest->compress_level = params->compress_level;
+ }
+
+ if (params->has_compress_threads) {
+ dest->compress_threads = params->compress_threads;
+ }
+
+ if (params->has_compress_wait_thread) {
+ dest->compress_wait_thread = params->compress_wait_thread;
+ }
+
+ if (params->has_decompress_threads) {
+ dest->decompress_threads = params->decompress_threads;
+ }
+
+ if (params->has_throttle_trigger_threshold) {
+ dest->throttle_trigger_threshold = params->throttle_trigger_threshold;
+ }
+
+ if (params->has_cpu_throttle_initial) {
+ dest->cpu_throttle_initial = params->cpu_throttle_initial;
+ }
+
+ if (params->has_cpu_throttle_increment) {
+ dest->cpu_throttle_increment = params->cpu_throttle_increment;
+ }
+
+ if (params->has_cpu_throttle_tailslow) {
+ dest->cpu_throttle_tailslow = params->cpu_throttle_tailslow;
+ }
+
+ if (params->tls_creds) {
+ assert(params->tls_creds->type == QTYPE_QSTRING);
+ dest->tls_creds = params->tls_creds->u.s;
+ }
+
+ if (params->tls_hostname) {
+ assert(params->tls_hostname->type == QTYPE_QSTRING);
+ dest->tls_hostname = params->tls_hostname->u.s;
+ }
+
+ if (params->has_max_bandwidth) {
+ dest->max_bandwidth = params->max_bandwidth;
+ }
+
+ if (params->has_downtime_limit) {
+ dest->downtime_limit = params->downtime_limit;
+ }
+
+ if (params->has_x_checkpoint_delay) {
+ dest->x_checkpoint_delay = params->x_checkpoint_delay;
+ }
+
+ if (params->has_block_incremental) {
+ dest->block_incremental = params->block_incremental;
+ }
+ if (params->has_multifd_channels) {
+ dest->multifd_channels = params->multifd_channels;
+ }
+ if (params->has_multifd_compression) {
+ dest->multifd_compression = params->multifd_compression;
+ }
+ if (params->has_xbzrle_cache_size) {
+ dest->xbzrle_cache_size = params->xbzrle_cache_size;
+ }
+ if (params->has_max_postcopy_bandwidth) {
+ dest->max_postcopy_bandwidth = params->max_postcopy_bandwidth;
+ }
+ if (params->has_max_cpu_throttle) {
+ dest->max_cpu_throttle = params->max_cpu_throttle;
+ }
+ if (params->has_announce_initial) {
+ dest->announce_initial = params->announce_initial;
+ }
+ if (params->has_announce_max) {
+ dest->announce_max = params->announce_max;
+ }
+ if (params->has_announce_rounds) {
+ dest->announce_rounds = params->announce_rounds;
+ }
+ if (params->has_announce_step) {
+ dest->announce_step = params->announce_step;
+ }
+
+ if (params->has_block_bitmap_mapping) {
+ dest->has_block_bitmap_mapping = true;
+ dest->block_bitmap_mapping = params->block_bitmap_mapping;
+ }
+}
+
+static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
+{
+ MigrationState *s = migrate_get_current();
+
+ /* TODO use QAPI_CLONE() instead of duplicating it inline */
+
+ if (params->has_compress_level) {
+ s->parameters.compress_level = params->compress_level;
+ }
+
+ if (params->has_compress_threads) {
+ s->parameters.compress_threads = params->compress_threads;
+ }
+
+ if (params->has_compress_wait_thread) {
+ s->parameters.compress_wait_thread = params->compress_wait_thread;
+ }
+
+ if (params->has_decompress_threads) {
+ s->parameters.decompress_threads = params->decompress_threads;
+ }
+
+ if (params->has_throttle_trigger_threshold) {
+ s->parameters.throttle_trigger_threshold = params->throttle_trigger_threshold;
+ }
+
+ if (params->has_cpu_throttle_initial) {
+ s->parameters.cpu_throttle_initial = params->cpu_throttle_initial;
+ }
+
+ if (params->has_cpu_throttle_increment) {
+ s->parameters.cpu_throttle_increment = params->cpu_throttle_increment;
+ }
+
+ if (params->has_cpu_throttle_tailslow) {
+ s->parameters.cpu_throttle_tailslow = params->cpu_throttle_tailslow;
+ }
+
+ if (params->tls_creds) {
+ g_free(s->parameters.tls_creds);
+ assert(params->tls_creds->type == QTYPE_QSTRING);
+ s->parameters.tls_creds = g_strdup(params->tls_creds->u.s);
+ }
+
+ if (params->tls_hostname) {
+ g_free(s->parameters.tls_hostname);
+ assert(params->tls_hostname->type == QTYPE_QSTRING);
+ s->parameters.tls_hostname = g_strdup(params->tls_hostname->u.s);
+ }
+
+ if (params->tls_authz) {
+ g_free(s->parameters.tls_authz);
+ assert(params->tls_authz->type == QTYPE_QSTRING);
+ s->parameters.tls_authz = g_strdup(params->tls_authz->u.s);
+ }
+
+ if (params->has_max_bandwidth) {
+ s->parameters.max_bandwidth = params->max_bandwidth;
+ if (s->to_dst_file && !migration_in_postcopy()) {
+ qemu_file_set_rate_limit(s->to_dst_file,
+ s->parameters.max_bandwidth / XFER_LIMIT_RATIO);
+ }
+ }
+
+ if (params->has_downtime_limit) {
+ s->parameters.downtime_limit = params->downtime_limit;
+ }
+
+ if (params->has_x_checkpoint_delay) {
+ s->parameters.x_checkpoint_delay = params->x_checkpoint_delay;
+ if (migration_in_colo_state()) {
+ colo_checkpoint_notify(s);
+ }
+ }
+
+ if (params->has_block_incremental) {
+ s->parameters.block_incremental = params->block_incremental;
+ }
+ if (params->has_multifd_channels) {
+ s->parameters.multifd_channels = params->multifd_channels;
+ }
+ if (params->has_multifd_compression) {
+ s->parameters.multifd_compression = params->multifd_compression;
+ }
+ if (params->has_xbzrle_cache_size) {
+ s->parameters.xbzrle_cache_size = params->xbzrle_cache_size;
+ xbzrle_cache_resize(params->xbzrle_cache_size, errp);
+ }
+ if (params->has_max_postcopy_bandwidth) {
+ s->parameters.max_postcopy_bandwidth = params->max_postcopy_bandwidth;
+ if (s->to_dst_file && migration_in_postcopy()) {
+ qemu_file_set_rate_limit(s->to_dst_file,
+ s->parameters.max_postcopy_bandwidth / XFER_LIMIT_RATIO);
+ }
+ }
+ if (params->has_max_cpu_throttle) {
+ s->parameters.max_cpu_throttle = params->max_cpu_throttle;
+ }
+ if (params->has_announce_initial) {
+ s->parameters.announce_initial = params->announce_initial;
+ }
+ if (params->has_announce_max) {
+ s->parameters.announce_max = params->announce_max;
+ }
+ if (params->has_announce_rounds) {
+ s->parameters.announce_rounds = params->announce_rounds;
+ }
+ if (params->has_announce_step) {
+ s->parameters.announce_step = params->announce_step;
+ }
+
+ if (params->has_block_bitmap_mapping) {
+ qapi_free_BitmapMigrationNodeAliasList(
+ s->parameters.block_bitmap_mapping);
+
+ s->parameters.has_block_bitmap_mapping = true;
+ s->parameters.block_bitmap_mapping =
+ QAPI_CLONE(BitmapMigrationNodeAliasList,
+ params->block_bitmap_mapping);
+ }
+}
+
+void qmp_migrate_set_parameters(MigrateSetParameters *params, Error **errp)
+{
+ MigrationParameters tmp;
+
+ /* TODO Rewrite "" to null instead */
+ if (params->tls_creds
+ && params->tls_creds->type == QTYPE_QNULL) {
+ qobject_unref(params->tls_creds->u.n);
+ params->tls_creds->type = QTYPE_QSTRING;
+ params->tls_creds->u.s = strdup("");
+ }
+ /* TODO Rewrite "" to null instead */
+ if (params->tls_hostname
+ && params->tls_hostname->type == QTYPE_QNULL) {
+ qobject_unref(params->tls_hostname->u.n);
+ params->tls_hostname->type = QTYPE_QSTRING;
+ params->tls_hostname->u.s = strdup("");
+ }
+
+ migrate_params_test_apply(params, &tmp);
+
+ if (!migrate_params_check(&tmp, errp)) {
+ /* Invalid parameter */
+ return;
+ }
+
+ migrate_params_apply(params, errp);
+}
diff --git a/migration/options.h b/migration/options.h
index 41d7c75662..86b0d7fd88 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -14,6 +14,13 @@
#ifndef QEMU_MIGRATION_OPTIONS_H
#define QEMU_MIGRATION_OPTIONS_H
+/* constants */
+
+/* Amount of time to allocate to each "chunk" of bandwidth-throttled
+ * data. */
+#define BUFFER_DELAY 100
+#define XFER_LIMIT_RATIO (1000 / BUFFER_DELAY)
+
/* capabilities */
bool migrate_auto_converge(void);
@@ -74,4 +81,8 @@ int migrate_multifd_zstd_level(void);
uint8_t migrate_throttle_trigger_threshold(void);
uint64_t migrate_xbzrle_cache_size(void);
+/* parameters helpers */
+
+bool migrate_params_check(MigrationParameters *params, Error **errp);
+
#endif
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 33/43] migration: Create migrate_params_init() function
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (31 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 32/43] migration: Move qmp_migrate_set_parameters() " Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 34/43] migration: Make all functions check have the same format Juan Quintela
` (9 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 29 +----------------------------
migration/options.c | 31 +++++++++++++++++++++++++++++++
migration/options.h | 1 +
3 files changed, 33 insertions(+), 28 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 5599b8ac5b..b87aebee9b 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -3475,7 +3475,6 @@ static void migration_instance_finalize(Object *obj)
static void migration_instance_init(Object *obj)
{
MigrationState *ms = MIGRATION_OBJ(obj);
- MigrationParameters *params = &ms->parameters;
ms->state = MIGRATION_STATUS_NONE;
ms->mbps = -1;
@@ -3483,33 +3482,7 @@ static void migration_instance_init(Object *obj)
qemu_sem_init(&ms->pause_sem, 0);
qemu_mutex_init(&ms->error_mutex);
- params->tls_hostname = g_strdup("");
- params->tls_creds = g_strdup("");
-
- /* Set has_* up only for parameter checks */
- params->has_compress_level = true;
- params->has_compress_threads = true;
- params->has_compress_wait_thread = true;
- params->has_decompress_threads = true;
- params->has_throttle_trigger_threshold = true;
- params->has_cpu_throttle_initial = true;
- params->has_cpu_throttle_increment = true;
- params->has_cpu_throttle_tailslow = true;
- params->has_max_bandwidth = true;
- params->has_downtime_limit = true;
- params->has_x_checkpoint_delay = true;
- params->has_block_incremental = true;
- params->has_multifd_channels = true;
- params->has_multifd_compression = true;
- params->has_multifd_zlib_level = true;
- params->has_multifd_zstd_level = true;
- params->has_xbzrle_cache_size = true;
- params->has_max_postcopy_bandwidth = true;
- params->has_max_cpu_throttle = true;
- params->has_announce_initial = true;
- params->has_announce_max = true;
- params->has_announce_rounds = true;
- params->has_announce_step = true;
+ migrate_params_init(&ms->parameters);
qemu_sem_init(&ms->postcopy_pause_sem, 0);
qemu_sem_init(&ms->postcopy_pause_rp_sem, 0);
diff --git a/migration/options.c b/migration/options.c
index 255a5433b4..6fa6666308 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -740,6 +740,37 @@ MigrationParameters *qmp_query_migrate_parameters(Error **errp)
return params;
}
+void migrate_params_init(MigrationParameters *params)
+{
+ params->tls_hostname = g_strdup("");
+ params->tls_creds = g_strdup("");
+
+ /* Set has_* up only for parameter checks */
+ params->has_compress_level = true;
+ params->has_compress_threads = true;
+ params->has_compress_wait_thread = true;
+ params->has_decompress_threads = true;
+ params->has_throttle_trigger_threshold = true;
+ params->has_cpu_throttle_initial = true;
+ params->has_cpu_throttle_increment = true;
+ params->has_cpu_throttle_tailslow = true;
+ params->has_max_bandwidth = true;
+ params->has_downtime_limit = true;
+ params->has_x_checkpoint_delay = true;
+ params->has_block_incremental = true;
+ params->has_multifd_channels = true;
+ params->has_multifd_compression = true;
+ params->has_multifd_zlib_level = true;
+ params->has_multifd_zstd_level = true;
+ params->has_xbzrle_cache_size = true;
+ params->has_max_postcopy_bandwidth = true;
+ params->has_max_cpu_throttle = true;
+ params->has_announce_initial = true;
+ params->has_announce_max = true;
+ params->has_announce_rounds = true;
+ params->has_announce_step = true;
+}
+
/*
* Check whether the parameters are valid. Error will be put into errp
* (if provided). Return true if valid, otherwise false.
diff --git a/migration/options.h b/migration/options.h
index 86b0d7fd88..9f50348d3c 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -84,5 +84,6 @@ uint64_t migrate_xbzrle_cache_size(void);
/* parameters helpers */
bool migrate_params_check(MigrationParameters *params, Error **errp);
+void migrate_params_init(MigrationParameters *params);
#endif
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 34/43] migration: Make all functions check have the same format
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (32 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 33/43] migration: Create migrate_params_init() function Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 35/43] migration: Create migrate_downtime_limit() function Juan Quintela
` (8 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.c | 153 +++++++++++---------------------------------
1 file changed, 39 insertions(+), 114 deletions(-)
diff --git a/migration/options.c b/migration/options.c
index 6fa6666308..fa99e397d0 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -33,27 +33,21 @@
bool migrate_auto_converge(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_AUTO_CONVERGE];
}
bool migrate_background_snapshot(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT];
}
bool migrate_block(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_BLOCK];
}
@@ -61,95 +55,76 @@ bool migrate_block(void)
bool migrate_colo(void)
{
MigrationState *s = migrate_get_current();
+
return s->capabilities[MIGRATION_CAPABILITY_X_COLO];
}
bool migrate_compress(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_COMPRESS];
}
bool migrate_dirty_bitmaps(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_DIRTY_BITMAPS];
}
bool migrate_events(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_EVENTS];
}
bool migrate_ignore_shared(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_X_IGNORE_SHARED];
}
bool migrate_late_block_activate(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_LATE_BLOCK_ACTIVATE];
}
bool migrate_multifd(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_MULTIFD];
}
bool migrate_pause_before_switchover(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_PAUSE_BEFORE_SWITCHOVER];
}
bool migrate_postcopy_blocktime(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_BLOCKTIME];
}
bool migrate_postcopy_preempt(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT];
}
bool migrate_postcopy_ram(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM];
}
@@ -163,54 +138,42 @@ bool migrate_rdma_pin_all(void)
bool migrate_release_ram(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_RELEASE_RAM];
}
bool migrate_return_path(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_RETURN_PATH];
}
bool migrate_validate_uuid(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_VALIDATE_UUID];
}
bool migrate_xbzrle(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_XBZRLE];
}
bool migrate_zero_blocks(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_ZERO_BLOCKS];
}
bool migrate_zero_copy_send(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->capabilities[MIGRATION_CAPABILITY_ZERO_COPY_SEND];
}
@@ -224,9 +187,7 @@ bool migrate_postcopy(void)
bool migrate_tls(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.tls_creds && *s->parameters.tls_creds;
}
@@ -495,126 +456,98 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
bool migrate_block_incremental(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.block_incremental;
}
uint32_t migrate_checkpoint_delay(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.x_checkpoint_delay;
}
int migrate_compress_level(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.compress_level;
}
int migrate_compress_threads(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.compress_threads;
}
int migrate_compress_wait_thread(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.compress_wait_thread;
}
uint8_t migrate_cpu_throttle_increment(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.cpu_throttle_increment;
}
uint8_t migrate_cpu_throttle_initial(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.cpu_throttle_initial;
}
bool migrate_cpu_throttle_tailslow(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.cpu_throttle_tailslow;
}
int migrate_decompress_threads(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.decompress_threads;
}
uint8_t migrate_max_cpu_throttle(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.max_cpu_throttle;
}
uint64_t migrate_max_bandwidth(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.max_bandwidth;
}
int64_t migrate_max_postcopy_bandwidth(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.max_postcopy_bandwidth;
}
int migrate_multifd_channels(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.multifd_channels;
}
MultiFDCompression migrate_multifd_compression(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
assert(s->parameters.multifd_compression < MULTIFD_COMPRESSION__MAX);
return s->parameters.multifd_compression;
@@ -622,36 +555,28 @@ MultiFDCompression migrate_multifd_compression(void)
int migrate_multifd_zlib_level(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.multifd_zlib_level;
}
int migrate_multifd_zstd_level(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.multifd_zstd_level;
}
uint8_t migrate_throttle_trigger_threshold(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.throttle_trigger_threshold;
}
uint64_t migrate_xbzrle_cache_size(void)
{
- MigrationState *s;
-
- s = migrate_get_current();
+ MigrationState *s = migrate_get_current();
return s->parameters.xbzrle_cache_size;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 35/43] migration: Create migrate_downtime_limit() function
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (33 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 34/43] migration: Make all functions check have the same format Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 36/43] migration: Move migrate_set_block_incremental() to options.c Juan Quintela
` (7 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 4 ++--
migration/options.c | 7 +++++++
migration/options.h | 1 +
3 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index b87aebee9b..3054874743 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2739,7 +2739,7 @@ static void migration_update_counters(MigrationState *s,
transferred = current_bytes - s->iteration_initial_bytes;
time_spent = current_time - s->iteration_start_time;
bandwidth = (double)transferred / time_spent;
- s->threshold_size = bandwidth * s->parameters.downtime_limit;
+ s->threshold_size = bandwidth * migrate_downtime_limit();
s->mbps = (((double) transferred * 8.0) /
((double) time_spent / 1000.0)) / 1000.0 / 1000.0;
@@ -3249,7 +3249,7 @@ void migrate_fd_connect(MigrationState *s, Error *error_in)
*/
migrate_error_free(s);
- s->expected_downtime = s->parameters.downtime_limit;
+ s->expected_downtime = migrate_downtime_limit();
if (resume) {
assert(s->cleanup_bh);
} else {
diff --git a/migration/options.c b/migration/options.c
index fa99e397d0..6c7c85ef2f 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -517,6 +517,13 @@ int migrate_decompress_threads(void)
return s->parameters.decompress_threads;
}
+uint64_t migrate_downtime_limit(void)
+{
+ MigrationState *s = migrate_get_current();
+
+ return s->parameters.downtime_limit;
+}
+
uint8_t migrate_max_cpu_throttle(void)
{
MigrationState *s = migrate_get_current();
diff --git a/migration/options.h b/migration/options.h
index 9f50348d3c..6dc9cea195 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -71,6 +71,7 @@ uint8_t migrate_cpu_throttle_increment(void);
uint8_t migrate_cpu_throttle_initial(void);
bool migrate_cpu_throttle_tailslow(void);
int migrate_decompress_threads(void);
+uint64_t migrate_downtime_limit(void);
uint8_t migrate_max_cpu_throttle(void);
uint64_t migrate_max_bandwidth(void);
int64_t migrate_max_postcopy_bandwidth(void);
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 36/43] migration: Move migrate_set_block_incremental() to options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (34 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 35/43] migration: Create migrate_downtime_limit() function Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 37/43] migration: Move block_cleanup_parameters() " Juan Quintela
` (6 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Once there, make it more regular and remove th eneed for
MigrationState parameter.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 9 ++-------
migration/options.c | 9 +++++++++
migration/options.h | 4 ++++
3 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 3054874743..d31e987d1a 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1165,17 +1165,12 @@ void migrate_set_state(int *state, int old_state, int new_state)
}
}
-static void migrate_set_block_incremental(MigrationState *s, bool value)
-{
- s->parameters.block_incremental = value;
-}
-
static void block_cleanup_parameters(MigrationState *s)
{
if (s->must_remove_block_options) {
/* setting to false can never fail */
migrate_cap_set(MIGRATION_CAPABILITY_BLOCK, false, &error_abort);
- migrate_set_block_incremental(s, false);
+ migrate_set_block_incremental(false);
s->must_remove_block_options = false;
}
}
@@ -1669,7 +1664,7 @@ static bool migrate_prepare(MigrationState *s, bool blk, bool blk_inc,
}
if (blk_inc) {
- migrate_set_block_incremental(s, true);
+ migrate_set_block_incremental(true);
}
migrate_init(s);
diff --git a/migration/options.c b/migration/options.c
index 6c7c85ef2f..0ca2ad4fab 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -588,6 +588,15 @@ uint64_t migrate_xbzrle_cache_size(void)
return s->parameters.xbzrle_cache_size;
}
+/* parameter setters */
+
+void migrate_set_block_incremental(bool value)
+{
+ MigrationState *s = migrate_get_current();
+
+ s->parameters.block_incremental = value;
+}
+
/* parameters helpers */
AnnounceParameters *migrate_announce_params(void)
diff --git a/migration/options.h b/migration/options.h
index 6dc9cea195..61b559ff3f 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -82,6 +82,10 @@ int migrate_multifd_zstd_level(void);
uint8_t migrate_throttle_trigger_threshold(void);
uint64_t migrate_xbzrle_cache_size(void);
+/* parameters setters */
+
+void migrate_set_block_incremental(bool value);
+
/* parameters helpers */
bool migrate_params_check(MigrationParameters *params, Error **errp);
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 37/43] migration: Move block_cleanup_parameters() to options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (35 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 36/43] migration: Move migrate_set_block_incremental() to options.c Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 38/43] migration: Remove MigrationState from block_cleanup_parameters() Juan Quintela
` (5 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 10 ----------
migration/options.c | 10 ++++++++++
migration/options.h | 1 +
3 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index d31e987d1a..f12ab54ae0 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1165,16 +1165,6 @@ void migrate_set_state(int *state, int old_state, int new_state)
}
}
-static void block_cleanup_parameters(MigrationState *s)
-{
- if (s->must_remove_block_options) {
- /* setting to false can never fail */
- migrate_cap_set(MIGRATION_CAPABILITY_BLOCK, false, &error_abort);
- migrate_set_block_incremental(false);
- s->must_remove_block_options = false;
- }
-}
-
static void migrate_fd_cleanup(MigrationState *s)
{
qemu_bh_delete(s->cleanup_bh);
diff --git a/migration/options.c b/migration/options.c
index 0ca2ad4fab..8fae79c2c9 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -599,6 +599,16 @@ void migrate_set_block_incremental(bool value)
/* parameters helpers */
+void block_cleanup_parameters(MigrationState *s)
+{
+ if (s->must_remove_block_options) {
+ /* setting to false can never fail */
+ migrate_cap_set(MIGRATION_CAPABILITY_BLOCK, false, &error_abort);
+ migrate_set_block_incremental(false);
+ s->must_remove_block_options = false;
+ }
+}
+
AnnounceParameters *migrate_announce_params(void)
{
static AnnounceParameters ap;
diff --git a/migration/options.h b/migration/options.h
index 61b559ff3f..7476f814c9 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -90,5 +90,6 @@ void migrate_set_block_incremental(bool value);
bool migrate_params_check(MigrationParameters *params, Error **errp);
void migrate_params_init(MigrationParameters *params);
+void block_cleanup_parameters(MigrationState *s);
#endif
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 38/43] migration: Remove MigrationState from block_cleanup_parameters()
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (36 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 37/43] migration: Move block_cleanup_parameters() " Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 39/43] migration: Create migrate_tls_creds() function Juan Quintela
` (4 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
This makes the function more regular with everything else.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 4 ++--
migration/options.c | 4 +++-
migration/options.h | 2 +-
3 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index f12ab54ae0..4742f14686 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1219,7 +1219,7 @@ static void migrate_fd_cleanup(MigrationState *s)
error_report_err(error_copy(s->error));
}
notifier_list_notify(&migration_state_notifiers, s);
- block_cleanup_parameters(s);
+ block_cleanup_parameters();
yank_unregister_instance(MIGRATION_YANK_INSTANCE);
}
@@ -1713,7 +1713,7 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
"a valid migration protocol");
migrate_set_state(&s->state, MIGRATION_STATUS_SETUP,
MIGRATION_STATUS_FAILED);
- block_cleanup_parameters(s);
+ block_cleanup_parameters();
return;
}
diff --git a/migration/options.c b/migration/options.c
index 8fae79c2c9..da70f62693 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -599,8 +599,10 @@ void migrate_set_block_incremental(bool value)
/* parameters helpers */
-void block_cleanup_parameters(MigrationState *s)
+void block_cleanup_parameters(void)
{
+ MigrationState *s = migrate_get_current();
+
if (s->must_remove_block_options) {
/* setting to false can never fail */
migrate_cap_set(MIGRATION_CAPABILITY_BLOCK, false, &error_abort);
diff --git a/migration/options.h b/migration/options.h
index 7476f814c9..2981da21f0 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -90,6 +90,6 @@ void migrate_set_block_incremental(bool value);
bool migrate_params_check(MigrationParameters *params, Error **errp);
void migrate_params_init(MigrationParameters *params);
-void block_cleanup_parameters(MigrationState *s);
+void block_cleanup_parameters(void);
#endif
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 39/43] migration: Create migrate_tls_creds() function
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (37 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 38/43] migration: Remove MigrationState from block_cleanup_parameters() Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 40/43] migration: Create migrate_tls_authz() function Juan Quintela
` (3 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.c | 7 +++++++
migration/options.h | 1 +
migration/tls.c | 9 ++++-----
3 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/migration/options.c b/migration/options.c
index da70f62693..bb5e055004 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -581,6 +581,13 @@ uint8_t migrate_throttle_trigger_threshold(void)
return s->parameters.throttle_trigger_threshold;
}
+char *migrate_tls_creds(void)
+{
+ MigrationState *s = migrate_get_current();
+
+ return s->parameters.tls_creds;
+}
+
uint64_t migrate_xbzrle_cache_size(void)
{
MigrationState *s = migrate_get_current();
diff --git a/migration/options.h b/migration/options.h
index 2981da21f0..acd48feabb 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -80,6 +80,7 @@ MultiFDCompression migrate_multifd_compression(void);
int migrate_multifd_zlib_level(void);
int migrate_multifd_zstd_level(void);
uint8_t migrate_throttle_trigger_threshold(void);
+char *migrate_tls_creds(void);
uint64_t migrate_xbzrle_cache_size(void);
/* parameters setters */
diff --git a/migration/tls.c b/migration/tls.c
index acd38e0b62..0d318516de 100644
--- a/migration/tls.c
+++ b/migration/tls.c
@@ -34,20 +34,19 @@ migration_tls_get_creds(MigrationState *s,
Error **errp)
{
Object *creds;
+ char *tls_creds = migrate_tls_creds();
QCryptoTLSCreds *ret;
- creds = object_resolve_path_component(
- object_get_objects_root(), s->parameters.tls_creds);
+ creds = object_resolve_path_component(object_get_objects_root(), tls_creds);
if (!creds) {
- error_setg(errp, "No TLS credentials with id '%s'",
- s->parameters.tls_creds);
+ error_setg(errp, "No TLS credentials with id '%s'", tls_creds);
return NULL;
}
ret = (QCryptoTLSCreds *)object_dynamic_cast(
creds, TYPE_QCRYPTO_TLS_CREDS);
if (!ret) {
error_setg(errp, "Object with id '%s' is not TLS credentials",
- s->parameters.tls_creds);
+ tls_creds);
return NULL;
}
if (!qcrypto_tls_creds_check_endpoint(ret, endpoint, errp)) {
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 40/43] migration: Create migrate_tls_authz() function
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (38 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 39/43] migration: Create migrate_tls_creds() function Juan Quintela
@ 2023-04-20 13:39 ` Juan Quintela
2023-04-20 13:40 ` [PATCH v2 41/43] migration: Create migrate_tls_hostname() function Juan Quintela
` (2 subsequent siblings)
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.c | 7 +++++++
migration/options.h | 1 +
migration/tls.c | 5 +----
3 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/migration/options.c b/migration/options.c
index bb5e055004..303a493388 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -581,6 +581,13 @@ uint8_t migrate_throttle_trigger_threshold(void)
return s->parameters.throttle_trigger_threshold;
}
+char *migrate_tls_authz(void)
+{
+ MigrationState *s = migrate_get_current();
+
+ return s->parameters.tls_authz;
+}
+
char *migrate_tls_creds(void)
{
MigrationState *s = migrate_get_current();
diff --git a/migration/options.h b/migration/options.h
index acd48feabb..72b0f3cf62 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -80,6 +80,7 @@ MultiFDCompression migrate_multifd_compression(void);
int migrate_multifd_zlib_level(void);
int migrate_multifd_zstd_level(void);
uint8_t migrate_throttle_trigger_threshold(void);
+char *migrate_tls_authz(void);
char *migrate_tls_creds(void);
uint64_t migrate_xbzrle_cache_size(void);
diff --git a/migration/tls.c b/migration/tls.c
index 0d318516de..4c229326fd 100644
--- a/migration/tls.c
+++ b/migration/tls.c
@@ -86,10 +86,7 @@ void migration_tls_channel_process_incoming(MigrationState *s,
return;
}
- tioc = qio_channel_tls_new_server(
- ioc, creds,
- s->parameters.tls_authz,
- errp);
+ tioc = qio_channel_tls_new_server(ioc, creds, migrate_tls_authz(), errp);
if (!tioc) {
return;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 41/43] migration: Create migrate_tls_hostname() function
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (39 preceding siblings ...)
2023-04-20 13:39 ` [PATCH v2 40/43] migration: Create migrate_tls_authz() function Juan Quintela
@ 2023-04-20 13:40 ` Juan Quintela
2023-04-20 13:40 ` [PATCH v2 42/43] migration: Create migrate_block_bitmap_mapping() function Juan Quintela
2023-04-20 13:40 ` [PATCH v2 43/43] migration: Move migration_properties to options.c Juan Quintela
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:40 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/options.c | 7 +++++++
migration/options.h | 1 +
migration/tls.c | 6 ++++--
3 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/migration/options.c b/migration/options.c
index 303a493388..8f0bf1ece6 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -595,6 +595,13 @@ char *migrate_tls_creds(void)
return s->parameters.tls_creds;
}
+char *migrate_tls_hostname(void)
+{
+ MigrationState *s = migrate_get_current();
+
+ return s->parameters.tls_hostname;
+}
+
uint64_t migrate_xbzrle_cache_size(void)
{
MigrationState *s = migrate_get_current();
diff --git a/migration/options.h b/migration/options.h
index 72b0f3cf62..2f21837094 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -82,6 +82,7 @@ int migrate_multifd_zstd_level(void);
uint8_t migrate_throttle_trigger_threshold(void);
char *migrate_tls_authz(void);
char *migrate_tls_creds(void);
+char *migrate_tls_hostname(void);
uint64_t migrate_xbzrle_cache_size(void);
/* parameters setters */
diff --git a/migration/tls.c b/migration/tls.c
index 4c229326fd..3cae1a06e7 100644
--- a/migration/tls.c
+++ b/migration/tls.c
@@ -123,6 +123,7 @@ QIOChannelTLS *migration_tls_client_create(MigrationState *s,
Error **errp)
{
QCryptoTLSCreds *creds;
+ char *tls_hostname;
creds = migration_tls_get_creds(
s, QCRYPTO_TLS_CREDS_ENDPOINT_CLIENT, errp);
@@ -130,8 +131,9 @@ QIOChannelTLS *migration_tls_client_create(MigrationState *s,
return NULL;
}
- if (s->parameters.tls_hostname && *s->parameters.tls_hostname) {
- hostname = s->parameters.tls_hostname;
+ tls_hostname = migrate_tls_hostname();
+ if (tls_hostname && *tls_hostname) {
+ hostname = tls_hostname;
}
return qio_channel_tls_new_client(ioc, creds, hostname, errp);
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 42/43] migration: Create migrate_block_bitmap_mapping() function
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (40 preceding siblings ...)
2023-04-20 13:40 ` [PATCH v2 41/43] migration: Create migrate_tls_hostname() function Juan Quintela
@ 2023-04-20 13:40 ` Juan Quintela
2023-04-20 13:40 ` [PATCH v2 43/43] migration: Move migration_properties to options.c Juan Quintela
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:40 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Notice that we changed the test of ->has_block_bitmap_mapping
for the test that block_bitmap_mapping is not NULL.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/block-dirty-bitmap.c | 14 ++++++++------
migration/options.c | 7 +++++++
migration/options.h | 1 +
3 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/migration/block-dirty-bitmap.c b/migration/block-dirty-bitmap.c
index a6ffae0002..62b2352bbb 100644
--- a/migration/block-dirty-bitmap.c
+++ b/migration/block-dirty-bitmap.c
@@ -605,11 +605,12 @@ static int init_dirty_bitmap_migration(DBMSaveState *s)
SaveBitmapState *dbms;
GHashTable *handled_by_blk = g_hash_table_new(NULL, NULL);
BlockBackend *blk;
- const MigrationParameters *mig_params = &migrate_get_current()->parameters;
GHashTable *alias_map = NULL;
+ BitmapMigrationNodeAliasList *block_bitmap_mapping =
+ migrate_block_bitmap_mapping();
- if (mig_params->has_block_bitmap_mapping) {
- alias_map = construct_alias_map(mig_params->block_bitmap_mapping, true,
+ if (block_bitmap_mapping) {
+ alias_map = construct_alias_map(block_bitmap_mapping, true,
&error_abort);
}
@@ -1158,7 +1159,8 @@ static int dirty_bitmap_load_header(QEMUFile *f, DBMLoadState *s,
static int dirty_bitmap_load(QEMUFile *f, void *opaque, int version_id)
{
GHashTable *alias_map = NULL;
- const MigrationParameters *mig_params = &migrate_get_current()->parameters;
+ BitmapMigrationNodeAliasList *block_bitmap_mapping =
+ migrate_block_bitmap_mapping();
DBMLoadState *s = &((DBMState *)opaque)->load;
int ret = 0;
@@ -1170,8 +1172,8 @@ static int dirty_bitmap_load(QEMUFile *f, void *opaque, int version_id)
return -EINVAL;
}
- if (mig_params->has_block_bitmap_mapping) {
- alias_map = construct_alias_map(mig_params->block_bitmap_mapping,
+ if (block_bitmap_mapping) {
+ alias_map = construct_alias_map(block_bitmap_mapping,
false, &error_abort);
}
diff --git a/migration/options.c b/migration/options.c
index 8f0bf1ece6..7a8fb4578a 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -454,6 +454,13 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
/* parameters */
+BitmapMigrationNodeAliasList *migrate_block_bitmap_mapping(void)
+{
+ MigrationState *s = migrate_get_current();
+
+ return s->parameters.block_bitmap_mapping;
+}
+
bool migrate_block_incremental(void)
{
MigrationState *s = migrate_get_current();
diff --git a/migration/options.h b/migration/options.h
index 2f21837094..6b9ad7bae4 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -62,6 +62,7 @@ bool migrate_cap_set(int cap, bool value, Error **errp);
/* parameters */
+BitmapMigrationNodeAliasList *migrate_block_bitmap_mapping(void);
bool migrate_block_incremental(void);
uint32_t migrate_checkpoint_delay(void);
int migrate_compress_level(void);
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* [PATCH v2 43/43] migration: Move migration_properties to options.c
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
` (41 preceding siblings ...)
2023-04-20 13:40 ` [PATCH v2 42/43] migration: Create migrate_block_bitmap_mapping() function Juan Quintela
@ 2023-04-20 13:40 ` Juan Quintela
42 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 13:40 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/migration.c | 157 ------------------------------------------
migration/options.c | 155 +++++++++++++++++++++++++++++++++++++++++
migration/options.h | 7 ++
3 files changed, 162 insertions(+), 157 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 4742f14686..23414fc901 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -52,8 +52,6 @@
#include "io/channel-tls.h"
#include "migration/colo.h"
#include "hw/boards.h"
-#include "hw/qdev-properties.h"
-#include "hw/qdev-properties-system.h"
#include "monitor/monitor.h"
#include "net/announce.h"
#include "qemu/queue.h"
@@ -65,51 +63,6 @@
#include "sysemu/qtest.h"
#include "options.h"
-#define MAX_THROTTLE (128 << 20) /* Migration transfer speed throttling */
-
-/* Time in milliseconds we are allowed to stop the source,
- * for sending the last part */
-#define DEFAULT_MIGRATE_SET_DOWNTIME 300
-
-/* Default compression thread count */
-#define DEFAULT_MIGRATE_COMPRESS_THREAD_COUNT 8
-/* Default decompression thread count, usually decompression is at
- * least 4 times as fast as compression.*/
-#define DEFAULT_MIGRATE_DECOMPRESS_THREAD_COUNT 2
-/*0: means nocompress, 1: best speed, ... 9: best compress ratio */
-#define DEFAULT_MIGRATE_COMPRESS_LEVEL 1
-/* Define default autoconverge cpu throttle migration parameters */
-#define DEFAULT_MIGRATE_THROTTLE_TRIGGER_THRESHOLD 50
-#define DEFAULT_MIGRATE_CPU_THROTTLE_INITIAL 20
-#define DEFAULT_MIGRATE_CPU_THROTTLE_INCREMENT 10
-#define DEFAULT_MIGRATE_MAX_CPU_THROTTLE 99
-
-/* Migration XBZRLE default cache size */
-#define DEFAULT_MIGRATE_XBZRLE_CACHE_SIZE (64 * 1024 * 1024)
-
-/* The delay time (in ms) between two COLO checkpoints */
-#define DEFAULT_MIGRATE_X_CHECKPOINT_DELAY (200 * 100)
-#define DEFAULT_MIGRATE_MULTIFD_CHANNELS 2
-#define DEFAULT_MIGRATE_MULTIFD_COMPRESSION MULTIFD_COMPRESSION_NONE
-/* 0: means nocompress, 1: best speed, ... 9: best compress ratio */
-#define DEFAULT_MIGRATE_MULTIFD_ZLIB_LEVEL 1
-/* 0: means nocompress, 1: best speed, ... 20: best compress ratio */
-#define DEFAULT_MIGRATE_MULTIFD_ZSTD_LEVEL 1
-
-/* Background transfer rate for postcopy, 0 means unlimited, note
- * that page requests can still exceed this limit.
- */
-#define DEFAULT_MIGRATE_MAX_POSTCOPY_BANDWIDTH 0
-
-/*
- * Parameters for self_announce_delay giving a stream of RARP/ARP
- * packets after migration.
- */
-#define DEFAULT_MIGRATE_ANNOUNCE_INITIAL 50
-#define DEFAULT_MIGRATE_ANNOUNCE_MAX 550
-#define DEFAULT_MIGRATE_ANNOUNCE_ROUNDS 5
-#define DEFAULT_MIGRATE_ANNOUNCE_STEP 100
-
static NotifierList migration_state_notifiers =
NOTIFIER_LIST_INITIALIZER(migration_state_notifiers);
@@ -3322,116 +3275,6 @@ void migrate_fd_connect(MigrationState *s, Error *error_in)
s->migration_thread_running = true;
}
-#define DEFINE_PROP_MIG_CAP(name, x) \
- DEFINE_PROP_BOOL(name, MigrationState, capabilities[x], false)
-
-static Property migration_properties[] = {
- DEFINE_PROP_BOOL("store-global-state", MigrationState,
- store_global_state, true),
- DEFINE_PROP_BOOL("send-configuration", MigrationState,
- send_configuration, true),
- DEFINE_PROP_BOOL("send-section-footer", MigrationState,
- send_section_footer, true),
- DEFINE_PROP_BOOL("decompress-error-check", MigrationState,
- decompress_error_check, true),
- DEFINE_PROP_UINT8("x-clear-bitmap-shift", MigrationState,
- clear_bitmap_shift, CLEAR_BITMAP_SHIFT_DEFAULT),
- DEFINE_PROP_BOOL("x-preempt-pre-7-2", MigrationState,
- preempt_pre_7_2, false),
-
- /* Migration parameters */
- DEFINE_PROP_UINT8("x-compress-level", MigrationState,
- parameters.compress_level,
- DEFAULT_MIGRATE_COMPRESS_LEVEL),
- DEFINE_PROP_UINT8("x-compress-threads", MigrationState,
- parameters.compress_threads,
- DEFAULT_MIGRATE_COMPRESS_THREAD_COUNT),
- DEFINE_PROP_BOOL("x-compress-wait-thread", MigrationState,
- parameters.compress_wait_thread, true),
- DEFINE_PROP_UINT8("x-decompress-threads", MigrationState,
- parameters.decompress_threads,
- DEFAULT_MIGRATE_DECOMPRESS_THREAD_COUNT),
- DEFINE_PROP_UINT8("x-throttle-trigger-threshold", MigrationState,
- parameters.throttle_trigger_threshold,
- DEFAULT_MIGRATE_THROTTLE_TRIGGER_THRESHOLD),
- DEFINE_PROP_UINT8("x-cpu-throttle-initial", MigrationState,
- parameters.cpu_throttle_initial,
- DEFAULT_MIGRATE_CPU_THROTTLE_INITIAL),
- DEFINE_PROP_UINT8("x-cpu-throttle-increment", MigrationState,
- parameters.cpu_throttle_increment,
- DEFAULT_MIGRATE_CPU_THROTTLE_INCREMENT),
- DEFINE_PROP_BOOL("x-cpu-throttle-tailslow", MigrationState,
- parameters.cpu_throttle_tailslow, false),
- DEFINE_PROP_SIZE("x-max-bandwidth", MigrationState,
- parameters.max_bandwidth, MAX_THROTTLE),
- DEFINE_PROP_UINT64("x-downtime-limit", MigrationState,
- parameters.downtime_limit,
- DEFAULT_MIGRATE_SET_DOWNTIME),
- DEFINE_PROP_UINT32("x-checkpoint-delay", MigrationState,
- parameters.x_checkpoint_delay,
- DEFAULT_MIGRATE_X_CHECKPOINT_DELAY),
- DEFINE_PROP_UINT8("multifd-channels", MigrationState,
- parameters.multifd_channels,
- DEFAULT_MIGRATE_MULTIFD_CHANNELS),
- DEFINE_PROP_MULTIFD_COMPRESSION("multifd-compression", MigrationState,
- parameters.multifd_compression,
- DEFAULT_MIGRATE_MULTIFD_COMPRESSION),
- DEFINE_PROP_UINT8("multifd-zlib-level", MigrationState,
- parameters.multifd_zlib_level,
- DEFAULT_MIGRATE_MULTIFD_ZLIB_LEVEL),
- DEFINE_PROP_UINT8("multifd-zstd-level", MigrationState,
- parameters.multifd_zstd_level,
- DEFAULT_MIGRATE_MULTIFD_ZSTD_LEVEL),
- DEFINE_PROP_SIZE("xbzrle-cache-size", MigrationState,
- parameters.xbzrle_cache_size,
- DEFAULT_MIGRATE_XBZRLE_CACHE_SIZE),
- DEFINE_PROP_SIZE("max-postcopy-bandwidth", MigrationState,
- parameters.max_postcopy_bandwidth,
- DEFAULT_MIGRATE_MAX_POSTCOPY_BANDWIDTH),
- DEFINE_PROP_UINT8("max-cpu-throttle", MigrationState,
- parameters.max_cpu_throttle,
- DEFAULT_MIGRATE_MAX_CPU_THROTTLE),
- DEFINE_PROP_SIZE("announce-initial", MigrationState,
- parameters.announce_initial,
- DEFAULT_MIGRATE_ANNOUNCE_INITIAL),
- DEFINE_PROP_SIZE("announce-max", MigrationState,
- parameters.announce_max,
- DEFAULT_MIGRATE_ANNOUNCE_MAX),
- DEFINE_PROP_SIZE("announce-rounds", MigrationState,
- parameters.announce_rounds,
- DEFAULT_MIGRATE_ANNOUNCE_ROUNDS),
- DEFINE_PROP_SIZE("announce-step", MigrationState,
- parameters.announce_step,
- DEFAULT_MIGRATE_ANNOUNCE_STEP),
- DEFINE_PROP_STRING("tls-creds", MigrationState, parameters.tls_creds),
- DEFINE_PROP_STRING("tls-hostname", MigrationState, parameters.tls_hostname),
- DEFINE_PROP_STRING("tls-authz", MigrationState, parameters.tls_authz),
-
- /* Migration capabilities */
- DEFINE_PROP_MIG_CAP("x-xbzrle", MIGRATION_CAPABILITY_XBZRLE),
- DEFINE_PROP_MIG_CAP("x-rdma-pin-all", MIGRATION_CAPABILITY_RDMA_PIN_ALL),
- DEFINE_PROP_MIG_CAP("x-auto-converge", MIGRATION_CAPABILITY_AUTO_CONVERGE),
- DEFINE_PROP_MIG_CAP("x-zero-blocks", MIGRATION_CAPABILITY_ZERO_BLOCKS),
- 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),
- DEFINE_PROP_MIG_CAP("x-return-path", MIGRATION_CAPABILITY_RETURN_PATH),
- DEFINE_PROP_MIG_CAP("x-multifd", MIGRATION_CAPABILITY_MULTIFD),
- DEFINE_PROP_MIG_CAP("x-background-snapshot",
- MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT),
-#ifdef CONFIG_LINUX
- DEFINE_PROP_MIG_CAP("x-zero-copy-send",
- MIGRATION_CAPABILITY_ZERO_COPY_SEND),
-#endif
-
- DEFINE_PROP_END_OF_LIST(),
-};
-
static void migration_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
diff --git a/migration/options.c b/migration/options.c
index 7a8fb4578a..fada60a00e 100644
--- a/migration/options.c
+++ b/migration/options.c
@@ -31,6 +31,161 @@
#define MAX_MIGRATE_DOWNTIME_SECONDS 2000
#define MAX_MIGRATE_DOWNTIME (MAX_MIGRATE_DOWNTIME_SECONDS * 1000)
+#define MAX_THROTTLE (128 << 20) /* Migration transfer speed throttling */
+
+/* Time in milliseconds we are allowed to stop the source,
+ * for sending the last part */
+#define DEFAULT_MIGRATE_SET_DOWNTIME 300
+
+/* Default compression thread count */
+#define DEFAULT_MIGRATE_COMPRESS_THREAD_COUNT 8
+/* Default decompression thread count, usually decompression is at
+ * least 4 times as fast as compression.*/
+#define DEFAULT_MIGRATE_DECOMPRESS_THREAD_COUNT 2
+/*0: means nocompress, 1: best speed, ... 9: best compress ratio */
+#define DEFAULT_MIGRATE_COMPRESS_LEVEL 1
+/* Define default autoconverge cpu throttle migration parameters */
+#define DEFAULT_MIGRATE_THROTTLE_TRIGGER_THRESHOLD 50
+#define DEFAULT_MIGRATE_CPU_THROTTLE_INITIAL 20
+#define DEFAULT_MIGRATE_CPU_THROTTLE_INCREMENT 10
+#define DEFAULT_MIGRATE_MAX_CPU_THROTTLE 99
+
+/* Migration XBZRLE default cache size */
+#define DEFAULT_MIGRATE_XBZRLE_CACHE_SIZE (64 * 1024 * 1024)
+
+/* The delay time (in ms) between two COLO checkpoints */
+#define DEFAULT_MIGRATE_X_CHECKPOINT_DELAY (200 * 100)
+#define DEFAULT_MIGRATE_MULTIFD_CHANNELS 2
+#define DEFAULT_MIGRATE_MULTIFD_COMPRESSION MULTIFD_COMPRESSION_NONE
+/* 0: means nocompress, 1: best speed, ... 9: best compress ratio */
+#define DEFAULT_MIGRATE_MULTIFD_ZLIB_LEVEL 1
+/* 0: means nocompress, 1: best speed, ... 20: best compress ratio */
+#define DEFAULT_MIGRATE_MULTIFD_ZSTD_LEVEL 1
+
+/* Background transfer rate for postcopy, 0 means unlimited, note
+ * that page requests can still exceed this limit.
+ */
+#define DEFAULT_MIGRATE_MAX_POSTCOPY_BANDWIDTH 0
+
+/*
+ * Parameters for self_announce_delay giving a stream of RARP/ARP
+ * packets after migration.
+ */
+#define DEFAULT_MIGRATE_ANNOUNCE_INITIAL 50
+#define DEFAULT_MIGRATE_ANNOUNCE_MAX 550
+#define DEFAULT_MIGRATE_ANNOUNCE_ROUNDS 5
+#define DEFAULT_MIGRATE_ANNOUNCE_STEP 100
+
+#define DEFINE_PROP_MIG_CAP(name, x) \
+ DEFINE_PROP_BOOL(name, MigrationState, capabilities[x], false)
+
+Property migration_properties[] = {
+ DEFINE_PROP_BOOL("store-global-state", MigrationState,
+ store_global_state, true),
+ DEFINE_PROP_BOOL("send-configuration", MigrationState,
+ send_configuration, true),
+ DEFINE_PROP_BOOL("send-section-footer", MigrationState,
+ send_section_footer, true),
+ DEFINE_PROP_BOOL("decompress-error-check", MigrationState,
+ decompress_error_check, true),
+ DEFINE_PROP_UINT8("x-clear-bitmap-shift", MigrationState,
+ clear_bitmap_shift, CLEAR_BITMAP_SHIFT_DEFAULT),
+ DEFINE_PROP_BOOL("x-preempt-pre-7-2", MigrationState,
+ preempt_pre_7_2, false),
+
+ /* Migration parameters */
+ DEFINE_PROP_UINT8("x-compress-level", MigrationState,
+ parameters.compress_level,
+ DEFAULT_MIGRATE_COMPRESS_LEVEL),
+ DEFINE_PROP_UINT8("x-compress-threads", MigrationState,
+ parameters.compress_threads,
+ DEFAULT_MIGRATE_COMPRESS_THREAD_COUNT),
+ DEFINE_PROP_BOOL("x-compress-wait-thread", MigrationState,
+ parameters.compress_wait_thread, true),
+ DEFINE_PROP_UINT8("x-decompress-threads", MigrationState,
+ parameters.decompress_threads,
+ DEFAULT_MIGRATE_DECOMPRESS_THREAD_COUNT),
+ DEFINE_PROP_UINT8("x-throttle-trigger-threshold", MigrationState,
+ parameters.throttle_trigger_threshold,
+ DEFAULT_MIGRATE_THROTTLE_TRIGGER_THRESHOLD),
+ DEFINE_PROP_UINT8("x-cpu-throttle-initial", MigrationState,
+ parameters.cpu_throttle_initial,
+ DEFAULT_MIGRATE_CPU_THROTTLE_INITIAL),
+ DEFINE_PROP_UINT8("x-cpu-throttle-increment", MigrationState,
+ parameters.cpu_throttle_increment,
+ DEFAULT_MIGRATE_CPU_THROTTLE_INCREMENT),
+ DEFINE_PROP_BOOL("x-cpu-throttle-tailslow", MigrationState,
+ parameters.cpu_throttle_tailslow, false),
+ DEFINE_PROP_SIZE("x-max-bandwidth", MigrationState,
+ parameters.max_bandwidth, MAX_THROTTLE),
+ DEFINE_PROP_UINT64("x-downtime-limit", MigrationState,
+ parameters.downtime_limit,
+ DEFAULT_MIGRATE_SET_DOWNTIME),
+ DEFINE_PROP_UINT32("x-checkpoint-delay", MigrationState,
+ parameters.x_checkpoint_delay,
+ DEFAULT_MIGRATE_X_CHECKPOINT_DELAY),
+ DEFINE_PROP_UINT8("multifd-channels", MigrationState,
+ parameters.multifd_channels,
+ DEFAULT_MIGRATE_MULTIFD_CHANNELS),
+ DEFINE_PROP_MULTIFD_COMPRESSION("multifd-compression", MigrationState,
+ parameters.multifd_compression,
+ DEFAULT_MIGRATE_MULTIFD_COMPRESSION),
+ DEFINE_PROP_UINT8("multifd-zlib-level", MigrationState,
+ parameters.multifd_zlib_level,
+ DEFAULT_MIGRATE_MULTIFD_ZLIB_LEVEL),
+ DEFINE_PROP_UINT8("multifd-zstd-level", MigrationState,
+ parameters.multifd_zstd_level,
+ DEFAULT_MIGRATE_MULTIFD_ZSTD_LEVEL),
+ DEFINE_PROP_SIZE("xbzrle-cache-size", MigrationState,
+ parameters.xbzrle_cache_size,
+ DEFAULT_MIGRATE_XBZRLE_CACHE_SIZE),
+ DEFINE_PROP_SIZE("max-postcopy-bandwidth", MigrationState,
+ parameters.max_postcopy_bandwidth,
+ DEFAULT_MIGRATE_MAX_POSTCOPY_BANDWIDTH),
+ DEFINE_PROP_UINT8("max-cpu-throttle", MigrationState,
+ parameters.max_cpu_throttle,
+ DEFAULT_MIGRATE_MAX_CPU_THROTTLE),
+ DEFINE_PROP_SIZE("announce-initial", MigrationState,
+ parameters.announce_initial,
+ DEFAULT_MIGRATE_ANNOUNCE_INITIAL),
+ DEFINE_PROP_SIZE("announce-max", MigrationState,
+ parameters.announce_max,
+ DEFAULT_MIGRATE_ANNOUNCE_MAX),
+ DEFINE_PROP_SIZE("announce-rounds", MigrationState,
+ parameters.announce_rounds,
+ DEFAULT_MIGRATE_ANNOUNCE_ROUNDS),
+ DEFINE_PROP_SIZE("announce-step", MigrationState,
+ parameters.announce_step,
+ DEFAULT_MIGRATE_ANNOUNCE_STEP),
+ DEFINE_PROP_STRING("tls-creds", MigrationState, parameters.tls_creds),
+ DEFINE_PROP_STRING("tls-hostname", MigrationState, parameters.tls_hostname),
+ DEFINE_PROP_STRING("tls-authz", MigrationState, parameters.tls_authz),
+
+ /* Migration capabilities */
+ DEFINE_PROP_MIG_CAP("x-xbzrle", MIGRATION_CAPABILITY_XBZRLE),
+ DEFINE_PROP_MIG_CAP("x-rdma-pin-all", MIGRATION_CAPABILITY_RDMA_PIN_ALL),
+ DEFINE_PROP_MIG_CAP("x-auto-converge", MIGRATION_CAPABILITY_AUTO_CONVERGE),
+ DEFINE_PROP_MIG_CAP("x-zero-blocks", MIGRATION_CAPABILITY_ZERO_BLOCKS),
+ 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),
+ DEFINE_PROP_MIG_CAP("x-return-path", MIGRATION_CAPABILITY_RETURN_PATH),
+ DEFINE_PROP_MIG_CAP("x-multifd", MIGRATION_CAPABILITY_MULTIFD),
+ DEFINE_PROP_MIG_CAP("x-background-snapshot",
+ MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT),
+#ifdef CONFIG_LINUX
+ DEFINE_PROP_MIG_CAP("x-zero-copy-send",
+ MIGRATION_CAPABILITY_ZERO_COPY_SEND),
+#endif
+
+ DEFINE_PROP_END_OF_LIST(),
+};
+
bool migrate_auto_converge(void)
{
MigrationState *s = migrate_get_current();
diff --git a/migration/options.h b/migration/options.h
index 6b9ad7bae4..c58cd46495 100644
--- a/migration/options.h
+++ b/migration/options.h
@@ -14,6 +14,9 @@
#ifndef QEMU_MIGRATION_OPTIONS_H
#define QEMU_MIGRATION_OPTIONS_H
+#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
+
/* constants */
/* Amount of time to allocate to each "chunk" of bandwidth-throttled
@@ -21,6 +24,10 @@
#define BUFFER_DELAY 100
#define XFER_LIMIT_RATIO (1000 / BUFFER_DELAY)
+/* migration properties */
+
+extern Property migration_properties[];
+
/* capabilities */
bool migrate_auto_converge(void);
--
2.39.2
^ permalink raw reply related [flat|nested] 65+ messages in thread
* Re: [PATCH v2 14/43] migration: Move migrate_caps_check() to options.c
2023-04-20 13:39 ` [PATCH v2 14/43] migration: Move migrate_caps_check() to options.c Juan Quintela
@ 2023-04-20 18:09 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 65+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2023-04-20 18:09 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Leonardo Bras, Markus Armbruster, Stefan Hajnoczi,
Eric Blake
On 20.04.23 16:39, Juan Quintela wrote:
> Signed-off-by: Juan Quintela<quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 15/43] migration: Move qmp_query_migrate_capabilities() to options.c
2023-04-20 13:39 ` [PATCH v2 15/43] migration: Move qmp_query_migrate_capabilities() " Juan Quintela
@ 2023-04-20 18:10 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 65+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2023-04-20 18:10 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Leonardo Bras, Markus Armbruster, Stefan Hajnoczi,
Eric Blake
On 20.04.23 16:39, Juan Quintela wrote:
> Signed-off-by: Juan Quintela<quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 16/43] migration: Move qmp_migrate_set_capabilities() to options.c
2023-04-20 13:39 ` [PATCH v2 16/43] migration: Move qmp_migrate_set_capabilities() " Juan Quintela
@ 2023-04-20 18:11 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 65+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2023-04-20 18:11 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Leonardo Bras, Markus Armbruster, Stefan Hajnoczi,
Eric Blake
On 20.04.23 16:39, Juan Quintela wrote:
> Signed-off-by: Juan Quintela<quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 17/43] migration: Move migrate_cap_set() to options.c
2023-04-20 13:39 ` [PATCH v2 17/43] migration: Move migrate_cap_set() " Juan Quintela
@ 2023-04-20 18:12 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 65+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2023-04-20 18:12 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Leonardo Bras, Markus Armbruster, Stefan Hajnoczi,
Eric Blake
On 20.04.23 16:39, Juan Quintela wrote:
> Signed-off-by: Juan Quintela<quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 18/43] migration: Move parameters functions to option.c
2023-04-20 13:39 ` [PATCH v2 18/43] migration: Move parameters functions to option.c Juan Quintela
@ 2023-04-20 18:28 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 65+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2023-04-20 18:28 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Leonardo Bras, Markus Armbruster, Stefan Hajnoczi,
Eric Blake
On 20.04.23 16:39, Juan Quintela wrote:
> Signed-off-by: Juan Quintela<quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 19/43] migration: Use migrate_max_postcopy_bandwidth()
2023-04-20 13:39 ` [PATCH v2 19/43] migration: Use migrate_max_postcopy_bandwidth() Juan Quintela
@ 2023-04-20 18:30 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 65+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2023-04-20 18:30 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Leonardo Bras, Markus Armbruster, Stefan Hajnoczi,
Eric Blake
On 20.04.23 16:39, Juan Quintela wrote:
> Signed-off-by: Juan Quintela<quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 20/43] migration: Move migrate_use_block_incremental() to option.c
2023-04-20 13:39 ` [PATCH v2 20/43] migration: Move migrate_use_block_incremental() to option.c Juan Quintela
@ 2023-04-20 18:31 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 65+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2023-04-20 18:31 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Leonardo Bras, Markus Armbruster, Stefan Hajnoczi,
Eric Blake
On 20.04.23 16:39, Juan Quintela wrote:
> To be consistent with every other parameter, rename to migrate_block_incremental().
>
> Signed-off-by: Juan Quintela<quintela@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 03/43] migration: Create migration_cap_set()
2023-04-20 13:39 ` [PATCH v2 03/43] migration: Create migration_cap_set() Juan Quintela
@ 2023-04-20 18:44 ` Fabiano Rosas
2023-04-20 19:22 ` Juan Quintela
0 siblings, 1 reply; 65+ messages in thread
From: Fabiano Rosas @ 2023-04-20 18:44 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Juan Quintela <quintela@redhat.com> writes:
> And remove the convoluted use of qmp_migrate_set_capabilities() to
> enable disable MIGRATION_CAPABILITY_BLOCK.
>
> Signed-off-by: Juan Quintela <quintela@redhat.com>
> ---
> migration/migration.c | 34 ++++++++++++++++------------------
> 1 file changed, 16 insertions(+), 18 deletions(-)
>
> diff --git a/migration/migration.c b/migration/migration.c
> index 74f28cdca6..4bf5df4778 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -1913,25 +1913,24 @@ void migrate_set_state(int *state, int old_state, int new_state)
> }
> }
>
> -static MigrationCapabilityStatus *migrate_cap_add(MigrationCapability index,
> - bool state)
> +static bool migrate_cap_set(int cap, bool value, Error **errp)
Just a nit, the commit message says migration_cap_set.
Reviewed-by: Fabiano Rosas <farosas@suse.de>
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 13/43] migration: Create migrate_rdma_pin_all() function
2023-04-20 13:39 ` [PATCH v2 13/43] migration: Create migrate_rdma_pin_all() function Juan Quintela
@ 2023-04-20 18:46 ` Fabiano Rosas
0 siblings, 0 replies; 65+ messages in thread
From: Fabiano Rosas @ 2023-04-20 18:46 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Juan Quintela <quintela@redhat.com> writes:
> Signed-off-by: Juan Quintela <quintela@redhat.com>
> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
> ---
> migration/options.c | 7 +++++++
> migration/options.h | 1 +
> migration/rdma.c | 6 +++---
> 3 files changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/migration/options.c b/migration/options.c
> index 2003e413da..9c9b8e5863 100644
> --- a/migration/options.c
> +++ b/migration/options.c
> @@ -138,6 +138,13 @@ bool migrate_postcopy_ram(void)
> return s->capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM];
> }
>
> +bool migrate_rdma_pin_all(void)
> +{
> + MigrationState *s = migrate_get_current();
> +
> + return s->capabilities[MIGRATION_CAPABILITY_RDMA_PIN_ALL];
> +}
> +
> bool migrate_release_ram(void)
> {
> MigrationState *s;
> diff --git a/migration/options.h b/migration/options.h
> index 316efd1063..25c002b37a 100644
> --- a/migration/options.h
> +++ b/migration/options.h
> @@ -30,6 +30,7 @@ bool migrate_pause_before_switchover(void);
> bool migrate_postcopy_blocktime(void);
> bool migrate_postcopy_preempt(void);
> bool migrate_postcopy_ram(void);
> +bool migrate_rdma_pin_all(void);
> bool migrate_release_ram(void);
> bool migrate_return_path(void);
> bool migrate_validate_uuid(void);
> diff --git a/migration/rdma.c b/migration/rdma.c
> index bf55e2f163..3e7b68c482 100644
> --- a/migration/rdma.c
> +++ b/migration/rdma.c
> @@ -35,6 +35,7 @@
> #include <rdma/rdma_cma.h>
> #include "trace.h"
> #include "qom/object.h"
> +#include "options.h"
> #include <poll.h>
>
> /*
> @@ -4178,8 +4179,7 @@ void rdma_start_outgoing_migration(void *opaque,
> goto err;
> }
>
> - ret = qemu_rdma_source_init(rdma,
> - s->capabilities[MIGRATION_CAPABILITY_RDMA_PIN_ALL], errp);
> + ret = qemu_rdma_source_init(rdma,migrate_rdma_pin_all(), errp);
Missing a space after the comma here.
>
> if (ret) {
> goto err;
> @@ -4201,7 +4201,7 @@ void rdma_start_outgoing_migration(void *opaque,
> }
>
> ret = qemu_rdma_source_init(rdma_return_path,
> - s->capabilities[MIGRATION_CAPABILITY_RDMA_PIN_ALL], errp);
> + migrate_rdma_pin_all(), errp);
>
> if (ret) {
> goto return_path_err;
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 21/43] migration: Create migrate_throttle_trigger_threshold()
2023-04-20 13:39 ` [PATCH v2 21/43] migration: Create migrate_throttle_trigger_threshold() Juan Quintela
@ 2023-04-20 18:47 ` Fabiano Rosas
0 siblings, 0 replies; 65+ messages in thread
From: Fabiano Rosas @ 2023-04-20 18:47 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Juan Quintela <quintela@redhat.com> writes:
> Signed-off-by: Juan Quintela <quintela@redhat.com>
> ---
> migration/options.c | 9 +++++++++
> migration/options.h | 1 +
> migration/ram.c | 3 +--
> 3 files changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/migration/options.c b/migration/options.c
> index 2b6d88b4b9..b9f3815f7e 100644
> --- a/migration/options.c
> +++ b/migration/options.c
> @@ -554,6 +554,15 @@ int migrate_multifd_zstd_level(void)
> return s->parameters.multifd_zstd_level;
> }
>
> +uint8_t migrate_throttle_trigger_threshold(void)
> +{
> + MigrationState *s;
> +
> + s = migrate_get_current();
> +
> + return s->parameters.throttle_trigger_threshold;
> +}
> +
> uint64_t migrate_xbzrle_cache_size(void)
> {
> MigrationState *s;
> diff --git a/migration/options.h b/migration/options.h
> index 96d5a8e6e4..aa54443353 100644
> --- a/migration/options.h
> +++ b/migration/options.h
> @@ -55,6 +55,7 @@ int migrate_multifd_channels(void);
> MultiFDCompression migrate_multifd_compression(void);
> int migrate_multifd_zlib_level(void);
> int migrate_multifd_zstd_level(void);
> +uint8_t migrate_throttle_trigger_threshold(void);
> uint64_t migrate_xbzrle_cache_size(void);
>
> #endif
> diff --git a/migration/ram.c b/migration/ram.c
> index 7f28588dde..68801012ba 100644
> --- a/migration/ram.c
> +++ b/migration/ram.c
> @@ -1179,8 +1179,7 @@ static void migration_update_rates(RAMState *rs, int64_t end_time)
>
> static void migration_trigger_throttle(RAMState *rs)
> {
> - MigrationState *s = migrate_get_current();
> - uint64_t threshold = s->parameters.throttle_trigger_threshold;
> + uint64_t threshold = migrate_throttle_trigger_threshold();
> uint64_t bytes_xfer_period =
> stat64_get(&ram_counters.transferred) - rs->bytes_xfer_prev;
> uint64_t bytes_dirty_period = rs->num_dirty_pages_period * TARGET_PAGE_SIZE;
Reviewed-by: Fabiano Rosas <farosas@suse.de>
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 22/43] migration: Create migrate_checkpoint_delay()
2023-04-20 13:39 ` [PATCH v2 22/43] migration: Create migrate_checkpoint_delay() Juan Quintela
@ 2023-04-20 19:00 ` Fabiano Rosas
0 siblings, 0 replies; 65+ messages in thread
From: Fabiano Rosas @ 2023-04-20 19:00 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Juan Quintela <quintela@redhat.com> writes:
> Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 23/43] migration: Create migrate_max_cpu_throttle()
2023-04-20 13:39 ` [PATCH v2 23/43] migration: Create migrate_max_cpu_throttle() Juan Quintela
@ 2023-04-20 19:01 ` Fabiano Rosas
0 siblings, 0 replies; 65+ messages in thread
From: Fabiano Rosas @ 2023-04-20 19:01 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Juan Quintela <quintela@redhat.com> writes:
> Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 24/43] migration: Move migrate_announce_params() to option.c
2023-04-20 13:39 ` [PATCH v2 24/43] migration: Move migrate_announce_params() to option.c Juan Quintela
@ 2023-04-20 19:04 ` Fabiano Rosas
0 siblings, 0 replies; 65+ messages in thread
From: Fabiano Rosas @ 2023-04-20 19:04 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Juan Quintela <quintela@redhat.com> writes:
> Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
> ---
> migration/migration.c | 14 --------------
> migration/options.c | 19 +++++++++++++++++++
> 2 files changed, 19 insertions(+), 14 deletions(-)
>
> diff --git a/migration/migration.c b/migration/migration.c
> index dbb89c2e7b..2191437b15 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -954,20 +954,6 @@ MigrationParameters *qmp_query_migrate_parameters(Error **errp)
> return params;
> }
>
> -AnnounceParameters *migrate_announce_params(void)
> -{
> - static AnnounceParameters ap;
> -
> - MigrationState *s = migrate_get_current();
> -
> - ap.initial = s->parameters.announce_initial;
> - ap.max = s->parameters.announce_max;
> - ap.rounds = s->parameters.announce_rounds;
> - ap.step = s->parameters.announce_step;
> -
> - return ≈
> -}
> -
> /*
> * Return true if we're already in the middle of a migration
> * (i.e. any of the active or setup states)
> diff --git a/migration/options.c b/migration/options.c
> index 2cb04fbbd1..ed9d2a226f 100644
> --- a/migration/options.c
> +++ b/migration/options.c
> @@ -16,6 +16,7 @@
> #include "qapi/qapi-commands-migration.h"
> #include "qapi/qmp/qerror.h"
> #include "sysemu/runstate.h"
> +#include "migration/misc.h"
> #include "migration.h"
> #include "ram.h"
> #include "options.h"
> @@ -589,3 +590,21 @@ uint64_t migrate_xbzrle_cache_size(void)
>
> return s->parameters.xbzrle_cache_size;
> }
> +
> +/* parameters helpers */
> +
> +AnnounceParameters *migrate_announce_params(void)
> +{
> + static AnnounceParameters ap;
> +
> + MigrationState *s = migrate_get_current();
> +
> + ap.initial = s->parameters.announce_initial;
> + ap.max = s->parameters.announce_max;
> + ap.rounds = s->parameters.announce_rounds;
> + ap.step = s->parameters.announce_step;
> +
> + return ≈
> +}
> +
> +
Extra whitespace here^
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 25/43] migration: Create migrate_cpu_throttle_initial() to option.c
2023-04-20 13:39 ` [PATCH v2 25/43] migration: Create migrate_cpu_throttle_initial() " Juan Quintela
@ 2023-04-20 19:08 ` Fabiano Rosas
0 siblings, 0 replies; 65+ messages in thread
From: Fabiano Rosas @ 2023-04-20 19:08 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Juan Quintela <quintela@redhat.com> writes:
> Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 26/43] migration: Create migrate_cpu_throttle_increment() function
2023-04-20 13:39 ` [PATCH v2 26/43] migration: Create migrate_cpu_throttle_increment() function Juan Quintela
@ 2023-04-20 19:10 ` Fabiano Rosas
0 siblings, 0 replies; 65+ messages in thread
From: Fabiano Rosas @ 2023-04-20 19:10 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Juan Quintela <quintela@redhat.com> writes:
> Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 27/43] migration: Create migrate_cpu_throttle_tailslow() function
2023-04-20 13:39 ` [PATCH v2 27/43] migration: Create migrate_cpu_throttle_tailslow() function Juan Quintela
@ 2023-04-20 19:11 ` Fabiano Rosas
0 siblings, 0 replies; 65+ messages in thread
From: Fabiano Rosas @ 2023-04-20 19:11 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Juan Quintela <quintela@redhat.com> writes:
> Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 28/43] migration: Move migrate_use_tls() to options.c
2023-04-20 13:39 ` [PATCH v2 28/43] migration: Move migrate_use_tls() to options.c Juan Quintela
@ 2023-04-20 19:19 ` Fabiano Rosas
2023-04-20 21:07 ` Juan Quintela
0 siblings, 1 reply; 65+ messages in thread
From: Fabiano Rosas @ 2023-04-20 19:19 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Juan Quintela <quintela@redhat.com> writes:
> Once there, rename it to migrate_tls() and make it return bool for
> consistency.
>
> Signed-off-by: Juan Quintela <quintela@redhat.com>
> ---
> migration/migration.c | 9 ---------
> migration/migration.h | 2 --
> migration/options.c | 16 +++++++++++++++-
> migration/options.h | 9 +++++++++
> migration/tls.c | 3 ++-
> 5 files changed, 26 insertions(+), 13 deletions(-)
>
> diff --git a/migration/migration.c b/migration/migration.c
> index 2191437b15..bbc9a07fd7 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -2251,15 +2251,6 @@ bool migrate_postcopy(void)
> return migrate_postcopy_ram() || migrate_dirty_bitmaps();
> }
>
> -int migrate_use_tls(void)
> -{
> - MigrationState *s;
> -
> - s = migrate_get_current();
> -
> - return s->parameters.tls_creds && *s->parameters.tls_creds;
> -}
> -
> /* migration thread support */
> /*
> * Something bad happened to the RP stream, mark an error
> diff --git a/migration/migration.h b/migration/migration.h
> index 3ae938b19c..2099470e8e 100644
> --- a/migration/migration.h
> +++ b/migration/migration.h
> @@ -449,8 +449,6 @@ MigrationState *migrate_get_current(void);
>
> bool migrate_postcopy(void);
>
> -int migrate_use_tls(void);
> -
> uint64_t ram_get_total_transferred_pages(void);
>
> /* Sending on the return path - generic and then for each message type */
> diff --git a/migration/options.c b/migration/options.c
> index a111d0d43f..6db221157f 100644
> --- a/migration/options.c
> +++ b/migration/options.c
> @@ -204,6 +204,20 @@ bool migrate_zero_copy_send(void)
>
> return s->capabilities[MIGRATION_CAPABILITY_ZERO_COPY_SEND];
> }
> +
> +/* pseudo capabilities */
> +
> +bool migrate_tls(void)
> +{
> + MigrationState *s;
> +
> + s = migrate_get_current();
> +
> + return s->parameters.tls_creds && *s->parameters.tls_creds;
> +}
> +
> +
> +
> typedef enum WriteTrackingSupport {
> WT_SUPPORT_UNKNOWN = 0,
> WT_SUPPORT_ABSENT,
> @@ -353,7 +367,7 @@ bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp)
> new_caps[MIGRATION_CAPABILITY_COMPRESS] ||
> new_caps[MIGRATION_CAPABILITY_XBZRLE] ||
> migrate_multifd_compression() ||
> - migrate_use_tls())) {
> + migrate_tls())) {
> error_setg(errp,
> "Zero copy only available for non-compressed non-TLS multifd migration");
> return false;
> diff --git a/migration/options.h b/migration/options.h
> index 99f6bbd7a1..c91d5cbef0 100644
> --- a/migration/options.h
> +++ b/migration/options.h
> @@ -38,6 +38,15 @@ bool migrate_xbzrle(void);
> bool migrate_zero_blocks(void);
> bool migrate_zero_copy_send(void);
>
> +/*
> + * pseudo capabilities
> + *
> + * This are functions that are used in a similar way that capabilities
> + * check, but they are not a capability.
s/This/These/
s/that capabilities/to capabilities/
> + */
> +
> +bool migrate_tls(void);
> +
> /* capabilities helpers */
>
> bool migrate_caps_check(bool *old_caps, bool *new_caps, Error **errp);
> diff --git a/migration/tls.c b/migration/tls.c
> index 4d2166a209..acd38e0b62 100644
> --- a/migration/tls.c
> +++ b/migration/tls.c
> @@ -22,6 +22,7 @@
> #include "channel.h"
> #include "migration.h"
> #include "tls.h"
> +#include "options.h"
> #include "crypto/tlscreds.h"
> #include "qemu/error-report.h"
> #include "qapi/error.h"
> @@ -165,7 +166,7 @@ void migration_tls_channel_connect(MigrationState *s,
>
> bool migrate_channel_requires_tls_upgrade(QIOChannel *ioc)
> {
> - if (!migrate_use_tls()) {
> + if (!migrate_tls()) {
> return false;
> }
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 03/43] migration: Create migration_cap_set()
2023-04-20 18:44 ` Fabiano Rosas
@ 2023-04-20 19:22 ` Juan Quintela
0 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 19:22 UTC (permalink / raw)
To: Fabiano Rosas
Cc: qemu-devel, Peter Xu, Marc-André Lureau, David Hildenbrand,
John Snow, Fam Zheng, Hailiang Zhang, Michael S. Tsirkin,
qemu-block, Gerd Hoffmann, Vladimir Sementsov-Ogievskiy,
Leonardo Bras, Markus Armbruster, Stefan Hajnoczi, Eric Blake
Fabiano Rosas <farosas@suse.de> wrote:
> Juan Quintela <quintela@redhat.com> writes:
>
>> And remove the convoluted use of qmp_migrate_set_capabilities() to
>> enable disable MIGRATION_CAPABILITY_BLOCK.
>>
>> Signed-off-by: Juan Quintela <quintela@redhat.com>
>> ---
>> migration/migration.c | 34 ++++++++++++++++------------------
>> 1 file changed, 16 insertions(+), 18 deletions(-)
>>
>> diff --git a/migration/migration.c b/migration/migration.c
>> index 74f28cdca6..4bf5df4778 100644
>> --- a/migration/migration.c
>> +++ b/migration/migration.c
>> @@ -1913,25 +1913,24 @@ void migrate_set_state(int *state, int old_state, int new_state)
>> }
>> }
>>
>> -static MigrationCapabilityStatus *migrate_cap_add(MigrationCapability index,
>> - bool state)
>> +static bool migrate_cap_set(int cap, bool value, Error **errp)
>
> Just a nit, the commit message says migration_cap_set.
Good catch. Fixed.
> Reviewed-by: Fabiano Rosas <farosas@suse.de>
Thanks.
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 29/43] migration: Move migrate_postcopy() to options.c
2023-04-20 13:39 ` [PATCH v2 29/43] migration: Move migrate_postcopy() " Juan Quintela
@ 2023-04-20 19:25 ` Fabiano Rosas
0 siblings, 0 replies; 65+ messages in thread
From: Fabiano Rosas @ 2023-04-20 19:25 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Juan Quintela <quintela@redhat.com> writes:
> Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 30/43] migration: Create migrate_max_bandwidth() function
2023-04-20 13:39 ` [PATCH v2 30/43] migration: Create migrate_max_bandwidth() function Juan Quintela
@ 2023-04-20 19:30 ` Fabiano Rosas
0 siblings, 0 replies; 65+ messages in thread
From: Fabiano Rosas @ 2023-04-20 19:30 UTC (permalink / raw)
To: Juan Quintela, qemu-devel
Cc: Peter Xu, Marc-André Lureau, David Hildenbrand, John Snow,
Fam Zheng, Hailiang Zhang, Michael S. Tsirkin, qemu-block,
Gerd Hoffmann, Vladimir Sementsov-Ogievskiy, Leonardo Bras,
Markus Armbruster, Stefan Hajnoczi, Juan Quintela, Eric Blake
Juan Quintela <quintela@redhat.com> writes:
> Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: [PATCH v2 28/43] migration: Move migrate_use_tls() to options.c
2023-04-20 19:19 ` Fabiano Rosas
@ 2023-04-20 21:07 ` Juan Quintela
0 siblings, 0 replies; 65+ messages in thread
From: Juan Quintela @ 2023-04-20 21:07 UTC (permalink / raw)
To: Fabiano Rosas
Cc: qemu-devel, Peter Xu, Marc-André Lureau, David Hildenbrand,
John Snow, Fam Zheng, Hailiang Zhang, Michael S. Tsirkin,
qemu-block, Gerd Hoffmann, Vladimir Sementsov-Ogievskiy,
Leonardo Bras, Markus Armbruster, Stefan Hajnoczi, Eric Blake
Fabiano Rosas <farosas@suse.de> wrote:
> Juan Quintela <quintela@redhat.com> writes:
>
>
>> +/*
>> + * pseudo capabilities
>> + *
>> + * This are functions that are used in a similar way that capabilities
>> + * check, but they are not a capability.
>
> s/This/These/
> s/that capabilities/to capabilities/
>
Fixed, thanks.
^ permalink raw reply [flat|nested] 65+ messages in thread
end of thread, other threads:[~2023-04-20 21:08 UTC | newest]
Thread overview: 65+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-20 13:39 [PATCH v2 00/43] Migration: Create options.c for capabilities/params/properties Juan Quintela
2023-04-20 13:39 ` [PATCH v2 01/43] migration: move migration_global_dump() to migration-hmp-cmds.c Juan Quintela
2023-04-20 13:39 ` [PATCH v2 02/43] spice: move client_migrate_info command to ui/ Juan Quintela
2023-04-20 13:39 ` [PATCH v2 03/43] migration: Create migration_cap_set() Juan Quintela
2023-04-20 18:44 ` Fabiano Rosas
2023-04-20 19:22 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 04/43] migration: Create options.c Juan Quintela
2023-04-20 13:39 ` [PATCH v2 05/43] migration: Move migrate_colo_enabled() to options.c Juan Quintela
2023-04-20 13:39 ` [PATCH v2 06/43] migration: Move migrate_use_compression() " Juan Quintela
2023-04-20 13:39 ` [PATCH v2 07/43] migration: Move migrate_use_events() " Juan Quintela
2023-04-20 13:39 ` [PATCH v2 08/43] migration: Move migrate_use_multifd() " Juan Quintela
2023-04-20 13:39 ` [PATCH v2 09/43] migration: Move migrate_use_zero_copy_send() " Juan Quintela
2023-04-20 13:39 ` [PATCH v2 10/43] migration: Move migrate_use_xbzrle() " Juan Quintela
2023-04-20 13:39 ` [PATCH v2 11/43] migration: Move migrate_use_block() " Juan Quintela
2023-04-20 13:39 ` [PATCH v2 12/43] migration: Move migrate_use_return() " Juan Quintela
2023-04-20 13:39 ` [PATCH v2 13/43] migration: Create migrate_rdma_pin_all() function Juan Quintela
2023-04-20 18:46 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 14/43] migration: Move migrate_caps_check() to options.c Juan Quintela
2023-04-20 18:09 ` Vladimir Sementsov-Ogievskiy
2023-04-20 13:39 ` [PATCH v2 15/43] migration: Move qmp_query_migrate_capabilities() " Juan Quintela
2023-04-20 18:10 ` Vladimir Sementsov-Ogievskiy
2023-04-20 13:39 ` [PATCH v2 16/43] migration: Move qmp_migrate_set_capabilities() " Juan Quintela
2023-04-20 18:11 ` Vladimir Sementsov-Ogievskiy
2023-04-20 13:39 ` [PATCH v2 17/43] migration: Move migrate_cap_set() " Juan Quintela
2023-04-20 18:12 ` Vladimir Sementsov-Ogievskiy
2023-04-20 13:39 ` [PATCH v2 18/43] migration: Move parameters functions to option.c Juan Quintela
2023-04-20 18:28 ` Vladimir Sementsov-Ogievskiy
2023-04-20 13:39 ` [PATCH v2 19/43] migration: Use migrate_max_postcopy_bandwidth() Juan Quintela
2023-04-20 18:30 ` Vladimir Sementsov-Ogievskiy
2023-04-20 13:39 ` [PATCH v2 20/43] migration: Move migrate_use_block_incremental() to option.c Juan Quintela
2023-04-20 18:31 ` Vladimir Sementsov-Ogievskiy
2023-04-20 13:39 ` [PATCH v2 21/43] migration: Create migrate_throttle_trigger_threshold() Juan Quintela
2023-04-20 18:47 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 22/43] migration: Create migrate_checkpoint_delay() Juan Quintela
2023-04-20 19:00 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 23/43] migration: Create migrate_max_cpu_throttle() Juan Quintela
2023-04-20 19:01 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 24/43] migration: Move migrate_announce_params() to option.c Juan Quintela
2023-04-20 19:04 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 25/43] migration: Create migrate_cpu_throttle_initial() " Juan Quintela
2023-04-20 19:08 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 26/43] migration: Create migrate_cpu_throttle_increment() function Juan Quintela
2023-04-20 19:10 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 27/43] migration: Create migrate_cpu_throttle_tailslow() function Juan Quintela
2023-04-20 19:11 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 28/43] migration: Move migrate_use_tls() to options.c Juan Quintela
2023-04-20 19:19 ` Fabiano Rosas
2023-04-20 21:07 ` Juan Quintela
2023-04-20 13:39 ` [PATCH v2 29/43] migration: Move migrate_postcopy() " Juan Quintela
2023-04-20 19:25 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 30/43] migration: Create migrate_max_bandwidth() function Juan Quintela
2023-04-20 19:30 ` Fabiano Rosas
2023-04-20 13:39 ` [PATCH v2 31/43] migration: Move qmp_query_migrate_parameters() to options.c Juan Quintela
2023-04-20 13:39 ` [PATCH v2 32/43] migration: Move qmp_migrate_set_parameters() " Juan Quintela
2023-04-20 13:39 ` [PATCH v2 33/43] migration: Create migrate_params_init() function Juan Quintela
2023-04-20 13:39 ` [PATCH v2 34/43] migration: Make all functions check have the same format Juan Quintela
2023-04-20 13:39 ` [PATCH v2 35/43] migration: Create migrate_downtime_limit() function Juan Quintela
2023-04-20 13:39 ` [PATCH v2 36/43] migration: Move migrate_set_block_incremental() to options.c Juan Quintela
2023-04-20 13:39 ` [PATCH v2 37/43] migration: Move block_cleanup_parameters() " Juan Quintela
2023-04-20 13:39 ` [PATCH v2 38/43] migration: Remove MigrationState from block_cleanup_parameters() Juan Quintela
2023-04-20 13:39 ` [PATCH v2 39/43] migration: Create migrate_tls_creds() function Juan Quintela
2023-04-20 13:39 ` [PATCH v2 40/43] migration: Create migrate_tls_authz() function Juan Quintela
2023-04-20 13:40 ` [PATCH v2 41/43] migration: Create migrate_tls_hostname() function Juan Quintela
2023-04-20 13:40 ` [PATCH v2 42/43] migration: Create migrate_block_bitmap_mapping() function Juan Quintela
2023-04-20 13:40 ` [PATCH v2 43/43] migration: Move migration_properties to options.c Juan Quintela
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).