Message ID | 20210318174611.293520-3-andrey.gruzdev@virtuozzo.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | migration: Fixes to the 'background-snapshot' code | expand |
On 18.03.21 18:46, Andrey Gruzdev wrote: > The same thing as for incoming postcopy - we cannot deal with concurrent > RAM discards when using background snapshot feature in outgoing migration. > > Signed-off-by: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com> > --- > hw/virtio/virtio-balloon.c | 8 ++++++-- > include/migration/misc.h | 2 ++ > migration/migration.c | 8 ++++++++ > 3 files changed, 16 insertions(+), 2 deletions(-) > > diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c > index e770955176..d120bf8f43 100644 > --- a/hw/virtio/virtio-balloon.c > +++ b/hw/virtio/virtio-balloon.c > @@ -66,8 +66,12 @@ static bool virtio_balloon_pbp_matches(PartiallyBalloonedPage *pbp, > > static bool virtio_balloon_inhibited(void) > { > - /* Postcopy cannot deal with concurrent discards, so it's special. */ > - return ram_block_discard_is_disabled() || migration_in_incoming_postcopy(); > + /* > + * Postcopy cannot deal with concurrent discards, > + * so it's special, as well as background snapshots. > + */ > + return ram_block_discard_is_disabled() || migration_in_incoming_postcopy() || > + migration_in_bg_snapshot(); > } > > static void balloon_inflate_page(VirtIOBalloon *balloon, > diff --git a/include/migration/misc.h b/include/migration/misc.h > index bccc1b6b44..738675ef52 100644 > --- a/include/migration/misc.h > +++ b/include/migration/misc.h > @@ -70,6 +70,8 @@ bool migration_in_postcopy_after_devices(MigrationState *); > void migration_global_dump(Monitor *mon); > /* True if incomming migration entered POSTCOPY_INCOMING_DISCARD */ > bool migration_in_incoming_postcopy(void); > +/* True if background snapshot is active */ > +bool migration_in_bg_snapshot(void); > > /* migration/block-dirty-bitmap.c */ > void dirty_bitmap_mig_init(void); > diff --git a/migration/migration.c b/migration/migration.c > index 496cf6e17b..656d6249a6 100644 > --- a/migration/migration.c > +++ b/migration/migration.c > @@ -1976,6 +1976,14 @@ bool migration_in_incoming_postcopy(void) > return ps >= POSTCOPY_INCOMING_DISCARD && ps < POSTCOPY_INCOMING_END; > } > > +bool migration_in_bg_snapshot(void) > +{ > + MigrationState *s = migrate_get_current(); > + > + return migrate_background_snapshot() && > + migration_is_setup_or_active(s->state); > +} > + > bool migration_is_idle(void) > { > MigrationState *s = current_migration; > Reviewed-by: David Hildenbrand <david@redhat.com>
On 18.03.2021 21:16, David Hildenbrand wrote: > On 18.03.21 18:46, Andrey Gruzdev wrote: >> The same thing as for incoming postcopy - we cannot deal with concurrent >> RAM discards when using background snapshot feature in outgoing >> migration. >> >> Signed-off-by: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com> >> --- >> hw/virtio/virtio-balloon.c | 8 ++++++-- >> include/migration/misc.h | 2 ++ >> migration/migration.c | 8 ++++++++ >> 3 files changed, 16 insertions(+), 2 deletions(-) >> >> diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c >> index e770955176..d120bf8f43 100644 >> --- a/hw/virtio/virtio-balloon.c >> +++ b/hw/virtio/virtio-balloon.c >> @@ -66,8 +66,12 @@ static bool >> virtio_balloon_pbp_matches(PartiallyBalloonedPage *pbp, >> static bool virtio_balloon_inhibited(void) >> { >> - /* Postcopy cannot deal with concurrent discards, so it's >> special. */ >> - return ram_block_discard_is_disabled() || >> migration_in_incoming_postcopy(); >> + /* >> + * Postcopy cannot deal with concurrent discards, >> + * so it's special, as well as background snapshots. >> + */ >> + return ram_block_discard_is_disabled() || >> migration_in_incoming_postcopy() || >> + migration_in_bg_snapshot(); >> } >> static void balloon_inflate_page(VirtIOBalloon *balloon, >> diff --git a/include/migration/misc.h b/include/migration/misc.h >> index bccc1b6b44..738675ef52 100644 >> --- a/include/migration/misc.h >> +++ b/include/migration/misc.h >> @@ -70,6 +70,8 @@ bool >> migration_in_postcopy_after_devices(MigrationState *); >> void migration_global_dump(Monitor *mon); >> /* True if incomming migration entered POSTCOPY_INCOMING_DISCARD */ >> bool migration_in_incoming_postcopy(void); >> +/* True if background snapshot is active */ >> +bool migration_in_bg_snapshot(void); >> /* migration/block-dirty-bitmap.c */ >> void dirty_bitmap_mig_init(void); >> diff --git a/migration/migration.c b/migration/migration.c >> index 496cf6e17b..656d6249a6 100644 >> --- a/migration/migration.c >> +++ b/migration/migration.c >> @@ -1976,6 +1976,14 @@ bool migration_in_incoming_postcopy(void) >> return ps >= POSTCOPY_INCOMING_DISCARD && ps < >> POSTCOPY_INCOMING_END; >> } >> +bool migration_in_bg_snapshot(void) >> +{ >> + MigrationState *s = migrate_get_current(); >> + >> + return migrate_background_snapshot() && >> + migration_is_setup_or_active(s->state); >> +} >> + >> bool migration_is_idle(void) >> { >> MigrationState *s = current_migration; >> > > Reviewed-by: David Hildenbrand <david@redhat.com> > Thanks!
diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c index e770955176..d120bf8f43 100644 --- a/hw/virtio/virtio-balloon.c +++ b/hw/virtio/virtio-balloon.c @@ -66,8 +66,12 @@ static bool virtio_balloon_pbp_matches(PartiallyBalloonedPage *pbp, static bool virtio_balloon_inhibited(void) { - /* Postcopy cannot deal with concurrent discards, so it's special. */ - return ram_block_discard_is_disabled() || migration_in_incoming_postcopy(); + /* + * Postcopy cannot deal with concurrent discards, + * so it's special, as well as background snapshots. + */ + return ram_block_discard_is_disabled() || migration_in_incoming_postcopy() || + migration_in_bg_snapshot(); } static void balloon_inflate_page(VirtIOBalloon *balloon, diff --git a/include/migration/misc.h b/include/migration/misc.h index bccc1b6b44..738675ef52 100644 --- a/include/migration/misc.h +++ b/include/migration/misc.h @@ -70,6 +70,8 @@ bool migration_in_postcopy_after_devices(MigrationState *); void migration_global_dump(Monitor *mon); /* True if incomming migration entered POSTCOPY_INCOMING_DISCARD */ bool migration_in_incoming_postcopy(void); +/* True if background snapshot is active */ +bool migration_in_bg_snapshot(void); /* migration/block-dirty-bitmap.c */ void dirty_bitmap_mig_init(void); diff --git a/migration/migration.c b/migration/migration.c index 496cf6e17b..656d6249a6 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1976,6 +1976,14 @@ bool migration_in_incoming_postcopy(void) return ps >= POSTCOPY_INCOMING_DISCARD && ps < POSTCOPY_INCOMING_END; } +bool migration_in_bg_snapshot(void) +{ + MigrationState *s = migrate_get_current(); + + return migrate_background_snapshot() && + migration_is_setup_or_active(s->state); +} + bool migration_is_idle(void) { MigrationState *s = current_migration;
The same thing as for incoming postcopy - we cannot deal with concurrent RAM discards when using background snapshot feature in outgoing migration. Signed-off-by: Andrey Gruzdev <andrey.gruzdev@virtuozzo.com> --- hw/virtio/virtio-balloon.c | 8 ++++++-- include/migration/misc.h | 2 ++ migration/migration.c | 8 ++++++++ 3 files changed, 16 insertions(+), 2 deletions(-)