Skip to content
  • David Hildenbrand's avatar
    be39b4cd
    migration/ram: Handle RAMBlocks with a RamDiscardManager on the migration source · be39b4cd
    David Hildenbrand authored
    
    
    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: default avatarPeter Xu <peterx@redhat.com>
    Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
    Reviewed-by: default avatarJuan Quintela <quintela@redhat.com>
    Signed-off-by: default avatarJuan Quintela <quintela@redhat.com>
    be39b4cd
    migration/ram: Handle RAMBlocks with a RamDiscardManager on the migration source
    David Hildenbrand authored
    
    
    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: default avatarPeter Xu <peterx@redhat.com>
    Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
    Reviewed-by: default avatarJuan Quintela <quintela@redhat.com>
    Signed-off-by: default avatarJuan Quintela <quintela@redhat.com>
Loading