From: Markus Armbruster <armbru@redhat.com>
To: ~hyman <hyman@git.sr.ht>
Cc: qemu-devel <qemu-devel@nongnu.org>,
~hyman <yong.huang@smartx.com>, "Peter Xu" <peterx@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Juan Quintela" <quintela@redhat.com>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
"Eric Blake" <eblake@redhat.com>,
"Thomas Huth" <thuth@redhat.com>,
"Laurent Vivier" <lvivier@redhat.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>
Subject: Re: [PATCH QEMU v7 2/9] qapi/migration: Introduce x-vcpu-dirty-limit-period parameter
Date: Thu, 06 Jul 2023 16:42:53 +0200 [thread overview]
Message-ID: <87pm55p0cy.fsf@pond.sub.org> (raw)
In-Reply-To: <168853615963.17240.15832775267134683267-2@git.sr.ht> (hyman@git.sr.ht's message of "Wed, 07 Jun 2023 21:32:59 +0800")
~hyman <hyman@git.sr.ht> writes:
> From: Hyman Huang(黄勇) <yong.huang@smartx.com>
>
> Introduce "x-vcpu-dirty-limit-period" migration experimental
> parameter, which is in the range of 1 to 1000ms and used to
> make dirtyrate calculation period configurable.
>
> Currently with the "x-vcpu-dirty-limit-period" varies, the
> total time of live migration changes, test results show the
> optimal value of "x-vcpu-dirty-limit-period" ranges from
> 500ms to 1000 ms. "x-vcpu-dirty-limit-period" should be made
> stable once it proves best value can not be determined with
> developer's experiments.
>
> Signed-off-by: Hyman Huang(黄勇) <yong.huang@smartx.com>
> Reviewed-by: Markus Armbruster <armbru@redhat.com>
> Reviewed-by: Juan Quintela <quintela@redhat.com>
> ---
> migration/migration-hmp-cmds.c | 8 ++++++++
> migration/options.c | 28 ++++++++++++++++++++++++++++
> qapi/migration.json | 34 +++++++++++++++++++++++++++-------
> 3 files changed, 63 insertions(+), 7 deletions(-)
>
> diff --git a/migration/migration-hmp-cmds.c b/migration/migration-hmp-cmds.c
> index 9885d7c9f7..352e9ec716 100644
> --- a/migration/migration-hmp-cmds.c
> +++ b/migration/migration-hmp-cmds.c
> @@ -364,6 +364,10 @@ void hmp_info_migrate_parameters(Monitor *mon, const QDict *qdict)
> }
> }
> }
> +
> + monitor_printf(mon, "%s: %" PRIu64 " ms\n",
> + MigrationParameter_str(MIGRATION_PARAMETER_X_VCPU_DIRTY_LIMIT_PERIOD),
> + params->x_vcpu_dirty_limit_period);
> }
>
> qapi_free_MigrationParameters(params);
> @@ -620,6 +624,10 @@ void hmp_migrate_set_parameter(Monitor *mon, const QDict *qdict)
> error_setg(&err, "The block-bitmap-mapping parameter can only be set "
> "through QMP");
> break;
> + case MIGRATION_PARAMETER_X_VCPU_DIRTY_LIMIT_PERIOD:
> + p->has_x_vcpu_dirty_limit_period = true;
> + visit_type_size(v, param, &p->x_vcpu_dirty_limit_period, &err);
> + break;
> default:
> assert(0);
> }
> diff --git a/migration/options.c b/migration/options.c
> index 5a9505adf7..1de63ba775 100644
> --- a/migration/options.c
> +++ b/migration/options.c
> @@ -80,6 +80,8 @@
> #define DEFINE_PROP_MIG_CAP(name, x) \
> DEFINE_PROP_BOOL(name, MigrationState, capabilities[x], false)
>
> +#define DEFAULT_MIGRATE_VCPU_DIRTY_LIMIT_PERIOD 1000 /* milliseconds */
> +
> Property migration_properties[] = {
> DEFINE_PROP_BOOL("store-global-state", MigrationState,
> store_global_state, true),
> @@ -163,6 +165,9 @@ Property migration_properties[] = {
> 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),
> + DEFINE_PROP_UINT64("x-vcpu-dirty-limit-period", MigrationState,
> + parameters.x_vcpu_dirty_limit_period,
> + DEFAULT_MIGRATE_VCPU_DIRTY_LIMIT_PERIOD),
>
> /* Migration capabilities */
> DEFINE_PROP_MIG_CAP("x-xbzrle", MIGRATION_CAPABILITY_XBZRLE),
> @@ -908,6 +913,9 @@ MigrationParameters *qmp_query_migrate_parameters(Error **errp)
> s->parameters.block_bitmap_mapping);
> }
>
> + params->has_x_vcpu_dirty_limit_period = true;
> + params->x_vcpu_dirty_limit_period = s->parameters.x_vcpu_dirty_limit_period;
> +
> return params;
> }
>
> @@ -940,6 +948,7 @@ void migrate_params_init(MigrationParameters *params)
> params->has_announce_max = true;
> params->has_announce_rounds = true;
> params->has_announce_step = true;
> + params->has_x_vcpu_dirty_limit_period = true;
> }
>
> /*
> @@ -1100,6 +1109,15 @@ bool migrate_params_check(MigrationParameters *params, Error **errp)
> }
> #endif
>
> + if (params->has_x_vcpu_dirty_limit_period &&
> + (params->x_vcpu_dirty_limit_period < 1 ||
> + params->x_vcpu_dirty_limit_period > 1000)) {
> + error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
> + "x-vcpu-dirty-limit-period",
> + "a value between 1 and 1000");
> + return false;
> + }
> +
> return true;
> }
>
> @@ -1199,6 +1217,11 @@ static void migrate_params_test_apply(MigrateSetParameters *params,
> dest->has_block_bitmap_mapping = true;
> dest->block_bitmap_mapping = params->block_bitmap_mapping;
> }
> +
> + if (params->has_x_vcpu_dirty_limit_period) {
> + dest->x_vcpu_dirty_limit_period =
> + params->x_vcpu_dirty_limit_period;
> + }
> }
>
> static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
> @@ -1317,6 +1340,11 @@ static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
> QAPI_CLONE(BitmapMigrationNodeAliasList,
> params->block_bitmap_mapping);
> }
> +
> + if (params->has_x_vcpu_dirty_limit_period) {
> + s->parameters.x_vcpu_dirty_limit_period =
> + params->x_vcpu_dirty_limit_period;
> + }
> }
>
> void qmp_migrate_set_parameters(MigrateSetParameters *params, Error **errp)
> diff --git a/qapi/migration.json b/qapi/migration.json
> index 47dfef0278..384b768e03 100644
> --- a/qapi/migration.json
> +++ b/qapi/migration.json
> @@ -789,9 +789,14 @@
> # Nodes are mapped to their block device name if there is one, and
> # to their node name otherwise. (Since 5.2)
> #
> +# @x-vcpu-dirty-limit-period: Periodic time (in milliseconds) of dirty limit during
> +# live migration. Should be in the range 1 to 1000ms,
> +# defaults to 1000ms. (Since 8.1)
> +#
> # Features:
> #
> -# @unstable: Member @x-checkpoint-delay is experimental.
> +# @unstable: Members @x-checkpoint-delay and @x-vcpu-dirty-limit-period
> +# are experimental.
Please format like
# @x-vcpu-dirty-limit-period: Periodic time (in milliseconds) of dirty
# limit during live migration. Should be in the range 1 to
# 1000ms, defaults to 1000ms. (Since 8.1)
#
# Features:
#
# @unstable: Members @x-checkpoint-delay and
# @x-vcpu-dirty-limit-period are experimental.
to blend in with recent commit a937b6aa739 (qapi: Reformat doc comments
to conform to current conventions).
> #
> # Since: 2.4
> ##
> @@ -809,8 +814,9 @@
> 'multifd-channels',
> 'xbzrle-cache-size', 'max-postcopy-bandwidth',
> 'max-cpu-throttle', 'multifd-compression',
> - 'multifd-zlib-level' ,'multifd-zstd-level',
> - 'block-bitmap-mapping' ] }
> + 'multifd-zlib-level', 'multifd-zstd-level',
> + 'block-bitmap-mapping',
> + { 'name': 'x-vcpu-dirty-limit-period', 'features': ['unstable'] } ] }
>
> ##
> # @MigrateSetParameters:
> @@ -945,9 +951,14 @@
> # Nodes are mapped to their block device name if there is one, and
> # to their node name otherwise. (Since 5.2)
> #
> +# @x-vcpu-dirty-limit-period: Periodic time (in milliseconds) of dirty limit during
> +# live migration. Should be in the range 1 to 1000ms,
> +# defaults to 1000ms. (Since 8.1)
> +#
> # Features:
> #
> -# @unstable: Member @x-checkpoint-delay is experimental.
> +# @unstable: Members @x-checkpoint-delay and @x-vcpu-dirty-limit-period
> +# are experimental.
> #
Likewise.
> # TODO: either fuse back into MigrationParameters, or make
> # MigrationParameters members mandatory
> @@ -982,7 +993,9 @@
> '*multifd-compression': 'MultiFDCompression',
> '*multifd-zlib-level': 'uint8',
> '*multifd-zstd-level': 'uint8',
> - '*block-bitmap-mapping': [ 'BitmapMigrationNodeAlias' ] } }
> + '*block-bitmap-mapping': [ 'BitmapMigrationNodeAlias' ],
> + '*x-vcpu-dirty-limit-period': { 'type': 'uint64',
> + 'features': [ 'unstable' ] } } }
>
> ##
> # @migrate-set-parameters:
> @@ -1137,9 +1150,14 @@
> # Nodes are mapped to their block device name if there is one, and
> # to their node name otherwise. (Since 5.2)
> #
> +# @x-vcpu-dirty-limit-period: Periodic time (in milliseconds) of dirty limit during
> +# live migration. Should be in the range 1 to 1000ms,
> +# defaults to 1000ms. (Since 8.1)
> +#
> # Features:
> #
> -# @unstable: Member @x-checkpoint-delay is experimental.
> +# @unstable: Members @x-checkpoint-delay and @x-vcpu-dirty-limit-period
> +# are experimental.
> #
Likewise.
> # Since: 2.4
> ##
> @@ -1171,7 +1189,9 @@
> '*multifd-compression': 'MultiFDCompression',
> '*multifd-zlib-level': 'uint8',
> '*multifd-zstd-level': 'uint8',
> - '*block-bitmap-mapping': [ 'BitmapMigrationNodeAlias' ] } }
> + '*block-bitmap-mapping': [ 'BitmapMigrationNodeAlias' ],
> + '*x-vcpu-dirty-limit-period': { 'type': 'uint64',
> + 'features': [ 'unstable' ] } } }
>
> ##
> # @query-migrate-parameters:
next prev parent reply other threads:[~2023-07-06 14:43 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-05 5:49 [PATCH QEMU v7 0/9] migration: introduce dirtylimit capability ~hyman
2022-11-18 2:08 ` [PATCH QEMU v7 1/9] softmmu/dirtylimit: Add parameter check for hmp "set_vcpu_dirty_limit" ~hyman
2023-06-07 13:32 ` [PATCH QEMU v7 2/9] qapi/migration: Introduce x-vcpu-dirty-limit-period parameter ~hyman
2023-07-06 14:42 ` Markus Armbruster [this message]
2023-06-07 14:58 ` [PATCH QEMU v7 3/9] qapi/migration: Introduce vcpu-dirty-limit parameters ~hyman
2023-07-06 14:47 ` Markus Armbruster
2023-06-07 15:30 ` [PATCH QEMU v7 4/9] migration: Introduce dirty-limit capability ~hyman
2023-07-06 14:59 ` Markus Armbruster
2023-07-07 3:56 ` Yong Huang
2023-06-07 15:32 ` [PATCH QEMU v7 5/9] migration: Refactor auto-converge capability logic ~hyman
2023-06-07 16:12 ` [PATCH QEMU v7 7/9] migration: Implement dirty-limit convergence algo ~hyman
2023-06-07 16:21 ` [PATCH QEMU v7 8/9] migration: Extend query-migrate to provide dirty page limit info ~hyman
2023-07-06 15:08 ` Markus Armbruster
2023-06-07 16:46 ` [PATCH QEMU v7 9/9] tests: Add migration dirty-limit capability test ~hyman
2023-06-15 13:29 ` [PATCH QEMU v7 6/9] migration: Put the detection logic before auto-converge checking ~hyman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87pm55p0cy.fsf@pond.sub.org \
--to=armbru@redhat.com \
--cc=dgilbert@redhat.com \
--cc=eblake@redhat.com \
--cc=hyman@git.sr.ht \
--cc=lvivier@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=richard.henderson@linaro.org \
--cc=thuth@redhat.com \
--cc=yong.huang@smartx.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.