On Wed, Jul 19, 2023 at 1:26 PM Markus Armbruster <arm...@redhat.com> wrote:
> Yong Huang <yong.hu...@smartx.com> writes: > > > On Tue, Jul 18, 2023 at 7:04 PM Markus Armbruster <arm...@redhat.com> > wrote: > > > >> Yong Huang <yong.hu...@smartx.com> writes: > >> > >> > On Thu, Jul 13, 2023 at 8:44 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/qapi/migration.json b/qapi/migration.json > >> >> > index e43371955a..031832cde5 100644 > >> >> > --- a/qapi/migration.json > >> >> > +++ b/qapi/migration.json > >> >> > @@ -497,6 +497,15 @@ > >> >> > # are present. 'return-path' capability must be enabled to > use > >> >> > # it. (since 8.1) > >> >> > # > >> >> > +# @dirty-limit: If enabled, migration will use the dirty-limit > >> >> > +# algorithm to throttle down guest instead of auto-converge > >> >> > +# algorithm. This algorithm only works when vCPU's dirtyrate > >> >> > >> >> Two spaces after sentence-ending punctuation, please. > >> >> > >> >> "dirty rate" with a space, because that's how we spell it elsewhere. > >> >> > >> >> > +# greater than 'vcpu-dirty-limit', read processes in guest os > >> >> > +# aren't penalized any more, so the algorithm 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 algorithm. (since 8.1) > >> >> > +# > >> >> > >> >> I'm still confused. > >> >> > >> >> The text suggests there are two separate algorithms "to throttle down > >> >> guest": "auto converge" and "dirty limit", and we get to pick one. > >> >> Correct? > >> >> > >> > Yes, indeed ! > >> > > >> >> > >> >> If it is correct, then the last sentence feels redundant: picking > >> >> another algorithm can't affect the algorithm we're *not* using. What > >> >> are you trying to express here? > >> >> > >> > What i want to express is that the new algorithm implementation does > >> > not affect the original algorithm, leaving it in the comments seems > >> > redundant indeed. I'll drop this in the next version. > >> > >> Works for me. > >> > >> >> When do we use "auto converge", and when do we use "dirty limit"? > >> >> > >> >> What does the user really need to know about these algorithms? > Enough > >> >> to pick one, I guess. That means advantages and disadvantages of the > >> >> two algorithms. Which are? > >> > > >> > 1. The implementation of dirty-limit is based on dirty-ring, which is > >> > qualified > >> > to big systems with huge memories and can improve huge guest VM > >> > responsiveness remarkably during live migration. As a consequence, > >> > dirty-limit > >> > is recommended on platforms with huge guest VMs as is the way with > >> > dirty-ring. > >> > 2. dirty-limit convergence algorithm does not affect the > "read-process" > >> in > >> > guest > >> > VM, so guest VM gains the equal read performance nearly as it runs > on > >> > host > >> > during the live migration. As a result, dirty-limit is recommended > if > >> > the guest > >> > VM requires a stable read performance. > >> > The above explanation is about the recommendation of dirty-limit, > please > >> > review, > >> > if it's ok, i'll place it in the comment of the dirty-limit > capability. > >> > >> Yes, please. But before that, I have still more questions. "This > >> algorithm only works when vCPU's dirtyrate greater than > >> 'vcpu-dirty-limit'" is a condition: "FEATURE only works when CONDITION". > >> > > I failed to express my meaning again : ( . "Throttle algo only works > when > > vCPU's dirtyrate greater than 'vcpu-dirty-limit' " should change to > > "vCPU throttle only works when vCPU's dirtyrate greater than > > 'vcpu-dirty-limit'". > > Not the whole "algo" ! > > Let me paraphrase to make sure I got it... The vCPU is throttled as > needed to keep its dirty rate within the limit set with > set-vcpu-dirty-limit. Correct? > Yes. Actually set with the internal function qmp_set_vcpu_dirty_limit. And a parameter called "vcpu-dirty-limit" of migration provided by dirty-limit aims to be the argument of qmp_set_vcpu_dirty_limit. > What happens when I enable the dirty limit convergence algorithm without > setting a limit with set-vcpu-dirty-limit? > dirty-limit will use the default value which is defined in migration/options.c: #define DEFAULT_MIGRATE_VCPU_DIRTY_LIMIT 1 /* MB/s */ So the default of the dirty-limit is 1MB/s. > > >> What happens when the condition is not met? How can the user ensure the > >> condition is met? > >> > >> [...] > >> > >> > > -- Best regards