diff mbox series

[v1,2/8] qapi/migration: Introduce x-vcpu-dirty-limit parameters

Message ID 58009ed32bc30ce40228b191fdd9cacc259ac859.1662052189.git.huangy81@chinatelecom.cn
State New
Headers show
Series migration: introduce dirtylimit capability | expand

Commit Message

Hyman Huang Sept. 1, 2022, 5:22 p.m. UTC
From: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>

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

"x-vcpu-dirty-limit" and "x-vcpu-dirty-limit-period" are
two dirty-limit-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(黄勇) <huangy81@chinatelecom.cn>
---
 migration/migration.c | 14 ++++++++++++++
 monitor/hmp-cmds.c    |  8 ++++++++
 qapi/migration.json   | 18 +++++++++++++++---
 3 files changed, 37 insertions(+), 3 deletions(-)

Comments

Markus Armbruster Sept. 2, 2022, 8:03 a.m. UTC | #1
huangy81@chinatelecom.cn writes:

> From: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
>
> Introduce "x-vcpu-dirty-limit" migration parameter used
> to limit dirty page rate during live migration.
>
> "x-vcpu-dirty-limit" and "x-vcpu-dirty-limit-period" are
> two dirty-limit-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(黄勇) <huangy81@chinatelecom.cn>
[...]
> diff --git a/qapi/migration.json b/qapi/migration.json
> index 332c087..8554d33 100644
> --- a/qapi/migration.json
> +++ b/qapi/migration.json
> @@ -779,6 +779,9 @@
>  # @x-vcpu-dirty-limit-period: Periodic time (ms) of dirty limit during live migration.
>  #                             Defaults to 500ms. (Since 7.1)
>  #
> +# @x-vcpu-dirty-limit: Dirtyrate limit (MB/s) during live migration.
> +#                      Defaults to 1. (Since 7.1)
> +#
>  # Features:
>  # @unstable: Member @x-checkpoint-delay and @x-vcpu-dirty-limit-period
>  #            are experimental.
> @@ -801,7 +804,8 @@
>             'max-cpu-throttle', 'multifd-compression',
>             'multifd-zlib-level', 'multifd-zstd-level',
>             'block-bitmap-mapping',
> -           { 'name': 'x-vcpu-dirty-limit-period', 'features': ['unstable'] } ] }
> +           { 'name': 'x-vcpu-dirty-limit-period', 'features': ['unstable'] },
> +           'x-vcpu-dirty-limit'] }

Shouldn't 'x-vcpu-dirty-limit-period' have feature 'unstable', too?

Same below.

>  
>  ##
>  # @MigrateSetParameters:
> @@ -949,6 +953,9 @@
>  # @x-vcpu-dirty-limit-period: Periodic time (ms) of dirty limit during live migration.
>  #                             Defaults to 500ms. (Since 7.1)
>  #
> +# @x-vcpu-dirty-limit: Dirtyrate limit (MB/s) during live migration.
> +#                      Defaults to 1. (Since 7.1)
> +#
>  # Features:
>  # @unstable: Member @x-checkpoint-delay and @x-vcpu-dirty-limit-period
>  #            are experimental.
> @@ -987,7 +994,8 @@
>              '*multifd-zstd-level': 'uint8',
>              '*block-bitmap-mapping': [ 'BitmapMigrationNodeAlias' ],
>              '*x-vcpu-dirty-limit-period': { 'type': 'uint64',
> -                                            'features': [ 'unstable' ] } } }
> +                                            'features': [ 'unstable' ] },
> +            '*x-vcpu-dirty-limit': 'uint64'} }
>  
>  ##
>  # @migrate-set-parameters:
> @@ -1155,6 +1163,9 @@
>  # @x-vcpu-dirty-limit-period: Periodic time (ms) of dirty limit during live migration.
>  #                             Defaults to 500ms. (Since 7.1)
>  #
> +# @x-vcpu-dirty-limit: Dirtyrate limit (MB/s) during live migration.
> +#                      Defaults to 1. (Since 7.1)
> +#
>  # Features:
>  # @unstable: Member @x-checkpoint-delay and @x-vcpu-dirty-limit-period
>  #            are experimental.
> @@ -1191,7 +1202,8 @@
>              '*multifd-zstd-level': 'uint8',
>              '*block-bitmap-mapping': [ 'BitmapMigrationNodeAlias' ],
>              '*x-vcpu-dirty-limit-period': { 'type': 'uint64',
> -                                            'features': [ 'unstable' ] } } }
> +                                            'features': [ 'unstable' ] },
> +            '*x-vcpu-dirty-limit': 'uint64'} }
>  
>  ##
>  # @query-migrate-parameters:
Hyman Huang Sept. 2, 2022, 1:27 p.m. UTC | #2
在 2022/9/2 16:03, Markus Armbruster 写道:
> huangy81@chinatelecom.cn writes:
> 
>> From: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
>>
>> Introduce "x-vcpu-dirty-limit" migration parameter used
>> to limit dirty page rate during live migration.
>>
>> "x-vcpu-dirty-limit" and "x-vcpu-dirty-limit-period" are
>> two dirty-limit-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(黄勇) <huangy81@chinatelecom.cn>
> [...]
>> diff --git a/qapi/migration.json b/qapi/migration.json
>> index 332c087..8554d33 100644
>> --- a/qapi/migration.json
>> +++ b/qapi/migration.json
>> @@ -779,6 +779,9 @@
>>   # @x-vcpu-dirty-limit-period: Periodic time (ms) of dirty limit during live migration.
>>   #                             Defaults to 500ms. (Since 7.1)
>>   #
>> +# @x-vcpu-dirty-limit: Dirtyrate limit (MB/s) during live migration.
>> +#                      Defaults to 1. (Since 7.1)
>> +#
>>   # Features:
>>   # @unstable: Member @x-checkpoint-delay and @x-vcpu-dirty-limit-period
>>   #            are experimental.
>> @@ -801,7 +804,8 @@
>>              'max-cpu-throttle', 'multifd-compression',
>>              'multifd-zlib-level', 'multifd-zstd-level',
>>              'block-bitmap-mapping',
>> -           { 'name': 'x-vcpu-dirty-limit-period', 'features': ['unstable'] } ] }
>> +           { 'name': 'x-vcpu-dirty-limit-period', 'features': ['unstable'] },
>> +           'x-vcpu-dirty-limit'] }
> 
> Shouldn't 'x-vcpu-dirty-limit-period' have feature 'unstable', too?
> 
Yes, i missed that, thanks very much.
> Same below.
> 
>>   
>>   ##
>>   # @MigrateSetParameters:
>> @@ -949,6 +953,9 @@
>>   # @x-vcpu-dirty-limit-period: Periodic time (ms) of dirty limit during live migration.
>>   #                             Defaults to 500ms. (Since 7.1)
>>   #
>> +# @x-vcpu-dirty-limit: Dirtyrate limit (MB/s) during live migration.
>> +#                      Defaults to 1. (Since 7.1)
>> +#
>>   # Features:
>>   # @unstable: Member @x-checkpoint-delay and @x-vcpu-dirty-limit-period
>>   #            are experimental.
>> @@ -987,7 +994,8 @@
>>               '*multifd-zstd-level': 'uint8',
>>               '*block-bitmap-mapping': [ 'BitmapMigrationNodeAlias' ],
>>               '*x-vcpu-dirty-limit-period': { 'type': 'uint64',
>> -                                            'features': [ 'unstable' ] } } }
>> +                                            'features': [ 'unstable' ] },
>> +            '*x-vcpu-dirty-limit': 'uint64'} }
>>   
>>   ##
>>   # @migrate-set-parameters:
>> @@ -1155,6 +1163,9 @@
>>   # @x-vcpu-dirty-limit-period: Periodic time (ms) of dirty limit during live migration.
>>   #                             Defaults to 500ms. (Since 7.1)
>>   #
>> +# @x-vcpu-dirty-limit: Dirtyrate limit (MB/s) during live migration.
>> +#                      Defaults to 1. (Since 7.1)
>> +#
>>   # Features:
>>   # @unstable: Member @x-checkpoint-delay and @x-vcpu-dirty-limit-period
>>   #            are experimental.
>> @@ -1191,7 +1202,8 @@
>>               '*multifd-zstd-level': 'uint8',
>>               '*block-bitmap-mapping': [ 'BitmapMigrationNodeAlias' ],
>>               '*x-vcpu-dirty-limit-period': { 'type': 'uint64',
>> -                                            'features': [ 'unstable' ] } } }
>> +                                            'features': [ 'unstable' ] },
>> +            '*x-vcpu-dirty-limit': 'uint64'} }
>>   
>>   ##
>>   # @query-migrate-parameters:
>
diff mbox series

Patch

diff --git a/migration/migration.c b/migration/migration.c
index a8a8065..a748fe5 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -117,6 +117,7 @@ 
 #define DEFAULT_MIGRATE_ANNOUNCE_STEP    100
 
 #define DEFAULT_MIGRATE_VCPU_DIRTY_LIMIT_PERIOD     500     /* ms */
+#define DEFAULT_MIGRATE_VCPU_DIRTY_LIMIT            1       /* MB/s */
 
 static NotifierList migration_state_notifiers =
     NOTIFIER_LIST_INITIALIZER(migration_state_notifiers);
@@ -967,6 +968,9 @@  MigrationParameters *qmp_query_migrate_parameters(Error **errp)
     params->has_x_vcpu_dirty_limit_period = true;
     params->x_vcpu_dirty_limit_period = s->parameters.x_vcpu_dirty_limit_period;
 
+    params->has_x_vcpu_dirty_limit = true;
+    params->x_vcpu_dirty_limit = s->parameters.x_vcpu_dirty_limit;
+
     return params;
 }
 
@@ -1671,6 +1675,10 @@  static void migrate_params_test_apply(MigrateSetParameters *params,
     if (params->has_x_vcpu_dirty_limit_period) {
         dest->x_vcpu_dirty_limit_period = params->x_vcpu_dirty_limit_period;
     }
+
+    if (params->has_x_vcpu_dirty_limit) {
+        dest->x_vcpu_dirty_limit = params->x_vcpu_dirty_limit;
+    }
 }
 
 static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
@@ -1797,6 +1805,9 @@  static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
         s->parameters.x_vcpu_dirty_limit_period =
             params->x_vcpu_dirty_limit_period;
     }
+    if (params->has_x_vcpu_dirty_limit) {
+        s->parameters.x_vcpu_dirty_limit = params->x_vcpu_dirty_limit;
+    }
 }
 
 void qmp_migrate_set_parameters(MigrateSetParameters *params, Error **errp)
@@ -4401,6 +4412,9 @@  static Property migration_properties[] = {
     DEFINE_PROP_UINT64("x-vcpu-dirty-limit-period", MigrationState,
                        parameters.x_vcpu_dirty_limit_period,
                        DEFAULT_MIGRATE_VCPU_DIRTY_LIMIT_PERIOD),
+    DEFINE_PROP_UINT64("vcpu-dirty-limit", MigrationState,
+                       parameters.x_vcpu_dirty_limit,
+                       DEFAULT_MIGRATE_VCPU_DIRTY_LIMIT),
 
     /* Migration capabilities */
     DEFINE_PROP_MIG_CAP("x-xbzrle", MIGRATION_CAPABILITY_XBZRLE),
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index 7569859..b362fae 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -536,6 +536,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);
+
+        monitor_printf(mon, "%s: %" PRIu64 " MB/s\n",
+            MigrationParameter_str(MIGRATION_PARAMETER_X_VCPU_DIRTY_LIMIT),
+            params->x_vcpu_dirty_limit);
     }
 
     qapi_free_MigrationParameters(params);
@@ -1359,6 +1363,10 @@  void hmp_migrate_set_parameter(Monitor *mon, const QDict *qdict)
         p->has_x_vcpu_dirty_limit_period = true;
         visit_type_size(v, param, &p->x_vcpu_dirty_limit_period, &err);
         break;
+    case MIGRATION_PARAMETER_X_VCPU_DIRTY_LIMIT:
+        p->has_x_vcpu_dirty_limit = true;
+        visit_type_size(v, param, &p->x_vcpu_dirty_limit, &err);
+        break;
     default:
         assert(0);
     }
diff --git a/qapi/migration.json b/qapi/migration.json
index 332c087..8554d33 100644
--- a/qapi/migration.json
+++ b/qapi/migration.json
@@ -779,6 +779,9 @@ 
 # @x-vcpu-dirty-limit-period: Periodic time (ms) of dirty limit during live migration.
 #                             Defaults to 500ms. (Since 7.1)
 #
+# @x-vcpu-dirty-limit: Dirtyrate limit (MB/s) during live migration.
+#                      Defaults to 1. (Since 7.1)
+#
 # Features:
 # @unstable: Member @x-checkpoint-delay and @x-vcpu-dirty-limit-period
 #            are experimental.
@@ -801,7 +804,8 @@ 
            'max-cpu-throttle', 'multifd-compression',
            'multifd-zlib-level', 'multifd-zstd-level',
            'block-bitmap-mapping',
-           { 'name': 'x-vcpu-dirty-limit-period', 'features': ['unstable'] } ] }
+           { 'name': 'x-vcpu-dirty-limit-period', 'features': ['unstable'] },
+           'x-vcpu-dirty-limit'] }
 
 ##
 # @MigrateSetParameters:
@@ -949,6 +953,9 @@ 
 # @x-vcpu-dirty-limit-period: Periodic time (ms) of dirty limit during live migration.
 #                             Defaults to 500ms. (Since 7.1)
 #
+# @x-vcpu-dirty-limit: Dirtyrate limit (MB/s) during live migration.
+#                      Defaults to 1. (Since 7.1)
+#
 # Features:
 # @unstable: Member @x-checkpoint-delay and @x-vcpu-dirty-limit-period
 #            are experimental.
@@ -987,7 +994,8 @@ 
             '*multifd-zstd-level': 'uint8',
             '*block-bitmap-mapping': [ 'BitmapMigrationNodeAlias' ],
             '*x-vcpu-dirty-limit-period': { 'type': 'uint64',
-                                            'features': [ 'unstable' ] } } }
+                                            'features': [ 'unstable' ] },
+            '*x-vcpu-dirty-limit': 'uint64'} }
 
 ##
 # @migrate-set-parameters:
@@ -1155,6 +1163,9 @@ 
 # @x-vcpu-dirty-limit-period: Periodic time (ms) of dirty limit during live migration.
 #                             Defaults to 500ms. (Since 7.1)
 #
+# @x-vcpu-dirty-limit: Dirtyrate limit (MB/s) during live migration.
+#                      Defaults to 1. (Since 7.1)
+#
 # Features:
 # @unstable: Member @x-checkpoint-delay and @x-vcpu-dirty-limit-period
 #            are experimental.
@@ -1191,7 +1202,8 @@ 
             '*multifd-zstd-level': 'uint8',
             '*block-bitmap-mapping': [ 'BitmapMigrationNodeAlias' ],
             '*x-vcpu-dirty-limit-period': { 'type': 'uint64',
-                                            'features': [ 'unstable' ] } } }
+                                            'features': [ 'unstable' ] },
+            '*x-vcpu-dirty-limit': 'uint64'} }
 
 ##
 # @query-migrate-parameters: