Message ID | 20230208133010.17323-2-quintela@redhat.com |
---|---|
State | New |
Headers | show |
Series | Eliminate multifd flush | expand |
On Wed, Feb 08, 2023 at 02:30:05PM +0100, Juan Quintela wrote: > We used to synchronize all channels at the end of each RAM section > sent. That is not needed, so preparing to only synchronize once every > full round in latests patches. > > Notice that we initialize the property as true. We will change the > default when we introduce the new mechanism. > > Signed-off-by: Juan Quintela <quintela@redhat.com> > Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> > Signed-off-by: Juan Quintela <quintela@redhat.com> > > --- > > Rename each-iteration to after-each-section > > Signed-off-by: Juan Quintela <quintela@redhat.com> > --- > qapi/migration.json | 9 ++++++++- > migration/migration.h | 1 + > hw/core/machine.c | 1 + > migration/migration.c | 15 +++++++++++++-- > 4 files changed, 23 insertions(+), 3 deletions(-) > > diff --git a/qapi/migration.json b/qapi/migration.json > index c84fa10e86..d712b082c8 100644 > --- a/qapi/migration.json > +++ b/qapi/migration.json > @@ -478,6 +478,12 @@ > # should not affect the correctness of postcopy migration. > # (since 7.1) > # > +# @multifd-sync-after-each-section: Synchronize channels after each > +# section is sent. We used to do > +# that on the past, but it is s/on/in/ > +# suboptimal. > +# (since 7.1) Shouldn't this be 8.0 now?
Eric Blake <eblake@redhat.com> wrote: > On Wed, Feb 08, 2023 at 02:30:05PM +0100, Juan Quintela wrote: >> We used to synchronize all channels at the end of each RAM section >> sent. That is not needed, so preparing to only synchronize once every >> full round in latests patches. >> >> Notice that we initialize the property as true. We will change the >> default when we introduce the new mechanism. >> >> Signed-off-by: Juan Quintela <quintela@redhat.com> >> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> >> Signed-off-by: Juan Quintela <quintela@redhat.com> >> >> --- >> >> Rename each-iteration to after-each-section >> >> Signed-off-by: Juan Quintela <quintela@redhat.com> >> --- >> qapi/migration.json | 9 ++++++++- >> migration/migration.h | 1 + >> hw/core/machine.c | 1 + >> migration/migration.c | 15 +++++++++++++-- >> 4 files changed, 23 insertions(+), 3 deletions(-) >> >> diff --git a/qapi/migration.json b/qapi/migration.json >> index c84fa10e86..d712b082c8 100644 >> --- a/qapi/migration.json >> +++ b/qapi/migration.json >> @@ -478,6 +478,12 @@ >> # should not affect the correctness of postcopy migration. >> # (since 7.1) >> # >> +# @multifd-sync-after-each-section: Synchronize channels after each >> +# section is sent. We used to do >> +# that on the past, but it is > > s/on/in/ good catch. >> +# suboptimal. >> +# (since 7.1) > > Shouldn't this be 8.0 now? You are right (as always). Changing it. Thanks.
diff --git a/qapi/migration.json b/qapi/migration.json index c84fa10e86..d712b082c8 100644 --- a/qapi/migration.json +++ b/qapi/migration.json @@ -478,6 +478,12 @@ # should not affect the correctness of postcopy migration. # (since 7.1) # +# @multifd-sync-after-each-section: Synchronize channels after each +# section is sent. We used to do +# that on the past, but it is +# suboptimal. +# (since 7.1) +# # Features: # @unstable: Members @x-colo and @x-ignore-shared are experimental. # @@ -492,7 +498,8 @@ 'dirty-bitmaps', 'postcopy-blocktime', 'late-block-activate', { 'name': 'x-ignore-shared', 'features': [ 'unstable' ] }, 'validate-uuid', 'background-snapshot', - 'zero-copy-send', 'postcopy-preempt'] } + 'zero-copy-send', 'postcopy-preempt', + 'multifd-sync-after-each-section'] } ## # @MigrationCapabilityStatus: diff --git a/migration/migration.h b/migration/migration.h index 66511ce532..4dde1faa68 100644 --- a/migration/migration.h +++ b/migration/migration.h @@ -412,6 +412,7 @@ int migrate_multifd_channels(void); MultiFDCompression migrate_multifd_compression(void); int migrate_multifd_zlib_level(void); int migrate_multifd_zstd_level(void); +bool migrate_multifd_sync_after_each_section(void); #ifdef CONFIG_LINUX bool migrate_use_zero_copy_send(void); diff --git a/hw/core/machine.c b/hw/core/machine.c index b5cd42cd8c..224469cee4 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -55,6 +55,7 @@ const size_t hw_compat_7_1_len = G_N_ELEMENTS(hw_compat_7_1); GlobalProperty hw_compat_7_0[] = { { "arm-gicv3-common", "force-8-bit-prio", "on" }, { "nvme-ns", "eui64-default", "on"}, + { "migration", "multifd-sync-after-each-section", "on"}, }; const size_t hw_compat_7_0_len = G_N_ELEMENTS(hw_compat_7_0); diff --git a/migration/migration.c b/migration/migration.c index 7a14aa98d8..cf02295765 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -167,7 +167,8 @@ INITIALIZE_MIGRATE_CAPS_SET(check_caps_background_snapshot, MIGRATION_CAPABILITY_XBZRLE, MIGRATION_CAPABILITY_X_COLO, MIGRATION_CAPABILITY_VALIDATE_UUID, - MIGRATION_CAPABILITY_ZERO_COPY_SEND); + MIGRATION_CAPABILITY_ZERO_COPY_SEND, + MIGRATION_CAPABILITY_MULTIFD_SYNC_AFTER_EACH_SECTION); /* When we add fault tolerance, we could have several migrations at once. For now we don't need to add @@ -2675,6 +2676,15 @@ bool migrate_use_multifd(void) return s->enabled_capabilities[MIGRATION_CAPABILITY_MULTIFD]; } +bool migrate_multifd_sync_after_each_section(void) +{ + MigrationState *s = migrate_get_current(); + + return true; + // We will change this when code gets in. + return s->enabled_capabilities[MIGRATION_CAPABILITY_MULTIFD_SYNC_AFTER_EACH_SECTION]; +} + bool migrate_pause_before_switchover(void) { MigrationState *s; @@ -4501,7 +4511,8 @@ static Property migration_properties[] = { DEFINE_PROP_MIG_CAP("x-zero-copy-send", MIGRATION_CAPABILITY_ZERO_COPY_SEND), #endif - + DEFINE_PROP_MIG_CAP("multifd-sync-after-each-section", + MIGRATION_CAPABILITY_MULTIFD_SYNC_AFTER_EACH_SECTION), DEFINE_PROP_END_OF_LIST(), };