David Hildenbrand <da...@redhat.com> wrote: > We don't want to migrate memory that corresponds to discarded ranges as > managed by a RamDiscardManager responsible for the mapped memory region of > the RAMBlock. The content of these pages is essentially stale and > without any guarantees for the VM ("logically unplugged"). > > Depending on the underlying memory type, even reading memory might populate > memory on the source, resulting in an undesired memory consumption. Of > course, on the destination, even writing a zeropage consumes memory, > which we also want to avoid (similar to free page hinting). > > Currently, virtio-mem tries achieving that goal (not migrating "unplugged" > memory that was discarded) by going via qemu_guest_free_page_hint() - but > it's hackish and incomplete. > > For example, background snapshots still end up reading all memory, as > they don't do bitmap syncs. Postcopy recovery code will re-add > previously cleared bits to the dirty bitmap and migrate them. > > Let's consult the RamDiscardManager after setting up our dirty bitmap > initially and when postcopy recovery code reinitializes it: clear > corresponding bits in the dirty bitmaps (e.g., of the RAMBlock and inside > KVM). It's important to fixup the dirty bitmap *after* our initial bitmap > sync, such that the corresponding dirty bits in KVM are actually cleared. > > As colo is incompatible with discarding of RAM and inhibits it, we don't > have to bother. > > Note: if a misbehaving guest would use discarded ranges after migration > started we would still migrate that memory: however, then we already > populated that memory on the migration source. > > Reviewed-by: Peter Xu <pet...@redhat.com> > Signed-off-by: David Hildenbrand <da...@redhat.com>
Reviewed-by: Juan Quintela <quint...@redhat.com>