* Peter Xu (pet...@redhat.com) wrote: > Add a parameter that can conditionally disable the "break sending huge > page" behavior in postcopy preemption. By default it's enabled. > > It should only be used for debugging purposes, and we should never remove > the "x-" prefix.
This is actually a 'property' and not a 'Parameter' isn't it? > Signed-off-by: Peter Xu <pet...@redhat.com> Other than the title, Reviewed-by: Dr. David Alan Gilbert <dgilb...@redhat.com> > --- > migration/migration.c | 2 ++ > migration/migration.h | 7 +++++++ > migration/ram.c | 7 +++++++ > 3 files changed, 16 insertions(+) > > diff --git a/migration/migration.c b/migration/migration.c > index cce741e20e..cd9650f2e2 100644 > --- a/migration/migration.c > +++ b/migration/migration.c > @@ -4329,6 +4329,8 @@ static Property migration_properties[] = { > DEFINE_PROP_SIZE("announce-step", MigrationState, > parameters.announce_step, > DEFAULT_MIGRATE_ANNOUNCE_STEP), > + DEFINE_PROP_BOOL("x-postcopy-preempt-break-huge", MigrationState, > + postcopy_preempt_break_huge, true), > > /* Migration capabilities */ > DEFINE_PROP_MIG_CAP("x-xbzrle", MIGRATION_CAPABILITY_XBZRLE), > diff --git a/migration/migration.h b/migration/migration.h > index f898b8547a..6ee520642f 100644 > --- a/migration/migration.h > +++ b/migration/migration.h > @@ -340,6 +340,13 @@ struct MigrationState { > bool send_configuration; > /* Whether we send section footer during migration */ > bool send_section_footer; > + /* > + * Whether we allow break sending huge pages when postcopy preempt is > + * enabled. When disabled, we won't interrupt precopy within sending a > + * host huge page, which is the old behavior of vanilla postcopy. > + * NOTE: this parameter is ignored if postcopy preempt is not enabled. > + */ > + bool postcopy_preempt_break_huge; > > /* Needed by postcopy-pause state */ > QemuSemaphore postcopy_pause_sem; > diff --git a/migration/ram.c b/migration/ram.c > index a4b39e3675..f3a79c8556 100644 > --- a/migration/ram.c > +++ b/migration/ram.c > @@ -2266,11 +2266,18 @@ static int ram_save_target_page(RAMState *rs, > PageSearchStatus *pss) > > static bool postcopy_needs_preempt(RAMState *rs, PageSearchStatus *pss) > { > + MigrationState *ms = migrate_get_current(); > + > /* Not enabled eager preempt? Then never do that. */ > if (!migrate_postcopy_preempt()) { > return false; > } > > + /* If the user explicitly disabled breaking of huge page, skip */ > + if (!ms->postcopy_preempt_break_huge) { > + return false; > + } > + > /* If the ramblock we're sending is a small page? Never bother. */ > if (qemu_ram_pagesize(pss->block) == TARGET_PAGE_SIZE) { > return false; > -- > 2.32.0 > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK