* Juan Quintela (quint...@redhat.com) wrote:
> "Dr. David Alan Gilbert" <dgilb...@redhat.com> wrote:
> > * Juan Quintela (quint...@redhat.com) wrote:
> >> This implements the zero page dection and handling.
> >> 
> >> Signed-off-by: Juan Quintela <quint...@redhat.com>
> >> 
> >> ---
> >> 
> >> Add comment for offset (dave)
> >>              }
> >>          }
> >>  
> >> +        for (int i = 0; i < p->zero_num; i++) {
> >> +            memset(p->host + p->zero[i], 0, qemu_target_page_size());
> >> +        }
> >> +
> >
> > On the existing code, it tries to avoid doing the memset if the target
> > page size matches; that avoids allocating the zero pages on the
> > destination host; should we try and do the same here?
> >
> > Dave
> 
> Hi Dave
> 
> That only happens on postcopy.
> With precopy we have to do the memset, because we can have:
> 
> write non zero to page 50
> migrate page 50
> write zeros to page 50
> Another migration pass
> If we don't write here, we have garbage on the page.
> 
> Or I am missing something?

You're missing the call to buffer_is_zero:

void ram_handle_compressed(void *host, uint8_t ch, uint64_t size)
{
    if (ch != 0 || !buffer_is_zero(host, size)) {
        memset(host, ch, size);
    }
}

so it checks the buffer to see if it was non-zero before doing the
memset.

Dave

> Later, Juan.
> 
-- 
Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK


Reply via email to