On Sat, Jul 23, 2022 at 03:49:16PM +0800, huang...@chinatelecom.cn wrote: > From: Hyman Huang(黄勇) <huang...@chinatelecom.cn> > > Implement dirty-limit convergence algo for live migration, > which is kind of like auto-converge algo but using dirty-limit > instead of cpu throttle to make migration convergent. > > Signed-off-by: Hyman Huang(黄勇) <huang...@chinatelecom.cn> > --- > migration/ram.c | 53 > +++++++++++++++++++++++++++++++++++++------------- > migration/trace-events | 1 + > 2 files changed, 41 insertions(+), 13 deletions(-) > > diff --git a/migration/ram.c b/migration/ram.c > index b94669b..2a5cd23 100644 > --- a/migration/ram.c > +++ b/migration/ram.c > @@ -45,6 +45,7 @@ > #include "qapi/error.h" > #include "qapi/qapi-types-migration.h" > #include "qapi/qapi-events-migration.h" > +#include "qapi/qapi-commands-migration.h" > #include "qapi/qmp/qerror.h" > #include "trace.h" > #include "exec/ram_addr.h" > @@ -57,6 +58,8 @@ > #include "qemu/iov.h" > #include "multifd.h" > #include "sysemu/runstate.h" > +#include "sysemu/dirtylimit.h" > +#include "sysemu/kvm.h" > > #include "hw/boards.h" /* for machine_dump_guest_core() */ > > @@ -1139,6 +1142,21 @@ static void migration_update_rates(RAMState *rs, > int64_t end_time) > } > } > > +/* > + * Enable dirty-limit to throttle down the guest > + */ > +static void migration_dirty_limit_guest(void) > +{ > + if (!dirtylimit_in_service()) { > + MigrationState *s = migrate_get_current(); > + int64_t quota_dirtyrate = s->parameters.vcpu_dirty_limit; > + > + /* Set quota dirtyrate if dirty limit not in service */ > + qmp_set_vcpu_dirty_limit(false, -1, quota_dirtyrate, NULL); > + trace_migration_dirty_limit_guest(quota_dirtyrate); > + } > +}
What if migration is cancelled? Do we have logic to stop the dirty limit, or should we? -- Peter Xu