On Thu, Jul 6, 2023 at 10:59 PM Markus Armbruster <arm...@redhat.com> wrote:
> ~hyman <hy...@git.sr.ht> writes: > > > From: Hyman Huang(黄勇) <yong.hu...@smartx.com> > > > > Introduce migration dirty-limit capability, which can > > be turned on before live migration and limit dirty > > page rate durty live migration. > > > > Introduce migrate_dirty_limit function to help check > > if dirty-limit capability enabled during live migration. > > > > Meanwhile, refactor vcpu_dirty_rate_stat_collect > > so that period can be configured instead of hardcoded. > > > > dirty-limit capability is kind of like auto-converge > > but using dirty limit instead of traditional cpu-throttle > > to throttle guest down. To enable this feature, turn on > > the dirty-limit capability before live migration using > > migrate-set-capabilities, and set the parameters > > "x-vcpu-dirty-limit-period", "vcpu-dirty-limit" suitably > > to speed up convergence. > > > > Signed-off-by: Hyman Huang(黄勇) <yong.hu...@smartx.com> > > Acked-by: Peter Xu <pet...@redhat.com> > > Reviewed-by: Juan Quintela <quint...@redhat.com> > > [...] > > > diff --git a/migration/options.h b/migration/options.h > > index 9aaf363322..b5a950d4e4 100644 > > --- a/migration/options.h > > +++ b/migration/options.h > > @@ -24,6 +24,7 @@ extern Property migration_properties[]; > > /* capabilities */ > > > > bool migrate_auto_converge(void); > > +bool migrate_dirty_limit(void); > > bool migrate_background_snapshot(void); > > bool migrate_block(void); > > bool migrate_colo(void); > > diff --git a/qapi/migration.json b/qapi/migration.json > > index aa590dbf0e..cc51835cdd 100644 > > --- a/qapi/migration.json > > +++ b/qapi/migration.json > > @@ -497,6 +497,16 @@ > > # are present. 'return-path' capability must be enabled to use > > # it. (since 8.1) > > # > > +# @dirty-limit: If enabled, migration will use the dirty-limit algo to > > +# throttle down guest instead of auto-converge algo. > > +# Throttle algo only works when vCPU's dirtyrate greater > > +# than 'vcpu-dirty-limit', read processes in guest os > > +# aren't penalized any more, so this algo can improve > > +# performance of vCPU during live migration. This is an > > +# optional performance feature and should not affect the > > +# correctness of the existing auto-converge algo. > > +# (since 8.1) > > +# > > Please format like > > # @dirty-limit: If enabled, migration will use the dirty-limit algo to > # throttle down guest instead of auto-converge algo. Throttle > # algo only works when vCPU's dirtyrate greater than > # 'vcpu-dirty-limit', read processes in guest os aren't penalized > # any more, so this algo can improve performance of vCPU during > # live migration. This is an optional performance feature and > # should not affect the correctness of the existing auto-converge > # algo. (since 8.1) > > to blend in with recent commit a937b6aa739 (qapi: Reformat doc comments > to conform to current conventions). > > "Dirty rate" with a space, because that's how we spell it elsewhere. > > Moreover, "algo" is not a word, "algorithm" is :) > > Is "the dirty-limit algorithm" defined anywhere? > > More word-smithing is needed, but I'd like to get the reference to "the > dirty-limit algorithm" clarified first. > Dirty limit algorithm just uses the existing internal implementation of qmp api "set-vcpu-dirty-limit" to implement the throttle algorithm of live migration. So the capability is named "dirty-limit" :) More details about dirty-limit algorithm can be referenced as following two commits: https://lore.kernel.org/qemu-devel/20220719170221.576190-8-dgilb...@redhat.com/ https://lore.kernel.org/qemu-devel/20220719170221.576190-7-dgilb...@redhat.com/ > > > # Features: > > # > > # @unstable: Members @x-colo and @x-ignore-shared are experimental. > > @@ -512,7 +522,8 @@ > > 'dirty-bitmaps', 'postcopy-blocktime', 'late-block-activate', > > { 'name': 'x-ignore-shared', 'features': [ 'unstable' ] }, > > 'validate-uuid', 'background-snapshot', > > - 'zero-copy-send', 'postcopy-preempt', 'switchover-ack'] } > > + 'zero-copy-send', 'postcopy-preempt', 'switchover-ack', > > + 'dirty-limit'] } > > > > ## > > # @MigrationCapabilityStatus: > > [...] > > -- Best regards