Re: [RFC 2/6] qapi/migration: Introduce vcpu-dirtylimit parameters

2022-05-18 Thread Eric Blake
On Tue, May 17, 2022 at 02:35:02PM +0800, huang...@chinatelecom.cn wrote:
> From: Hyman Huang(黄勇) 
> 
> Introduce "vcpu-dirtylimit" migration parameter used
> to limit dirty page rate during live migration.
> 
> "vcpu-dirtylimit" and "vcpu-dirtylimit-period" are
> two dirtylimit-related migration parameters, which can
> be set before and during live migration by qmp
> migrate-set-parameters.
> 
> This two parameters are used to help implement the dirty
> page rate limit algo of migration.
> 
> Signed-off-by: Hyman Huang(黄勇) 
> ---
> +++ b/qapi/migration.json
> @@ -763,6 +763,9 @@
>  # @vcpu-dirtylimit-period: Periodic time (ms) of dirtylimit during live 
> migration.
>  #  Defaults to 500ms. (Since 7.0)
>  #
> +# @vcpu-dirtylimit: Dirtyrate limit (MB/s) during live migration.
> +#   Defaults to 1. (Since 7.0)
> +#

Same comments as in patch 1 (since 7.1, question on whether
dirty-limit makes more sense).

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.   +1-919-301-3266
Virtualization:  qemu.org | libvirt.org




[RFC 2/6] qapi/migration: Introduce vcpu-dirtylimit parameters

2022-05-17 Thread huangy81
From: Hyman Huang(黄勇) 

Introduce "vcpu-dirtylimit" migration parameter used
to limit dirty page rate during live migration.

"vcpu-dirtylimit" and "vcpu-dirtylimit-period" are
two dirtylimit-related migration parameters, which can
be set before and during live migration by qmp
migrate-set-parameters.

This two parameters are used to help implement the dirty
page rate limit algo of migration.

Signed-off-by: Hyman Huang(黄勇) 
---
 migration/migration.c | 13 +
 monitor/hmp-cmds.c|  7 +++
 qapi/migration.json   | 18 +++---
 3 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/migration/migration.c b/migration/migration.c
index 5e20b2a..9e4ce01 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -117,6 +117,7 @@
 #define DEFAULT_MIGRATE_ANNOUNCE_STEP100
 
 #define DEFAULT_MIGRATE_VCPU_DIRTYLIMIT_PERIOD  500 /* ms */
+#define DEFAULT_MIGRATE_VCPU_DIRTYLIMIT 1   /* MB/s */
 
 static NotifierList migration_state_notifiers =
 NOTIFIER_LIST_INITIALIZER(migration_state_notifiers);
@@ -925,6 +926,8 @@ MigrationParameters *qmp_query_migrate_parameters(Error 
**errp)
 
 params->has_vcpu_dirtylimit_period = true;
 params->vcpu_dirtylimit_period = s->parameters.vcpu_dirtylimit_period;
+params->has_vcpu_dirtylimit = true;
+params->vcpu_dirtylimit = s->parameters.vcpu_dirtylimit;
 
 return params;
 }
@@ -1590,6 +1593,10 @@ static void 
migrate_params_test_apply(MigrateSetParameters *params,
 if (params->has_vcpu_dirtylimit_period) {
 dest->vcpu_dirtylimit_period = params->vcpu_dirtylimit_period;
 }
+
+if (params->has_vcpu_dirtylimit) {
+dest->vcpu_dirtylimit = params->vcpu_dirtylimit;
+}
 }
 
 static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
@@ -1715,6 +1722,9 @@ static void migrate_params_apply(MigrateSetParameters 
*params, Error **errp)
 if (params->has_vcpu_dirtylimit_period) {
 s->parameters.vcpu_dirtylimit_period = params->vcpu_dirtylimit_period;
 }
+if (params->has_vcpu_dirtylimit) {
+s->parameters.vcpu_dirtylimit = params->vcpu_dirtylimit;
+}
 }
 
 void qmp_migrate_set_parameters(MigrateSetParameters *params, Error **errp)
@@ -4241,6 +4251,9 @@ static Property migration_properties[] = {
 DEFINE_PROP_UINT64("vcpu-dirtylimit-period", MigrationState,
   parameters.vcpu_dirtylimit_period,
   DEFAULT_MIGRATE_VCPU_DIRTYLIMIT_PERIOD),
+DEFINE_PROP_UINT64("vcpu-dirtylimit", MigrationState,
+  parameters.vcpu_dirtylimit,
+  DEFAULT_MIGRATE_VCPU_DIRTYLIMIT),
 
 /* Migration capabilities */
 DEFINE_PROP_MIG_CAP("x-xbzrle", MIGRATION_CAPABILITY_XBZRLE),
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index fa33a35..31a0564 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -529,6 +529,9 @@ void hmp_info_migrate_parameters(Monitor *mon, const QDict 
*qdict)
 monitor_printf(mon, "%s: %" PRIu64 " MB/s\n",
 MigrationParameter_str(MIGRATION_PARAMETER_VCPU_DIRTYLIMIT_PERIOD),
 params->vcpu_dirtylimit_period);
+monitor_printf(mon, "%s: %" PRIu64 " MB/s\n",
+MigrationParameter_str(MIGRATION_PARAMETER_VCPU_DIRTYLIMIT),
+params->vcpu_dirtylimit);
 }
 
 qapi_free_MigrationParameters(params);
@@ -1352,6 +1355,10 @@ void hmp_migrate_set_parameter(Monitor *mon, const QDict 
*qdict)
 p->has_vcpu_dirtylimit_period = true;
 visit_type_size(v, param, >vcpu_dirtylimit_period, );
 break;
+case MIGRATION_PARAMETER_VCPU_DIRTYLIMIT:
+p->has_vcpu_dirtylimit = true;
+visit_type_size(v, param, >vcpu_dirtylimit, );
+break;
 default:
 assert(0);
 }
diff --git a/qapi/migration.json b/qapi/migration.json
index 260fb66..68c1fe0 100644
--- a/qapi/migration.json
+++ b/qapi/migration.json
@@ -763,6 +763,9 @@
 # @vcpu-dirtylimit-period: Periodic time (ms) of dirtylimit during live 
migration.
 #  Defaults to 500ms. (Since 7.0)
 #
+# @vcpu-dirtylimit: Dirtyrate limit (MB/s) during live migration.
+#   Defaults to 1. (Since 7.0)
+#
 # Features:
 # @unstable: Member @x-checkpoint-delay is experimental.
 #
@@ -783,7 +786,8 @@
'xbzrle-cache-size', 'max-postcopy-bandwidth',
'max-cpu-throttle', 'multifd-compression',
'multifd-zlib-level', 'multifd-zstd-level',
-   'block-bitmap-mapping', 'vcpu-dirtylimit-period'] }
+   'block-bitmap-mapping', 'vcpu-dirtylimit-period',
+   'vcpu-dirtylimit'] }
 
 ##
 # @MigrateSetParameters:
@@ -931,6 +935,9 @@
 # @vcpu-dirtylimit-period: Periodic time (ms) of dirtylimit during live 
migration.
 #  Defaults to 500ms. (Since 7.0)
 #
+# @vcpu-dirtylimit: Dirtyrate limit (MB/s) during live migration.
+#   Defaults to 1. (Since 7.0)
+#
 # Features:
 #