• Wanpeng Li's avatar
    KVM: nVMX: nested VPID emulation · 5c614b35
    Wanpeng Li authored
    VPID is used to tag address space and avoid a TLB flush. Currently L0 use
    the same VPID to run L1 and all its guests. KVM flushes VPID when switching
    between L1 and L2.
    
    This patch advertises VPID to the L1 hypervisor, then address space of L1
    and L2 can be separately treated and avoid TLB flush when swithing between
    L1 and L2. For each nested vmentry, if vpid12 is changed, reuse shadow vpid
    w/ an invvpid.
    
    Performance:
    
    run lmbench on L2 w/ 3.5 kernel.
    
    Context switching - times in microseconds - smaller is better
    -------------------------------------------------------------------------
    Host                 OS  2p/0K 2p/16K 2p/64K 8p/16K 8p/64K 16p/16K 16p/64K
                             ctxsw  ctxsw  ctxsw ctxsw  ctxsw   ctxsw   ctxsw
    --------- ------------- ------ ------ ------ ------ ------ ------- -------
    kernel    Linux 3.5.0-1 1.2200 1.3700 1.4500 4.7800 2.3300 5.60000 2.88000  nested VPID
    kernel    Linux 3.5.0-1 1.2600 1.4300 1.5600   12.7   12.9 3.49000 7.46000  vanilla
    Reviewed-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
    Reviewed-by: default avatarWincy Van <fanwenyi0529@gmail.com>
    Signed-off-by: default avatarWanpeng Li <wanpeng.li@hotmail.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    5c614b35
vmx.c 306 KB