On 3/12/21 1:03 PM, leirao wrote: > From: "Rao, Lei" <lei....@intel.com> > > When we use continuous dirty memory copy for flushing ram cache on > secondary VM, we can also clean up the bitmap of contiguous dirty > page memory. This also can reduce the VM stop time during checkpoint. > > Signed-off-by: Lei Rao <lei....@intel.com> > --- > migration/ram.c | 29 +++++++++++++++++++++++++---- > 1 file changed, 25 insertions(+), 4 deletions(-) > > diff --git a/migration/ram.c b/migration/ram.c > index b269637..008a26e 100644 > --- a/migration/ram.c > +++ b/migration/ram.c > @@ -856,6 +856,30 @@ unsigned long colo_bitmap_find_dirty(RAMState *rs, > RAMBlock *rb, > return first; > } > > +/** > + * colo_bitmap_clear_dirty:when we flush ram cache to ram, we will use > + * continuous memory copy, so we can also clean up the bitmap of contiguous > + * dirty memory. > + */ > +static inline bool colo_bitmap_clear_dirty(RAMState *rs, > + RAMBlock *rb, > + unsigned long start, > + unsigned long num) > +{ > + bool ret; > + unsigned long i = 0; > + > + qemu_mutex_lock(&rs->bitmap_mutex); > + for (i = 0; i < num; i++) { > + ret = test_and_clear_bit(start + i, rb->bmap); > + if (ret) { > + rs->migration_dirty_pages--; > + } > + } > + qemu_mutex_unlock(&rs->bitmap_mutex); > + return ret; > +}
i'm not sure whether we should clear the dirty_log in kvm side like memory_region_clear_dirty_bitmap() does ? sorry about that, i have missed qemu for a long time... Thanks Zhijian