[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v7 35/42] Don't sync dirty bitmaps in postcopy
From: |
Dr. David Alan Gilbert |
Subject: |
Re: [Qemu-devel] [PATCH v7 35/42] Don't sync dirty bitmaps in postcopy |
Date: |
Tue, 14 Jul 2015 14:13:19 +0100 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
* Juan Quintela (address@hidden) wrote:
> "Dr. David Alan Gilbert (git)" <address@hidden> wrote:
> > From: "Dr. David Alan Gilbert" <address@hidden>
> >
> > Once we're in postcopy the source processors are stopped and memory
> > shouldn't change any more, so there's no need to look at the dirty
> > map.
> >
> > There are two notes to this:
> > 1) If we do resync and a page had changed then the page would get
> > sent again, which the destination wouldn't allow (since it might
> > have also modified the page)
> > 2) Before disabling this I'd seen very rare cases where a page had been
> > marked dirtied although the memory contents are apparently identical
> >
> > Signed-off-by: Dr. David Alan Gilbert <address@hidden>
> > Reviewed-by: David Gibson <address@hidden>
>
> Reviewed-by: Juan Quintela <address@hidden>
>
> But, in what patch do we sync the migratioon bitmap after changing to
> postcopy?
It's called one last time in ram_postcopy_send_discard_bitmap; see:
v7-0025-Postcopy-Maintain-sentmap-and-calculate-discard.patch
and that happens at the start of postcopy mode, when the CPU is stopped and
won't
be running on the source again.
Dave
>
> > ---
> > migration/ram.c | 7 +++++--
> > 1 file changed, 5 insertions(+), 2 deletions(-)
> >
> > diff --git a/migration/ram.c b/migration/ram.c
> > index 01a0ab4..5cff4d6 100644
> > --- a/migration/ram.c
> > +++ b/migration/ram.c
> > @@ -1643,7 +1643,9 @@ static int ram_save_complete(QEMUFile *f, void
> > *opaque)
> > {
> > rcu_read_lock();
> >
> > - migration_bitmap_sync();
> > + if (!migration_postcopy_phase(migrate_get_current())) {
> > + migration_bitmap_sync();
> > + }
> >
> > ram_control_before_iterate(f, RAM_CONTROL_FINISH);
> >
> > @@ -1678,7 +1680,8 @@ static void ram_save_pending(QEMUFile *f, void
> > *opaque, uint64_t max_size,
> >
> > remaining_size = ram_save_remaining() * TARGET_PAGE_SIZE;
> >
> > - if (remaining_size < max_size) {
> > + if (!migration_postcopy_phase(migrate_get_current()) &&
> > + remaining_size < max_size) {
> > qemu_mutex_lock_iothread();
> > rcu_read_lock();
> > migration_bitmap_sync();
--
Dr. David Alan Gilbert / address@hidden / Manchester, UK