On Fri, Jan 18, 2019 at 01:57:31PM +0100, Paolo Bonzini wrote: > On 18/01/19 11:21, Daniel P. Berrangé wrote: > > On Fri, Jan 18, 2019 at 10:16:34AM +0000, Dr. David Alan Gilbert wrote: > >> * Paolo Bonzini (pbonz...@redhat.com) wrote: > >>> On 18/01/19 11:02, Dr. David Alan Gilbert wrote: > >>>>> > >>>>> It fails if the flag is set, rather than if any nested virtualization > >>>>> has > >>>>> been used before. > >>>>> > >>>>> I'm concerned I will end up with a requirement for *all* guests to be > >>>>> restarted in order to migrate them to the new hosts, rather than just > >>>>> the > >>>>> ones that would have a problem. > >>>> I think you should be able to migrate from 2.12->3.1 like this, but > >>>> you'd hit the problem when you then try and migrate again between your > >>>> new QEMUs. > >>>> > >>>> I guess we could modify it to wire it to machine type, so that > >>>> older machine types didn't block. > >>> > >>> That would also be wrong. The old machine types _could_ be using KVM > >>> and they have no way to block the live migration. > >>> > >>> The solution is to restart the VM using "-cpu host,-vmx". > >> > >> The problem as Christian explained in that thread is that it was common > >> for them to start VMs with vmx enabled but for people not to use it > >> on most of the VMs, so we break migration for most VMs even though most > >> don't use it. > >> > >> It might not be robust, but it worked for a lot of people most of the > >> time. > > It's not "not robust" (like, it usually works but sometimes fails > mysteriously). It's entirely broken, you just don't notice that it is > if you're not using the feature. > > > Yes, this is exactly why I said we should make the migration blocker > > be conditional on any L2 guest having been started. I vaguely recall > > someone saying there wasn't any way to detect this situation from > > QEMU though ? > > You can check that and give a warning (check that CR4.VMXE=1 but no > other live migration state was transferred). However, without live > migration support in the kernel and in QEMU you cannot start VMs *for > the entire future life of the VM* after a live migration. So even if we > implemented that kind of blocker, it would fail even if no VM has been > started, as long as the kvm_intel module is loaded on migration. That > would be no different in practice from what we have now.
Ahh, I was mis-understanding that it only applied to L2 VMs that existed at the time the migration is performed. Given that it breaks all future possibility of launching an L2 VM, this strict blocker does make more sense. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|