* Denis Plotnikov (dplotni...@virtuozzo.com) wrote: > The capability is used for the background vmstate saving > using the migration infrastructure. > Background vmstate saving means that the majority of vmstate > (RAM) is saved in the background when VM's vCPUS are running. > This helps to reduce the VM downtime on VM snapshotting. > > Signed-off-by: Denis Plotnikov <dplotni...@virtuozzo.com>
(As normal the 'since' will need bumping) Reviewed-by: Dr. David Alan Gilbert <dgilb...@redhat.com> > --- > migration/migration.c | 35 +++++++++++++++++++++++++++++++++++ > migration/migration.h | 1 + > qapi/migration.json | 6 +++++- > 3 files changed, 41 insertions(+), 1 deletion(-) > > diff --git a/migration/migration.c b/migration/migration.c > index d780601f0c..87096d23ef 100644 > --- a/migration/migration.c > +++ b/migration/migration.c > @@ -697,6 +697,12 @@ static bool migrate_caps_check(bool *cap_list, > return false; > } > > + if (cap_list[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT]) { > + error_setg(errp, "Postcopy is not compatible " > + "with background snapshot"); > + return false; > + } > + > /* 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. > @@ -711,6 +717,26 @@ static bool migrate_caps_check(bool *cap_list, > } > } > > + if (cap_list[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT]) { > + if (cap_list[MIGRATION_CAPABILITY_RELEASE_RAM]) { > + error_setg(errp, "Background snapshot is not compatible " > + "with release ram capability"); > + return false; > + } > + > + if (cap_list[MIGRATION_CAPABILITY_COMPRESS]) { > + error_setg(errp, "Background snapshot is not " > + "currently compatible with compression"); > + return false; > + } > + > + if (cap_list[MIGRATION_CAPABILITY_XBZRLE]) { > + error_setg(errp, "Background snapshot is not " > + "currently compatible with XBZLRE"); > + return false; > + } > + } > + > return true; > } > > @@ -1635,6 +1661,15 @@ bool migrate_use_block_incremental(void) > return s->parameters.block_incremental; > } > > +bool migrate_background_snapshot(void) > +{ > + MigrationState *s; > + > + s = migrate_get_current(); > + > + return s->enabled_capabilities[MIGRATION_CAPABILITY_BACKGROUND_SNAPSHOT]; > +} > + > /* migration thread support */ > /* > * Something bad happened to the RP stream, mark an error > diff --git a/migration/migration.h b/migration/migration.h > index 663415fe48..21babbc008 100644 > --- a/migration/migration.h > +++ b/migration/migration.h > @@ -201,6 +201,7 @@ int migrate_compress_level(void); > int migrate_compress_threads(void); > int migrate_decompress_threads(void); > bool migrate_use_events(void); > +bool migrate_background_snapshot(void); > > /* Sending on the return path - generic and then for each message type */ > void migrate_send_rp_shut(MigrationIncomingState *mis, > diff --git a/qapi/migration.json b/qapi/migration.json > index 03f57c9616..eb5f52b7ff 100644 > --- a/qapi/migration.json > +++ b/qapi/migration.json > @@ -352,12 +352,16 @@ > # > # @x-multifd: Use more than one fd for migration (since 2.11) > # > +# @background-snapshot: Using migration infrastructure makes VM snapshot > +# saving its RAM in background. This reduces VM downtime. (since > 2.12) > +# > # Since: 1.2 > ## > { 'enum': 'MigrationCapability', > 'data': ['xbzrle', 'rdma-pin-all', 'auto-converge', 'zero-blocks', > 'compress', 'events', 'postcopy-ram', 'x-colo', 'release-ram', > - 'block', 'return-path', 'pause-before-switchover', 'x-multifd' ] } > + 'block', 'return-path', 'pause-before-switchover', 'x-multifd', > + 'background-snapshot' ] } > > ## > # @MigrationCapabilityStatus: > -- > 2.17.0 > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK