From: Markus Armbruster <armbru@redhat.com>
To: Yuan Liu <yuan1.liu@intel.com>
Cc: quintela@redhat.com, peterx@redhat.com, farosas@suse.de,
leobras@redhat.com, qemu-devel@nongnu.org,
nanhai.zou@intel.com
Subject: Re: [PATCH v2 1/4] migration: Introduce multifd-compression-accel parameter
Date: Fri, 01 Dec 2023 10:17:09 +0100 [thread overview]
Message-ID: <87jzpyz3hm.fsf@pond.sub.org> (raw)
In-Reply-To: <20231109154638.488213-2-yuan1.liu@intel.com> (Yuan Liu's message of "Thu, 9 Nov 2023 23:46:35 +0800")
Yuan Liu <yuan1.liu@intel.com> writes:
> Introduce the multifd-compression-accel option to enable or disable live
> migration data (de)compression accelerator.
>
> The default value of multifd-compression-accel is auto, and the enabling
> and selection of the accelerator are automatically detected. By setting
> multifd-compression-accel=none, the acceleration function can be disabled.
> Similarly, users can explicitly specify a specific accelerator name, such
> as multifd-compression-accel=qpl.
>
> Signed-off-by: Yuan Liu <yuan1.liu@intel.com>
> Reviewed-by: Nanhai Zou <nanhai.zou@intel.com>
> ---
> hw/core/qdev-properties-system.c | 11 +++++++++++
> include/hw/qdev-properties-system.h | 4 ++++
> migration/migration-hmp-cmds.c | 10 ++++++++++
> migration/options.c | 24 ++++++++++++++++++++++++
> migration/options.h | 1 +
> qapi/migration.json | 26 +++++++++++++++++++++++++-
> 6 files changed, 75 insertions(+), 1 deletion(-)
>
> diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
> index 688340610e..ed23035845 100644
> --- a/hw/core/qdev-properties-system.c
> +++ b/hw/core/qdev-properties-system.c
> @@ -673,6 +673,17 @@ const PropertyInfo qdev_prop_multifd_compression = {
> .set_default_value = qdev_propinfo_set_default_value_enum,
> };
>
> +/* --- MultiFD Compression Accelerator --- */
> +
> +const PropertyInfo qdev_prop_multifd_compression_accel = {
> + .name = "MultiFDCompressionAccel",
> + .description = "MultiFD Compression Accelerator, "
> + "auto/none/qpl",
> + .enum_table = &MultiFDCompressionAccel_lookup,
> + .get = qdev_propinfo_get_enum,
> + .set = qdev_propinfo_set_enum,
> + .set_default_value = qdev_propinfo_set_default_value_enum,
> +};
> /* --- Reserved Region --- */
>
> /*
> diff --git a/include/hw/qdev-properties-system.h b/include/hw/qdev-properties-system.h
> index 0ac327ae60..da086bd836 100644
> --- a/include/hw/qdev-properties-system.h
> +++ b/include/hw/qdev-properties-system.h
> @@ -7,6 +7,7 @@ extern const PropertyInfo qdev_prop_chr;
> extern const PropertyInfo qdev_prop_macaddr;
> extern const PropertyInfo qdev_prop_reserved_region;
> extern const PropertyInfo qdev_prop_multifd_compression;
> +extern const PropertyInfo qdev_prop_multifd_compression_accel;
> extern const PropertyInfo qdev_prop_losttickpolicy;
> extern const PropertyInfo qdev_prop_blockdev_on_error;
> extern const PropertyInfo qdev_prop_bios_chs_trans;
> @@ -41,6 +42,9 @@ extern const PropertyInfo qdev_prop_pcie_link_width;
> #define DEFINE_PROP_MULTIFD_COMPRESSION(_n, _s, _f, _d) \
> DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_multifd_compression, \
> MultiFDCompression)
> +#define DEFINE_PROP_MULTIFD_COMPRESSION_ACCEL(_n, _s, _f, _d) \
> + DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_multifd_compression_accel, \
> + MultiFDCompressionAccel)
> #define DEFINE_PROP_LOSTTICKPOLICY(_n, _s, _f, _d) \
> DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_losttickpolicy, \
> LostTickPolicy)
> diff --git a/migration/migration-hmp-cmds.c b/migration/migration-hmp-cmds.c
> index a82597f18e..3a278c89d9 100644
> --- a/migration/migration-hmp-cmds.c
> +++ b/migration/migration-hmp-cmds.c
> @@ -344,6 +344,11 @@ void hmp_info_migrate_parameters(Monitor *mon, const QDict *qdict)
> monitor_printf(mon, "%s: %s\n",
> MigrationParameter_str(MIGRATION_PARAMETER_MULTIFD_COMPRESSION),
> MultiFDCompression_str(params->multifd_compression));
> + assert(params->has_multifd_compression_accel);
> + monitor_printf(mon, "%s: %s\n",
> + MigrationParameter_str(
> + MIGRATION_PARAMETER_MULTIFD_COMPRESSION_ACCEL),
> + MultiFDCompressionAccel_str(params->multifd_compression_accel));
> monitor_printf(mon, "%s: %" PRIu64 " bytes\n",
> MigrationParameter_str(MIGRATION_PARAMETER_XBZRLE_CACHE_SIZE),
> params->xbzrle_cache_size);
> @@ -610,6 +615,11 @@ void hmp_migrate_set_parameter(Monitor *mon, const QDict *qdict)
> visit_type_MultiFDCompression(v, param, &p->multifd_compression,
> &err);
> break;
> + case MIGRATION_PARAMETER_MULTIFD_COMPRESSION_ACCEL:
> + p->has_multifd_compression_accel = true;
> + visit_type_MultiFDCompressionAccel(v, param,
> + &p->multifd_compression_accel, &err);
> + break;
> case MIGRATION_PARAMETER_MULTIFD_ZLIB_LEVEL:
> p->has_multifd_zlib_level = true;
> visit_type_uint8(v, param, &p->multifd_zlib_level, &err);
> diff --git a/migration/options.c b/migration/options.c
> index 42fb818956..4c567c49e6 100644
> --- a/migration/options.c
> +++ b/migration/options.c
> @@ -59,6 +59,8 @@
> #define DEFAULT_MIGRATE_X_CHECKPOINT_DELAY (200 * 100)
> #define DEFAULT_MIGRATE_MULTIFD_CHANNELS 2
> #define DEFAULT_MIGRATE_MULTIFD_COMPRESSION MULTIFD_COMPRESSION_NONE
> +/* By default use the accelerator for multifd compression */
> +#define DEFAULT_MIGRATE_MULTIFD_COMPRESSION_ACCEL MULTIFD_COMPRESSION_ACCEL_AUTO
The comment is inaccurate. You could add "when available". I'd simply
drop the comment.
> /* 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 */
> @@ -139,6 +141,9 @@ Property migration_properties[] = {
> DEFINE_PROP_MULTIFD_COMPRESSION("multifd-compression", MigrationState,
> parameters.multifd_compression,
> DEFAULT_MIGRATE_MULTIFD_COMPRESSION),
> + DEFINE_PROP_MULTIFD_COMPRESSION_ACCEL("multifd-compression-accel",
> + MigrationState, parameters.multifd_compression_accel,
Break the line after MigrationState for local consistency, please.
> + DEFAULT_MIGRATE_MULTIFD_COMPRESSION_ACCEL),
> DEFINE_PROP_UINT8("multifd-zlib-level", MigrationState,
> parameters.multifd_zlib_level,
> DEFAULT_MIGRATE_MULTIFD_ZLIB_LEVEL),
> @@ -818,6 +823,15 @@ MultiFDCompression migrate_multifd_compression(void)
> return s->parameters.multifd_compression;
> }
>
> +MultiFDCompressionAccel migrate_multifd_compression_accel(void)
> +{
> + MigrationState *s = migrate_get_current();
> +
> + assert(s->parameters.multifd_compression_accel <
> + MULTIFD_COMPRESSION_ACCEL__MAX);
> + return s->parameters.multifd_compression_accel;
> +}
> +
> int migrate_multifd_zlib_level(void)
> {
> MigrationState *s = migrate_get_current();
> @@ -945,6 +959,8 @@ MigrationParameters *qmp_query_migrate_parameters(Error **errp)
> params->multifd_channels = s->parameters.multifd_channels;
> params->has_multifd_compression = true;
> params->multifd_compression = s->parameters.multifd_compression;
> + params->has_multifd_compression_accel = true;
> + params->multifd_compression_accel = s->parameters.multifd_compression_accel;
> params->has_multifd_zlib_level = true;
> params->multifd_zlib_level = s->parameters.multifd_zlib_level;
> params->has_multifd_zstd_level = true;
> @@ -999,6 +1015,7 @@ void migrate_params_init(MigrationParameters *params)
> params->has_block_incremental = true;
> params->has_multifd_channels = true;
> params->has_multifd_compression = true;
> + params->has_multifd_compression_accel = true;
> params->has_multifd_zlib_level = true;
> params->has_multifd_zstd_level = true;
> params->has_xbzrle_cache_size = true;
> @@ -1273,6 +1290,9 @@ static void migrate_params_test_apply(MigrateSetParameters *params,
> if (params->has_multifd_compression) {
> dest->multifd_compression = params->multifd_compression;
> }
> + if (params->has_multifd_compression_accel) {
> + dest->multifd_compression_accel = params->multifd_compression_accel;
> + }
> if (params->has_xbzrle_cache_size) {
> dest->xbzrle_cache_size = params->xbzrle_cache_size;
> }
> @@ -1394,6 +1414,10 @@ static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
> if (params->has_multifd_compression) {
> s->parameters.multifd_compression = params->multifd_compression;
> }
> + if (params->has_multifd_compression_accel) {
> + s->parameters.multifd_compression_accel =
> + params->multifd_compression_accel;
> + }
> if (params->has_xbzrle_cache_size) {
> s->parameters.xbzrle_cache_size = params->xbzrle_cache_size;
> xbzrle_cache_resize(params->xbzrle_cache_size, errp);
> diff --git a/migration/options.h b/migration/options.h
> index 237f2d6b4a..e59bf4b5c1 100644
> --- a/migration/options.h
> +++ b/migration/options.h
> @@ -85,6 +85,7 @@ uint64_t migrate_avail_switchover_bandwidth(void);
> uint64_t migrate_max_postcopy_bandwidth(void);
> int migrate_multifd_channels(void);
> MultiFDCompression migrate_multifd_compression(void);
> +MultiFDCompressionAccel migrate_multifd_compression_accel(void);
> int migrate_multifd_zlib_level(void);
> int migrate_multifd_zstd_level(void);
> uint8_t migrate_throttle_trigger_threshold(void);
> diff --git a/qapi/migration.json b/qapi/migration.json
> index db3df12d6c..47239328e4 100644
> --- a/qapi/migration.json
> +++ b/qapi/migration.json
> @@ -616,6 +616,22 @@
> { 'name': 'zstd', 'if': 'CONFIG_ZSTD' } ] }
>
> ##
> +# @MultiFDCompressionAccel:
> +#
> +# An enumeration of multifd compression accelerator.
> +#
> +# @auto: automatically determined if accelerator is available.
Well, it's always automatically determined. Suggest:
# @auto: if accelerators are available, enable one of them.
> +#
> +# @none: disable compression accelerator.
> +#
> +# @qpl: enable qpl compression accelerator.
> +#
> +# Since: 8.2
> +##
> +{ 'enum': 'MultiFDCompressionAccel',
> + 'data': [ 'auto', 'none',
> + { 'name': 'qpl', 'if': 'CONFIG_QPL' } ] }
> +##
> # @BitmapMigrationBitmapAliasTransform:
> #
> # @persistent: If present, the bitmap will be made persistent or
> @@ -798,6 +814,9 @@
> # @multifd-compression: Which compression method to use. Defaults to
> # none. (Since 5.0)
> #
> +# @multifd-compression-accel: Which compression accelerator to use. Defaults to
> +# auto. (Since 8.2)
Long line. Better:
# @multifd-compression-accel: Which compression accelerator to use.
# Defaults to auto. (Since 8.2)
> +#
> # @multifd-zlib-level: Set the compression level to be used in live
> # migration, the compression level is an integer between 0 and 9,
> # where 0 means no compression, 1 means the best compression
> @@ -853,7 +872,7 @@
> 'block-incremental',
> 'multifd-channels',
> 'xbzrle-cache-size', 'max-postcopy-bandwidth',
> - 'max-cpu-throttle', 'multifd-compression',
> + 'max-cpu-throttle', 'multifd-compression', 'multifd-compression-accel',
Long line. Either
'max-cpu-throttle', 'multifd-compression',
'multifd-compression-accel',
or, if you want to keep compression together
'max-cpu-throttle',
'multifd-compression', 'multifd-compression-accel',
or
'max-cpu-throttle',
'multifd-compression',
'multifd-compression-accel',
You choose.
> 'multifd-zlib-level', 'multifd-zstd-level',
> 'block-bitmap-mapping',
> { 'name': 'x-vcpu-dirty-limit-period', 'features': ['unstable'] },
> @@ -974,6 +993,9 @@
> # @multifd-compression: Which compression method to use. Defaults to
> # none. (Since 5.0)
> #
> +# @multifd-compression-accel: Which compression acclerator to use. Defaults to
> +# auto. (Since 8.2)
> +#
> # @multifd-zlib-level: Set the compression level to be used in live
> # migration, the compression level is an integer between 0 and 9,
> # where 0 means no compression, 1 means the best compression
> @@ -1046,6 +1068,7 @@
> '*max-postcopy-bandwidth': 'size',
> '*max-cpu-throttle': 'uint8',
> '*multifd-compression': 'MultiFDCompression',
> + '*multifd-compression-accel': 'MultiFDCompressionAccel',
> '*multifd-zlib-level': 'uint8',
> '*multifd-zstd-level': 'uint8',
> '*block-bitmap-mapping': [ 'BitmapMigrationNodeAlias' ],
> @@ -1257,6 +1280,7 @@
Missing documentation update. Copy it from MigrateSetParameters,
please.
> '*max-postcopy-bandwidth': 'size',
> '*max-cpu-throttle': 'uint8',
> '*multifd-compression': 'MultiFDCompression',
> + '*multifd-compression-accel': 'MultiFDCompressionAccel',
> '*multifd-zlib-level': 'uint8',
> '*multifd-zstd-level': 'uint8',
> '*block-bitmap-mapping': [ 'BitmapMigrationNodeAlias' ],
> --
> 2.39.3
next prev parent reply other threads:[~2023-12-01 9:18 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-09 15:46 [PATCH v2 0/4] Live Migration Acceleration with IAA Compression Yuan Liu
2023-11-09 15:46 ` [PATCH v2 1/4] migration: Introduce multifd-compression-accel parameter Yuan Liu
2023-12-01 9:17 ` Markus Armbruster [this message]
2023-12-04 9:27 ` Liu, Yuan1
2023-11-09 15:46 ` [PATCH v2 2/4] multifd: Implement multifd compression accelerator Yuan Liu
2023-11-24 13:20 ` Fabiano Rosas
2023-12-01 18:01 ` Fabiano Rosas
2023-12-04 9:24 ` Liu, Yuan1
2023-11-09 15:46 ` [PATCH v2 3/4] configure: add qpl option Yuan Liu
2023-12-01 17:44 ` Fabiano Rosas
2023-12-04 6:57 ` Liu, Yuan1
2023-12-04 12:29 ` Fabiano Rosas
2023-12-04 12:40 ` Liu, Yuan1
2023-11-09 15:46 ` [PATCH v2 4/4] multifd: Introduce QPL compression accelerator Yuan Liu
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=87jzpyz3hm.fsf@pond.sub.org \
--to=armbru@redhat.com \
--cc=farosas@suse.de \
--cc=leobras@redhat.com \
--cc=nanhai.zou@intel.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=yuan1.liu@intel.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.