]> www.infradead.org Git - users/dwmw2/qemu.git/commit
migration/ram: Handle RAMBlocks with a RamDiscardManager on the migration source
authorDavid Hildenbrand <david@redhat.com>
Mon, 11 Oct 2021 17:53:41 +0000 (19:53 +0200)
committerJuan Quintela <quintela@redhat.com>
Mon, 1 Nov 2021 21:56:44 +0000 (22:56 +0100)
commitbe39b4cd20695b95a479c941b2bad7d53a6971de
tree31f50777cd7d4212993c50045302c820c4749d40
parent372aa6fd738ef4c13dc6201fa34d2c8b9a6dde29
migration/ram: Handle RAMBlocks with a RamDiscardManager on the migration source

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 <peterx@redhat.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
migration/ram.c