• Sean Christopherson's avatar
    KVM: nVMX: Sync rarely accessed guest fields only when needed · 7952d769
    Sean Christopherson authored
    Many guest fields are rarely read (or written) by VMMs, i.e. likely
    aren't accessed between runs of a nested VMCS.  Delay pulling rarely
    accessed guest fields from vmcs02 until they are VMREAD or until vmcs12
    is dirtied.  The latter case is necessary because nested VM-Entry will
    consume all manner of fields when vmcs12 is dirty, e.g. for consistency
    checks.
    
    Note, an alternative to synchronizing all guest fields on VMREAD would
    be to read *only* the field being accessed, but switching VMCS pointers
    is expensive and odds are good if one guest field is being accessed then
    others will soon follow, or that vmcs12 will be dirtied due to a VMWRITE
    (see above).  And the full synchronization results in slightly cleaner
    code.
    
    Note, although GUEST_PDPTRs are relevant only for a 32-bit PAE guest,
    they are accessed quite frequently for said guests, and a separate patch
    is in flight to optimize away GUEST_PDTPR synchronziation for non-PAE
    guests.
    
    Skipping rarely accessed guest fields reduces the latency of a nested
    VM-Exit by ~200 cycles.
    Signed-off-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    7952d769
nested.c 179 KB