Bug 53851 - nVMX: Support live migration of whole L1 guest
Summary: nVMX: Support live migration of whole L1 guest
Status: NEW
Alias: None
Product: Virtualization
Classification: Unclassified
Component: kvm (show other bugs)
Hardware: All Linux
: P1 low
Assignee: virtualization_kvm
Depends on:
Blocks: 94971 198621 53601
  Show dependency tree
Reported: 2013-02-14 14:36 UTC by Nadav Har'El
Modified: 2018-02-15 09:44 UTC (History)
0 users

See Also:
Kernel Version:
Tree: Mainline
Regression: No


Description Nadav Har'El 2013-02-14 14:36:53 UTC
We need to support live migration of a guest, even if it is running a hypervisor with sub-guests.

I.e., this issue is about supporting live migration of a whole L1 guest hypervisor, together with its L2 guests.

One option is to add ioctls for saving and restoring a currently-running L2 guest's state (vmcs01, vcpu_vmx.nested, and perhaps more things?).

A different option is to force an exit from L2 to L1 during live migration. We can use a spurious external interrupt exit (hoping L1 will ignore it and immediately return to L2), or hide this exit from L1 - add ioctl for L2->L1 exit (if in L2) and another ioctl for reentry used on the receiving hypervisor (it will need to know to run it - i.e., is_guest_mode(vcpu) also needs to be migrated). Note how the exit from L2 to L1 includes writing all the L2's state from host memory (vmcs02) to guest memory (vmcs12), where it will be migrated together with the rest of the guest.

See discussion in http://www.mail-archive.com/kvm@vger.kernel.org/msg54257.html on comparing these two options, and how one approach should be chosen for both nVMX and nSVM.

Note that additionally, we need to also save/restore vmx->nested.vmxon (whether the migrated L1 guest ever did VMXON), and also vmx->nested.current_vmptr (last VMPTRLDed VMCS).
Comment 1 Nadav Har'El 2013-02-26 15:27:02 UTC
Another issue to consider for live migration: right now we only kunmap() and release_page_dirty() the vmcs12 page after a vmclear (or vmxof, etc.). However, we may need to do this also on exit to user space (KVM_VCPU_RUN ioctl completes), so that live migration knows this page is dirty and needs to be copied.

Note You need to log in before you can comment on or make changes to this bug.