Re: [PATCH v3 12/21] KVM: X86: Implement ring-based dirty memory tracking

From: Michael S. Tsirkin
Date: Thu Jan 09 2020 - 14:37:13 EST


On Thu, Jan 09, 2020 at 02:21:16PM -0500, Peter Xu wrote:
> On Thu, Jan 09, 2020 at 09:56:10AM -0700, Alex Williamson wrote:
>
> [...]
>
> > > > +Dirty GFNs (Guest Frame Numbers) are stored in the dirty_gfns array.
> > > > +For each of the dirty entry it's defined as:
> > > > +
> > > > +struct kvm_dirty_gfn {
> > > > + __u32 pad;
> > >
> > > How about sticking a length here?
> > > This way huge pages can be dirtied in one go.
> >
> > Not just huge pages, but any contiguous range of dirty pages could be
> > reported far more concisely. Thanks,
>
> I replied in the other thread on why I thought KVM might not suite
> that (while vfio may).
>
> Actually we can even do that for KVM as long as we keep a per-vcpu
> last-dirtied GFN range cache (so we don't publish a dirty GFN right
> after it's dirtied), then we grow that cached dirtied range as long as
> the continuous next/previous page is dirtied. If we found that the
> current dirty GFN is not continuous to the cached range, we publish
> the cached range and let the new GFN be the starting of last-dirtied
> GFN range cache.
>
> However I am not sure how much we'll gain from it. Maybe we can do
> that when we have a real use case for it. For now I'm not sure
> whether it would worth the effort.
>
> Thanks,

I agree for the implementation but I think UAPI should support that
from ground up so we don't need to support two kinds of formats.

> --
> Peter Xu