On 1/18/22 16:07, David Hildenbrand wrote: > While playing with migration of virtio-mem with an ordinary file backing, > I realized that migration and prealloc doesn't currently work as expected > for virtio-mem, especially when migrating zeropages or skipping migration > of some pages. > > In contrast to ordinary memory backend preallocation, virtio-mem > preallocates memory before plugging blocks to the guest. Consequently, > when migrating we are not actually preallocating on the destination but > "only" migrate pages. When migrating the zeropage, we might not end up > allocating actual backend memory. > > Postcopy needs some extra care, and I realized that prealloc+postcopy is > shaky in general. Let's at least try to mimic what ordinary > prealloc+postcopy does: temporarily allocate the memory, discard it, and > cross fingers that we'll still have sufficient memory when postcopy > actually tries placing pages. > > For postcopy to work with prealloc=on, we need a matching "requested-size" > on source and destination, meaning we have to start QEMU on the destination > with the current "requested-size" on the source. Only that way, we can try > temporarily allocating the "requested-size" to see if there is a > fundamental issue. If we detect a mismatch, we don't start postcopy. > > Cc: Juan Quintela <quint...@redhat.com> > Cc: Dr. David Alan Gilbert <dgilb...@redhat.com> > Cc: Michael S. Tsirkin <m...@redhat.com> > Cc: Michal Privoznik <mpriv...@redhat.com> > > David Hildenbrand (2): > virtio-mem: Warn if a memory backend with "prealloc=on" is used > virtio-mem: Handle preallocation with migration > > hw/virtio/virtio-mem.c | 143 +++++++++++++++++++++++++++++++++ > include/hw/virtio/virtio-mem.h | 6 ++ > 2 files changed, 149 insertions(+) >
I don't feel confident to review, but I feel confident enough to test: Tested-by: Michal Privoznik <mpriv...@redhat.com> Michal