]> asedeno.scripts.mit.edu Git - linux.git/commit
KVM: nVMX: track dirty state of non-shadowed VMCS fields
authorPaolo Bonzini <pbonzini@redhat.com>
Wed, 20 Dec 2017 12:55:39 +0000 (13:55 +0100)
committerRadim Krčmář <rkrcmar@redhat.com>
Tue, 16 Jan 2018 15:50:13 +0000 (16:50 +0100)
commit74a497fae754bd970ad0573c26d0a3c5e784fa0c
tree2b502c8817fe37b9d021fdd9c306dc1f2e678237
parentc9e9deae76b8fbbd48e7357247689016bb0d6242
KVM: nVMX: track dirty state of non-shadowed VMCS fields

VMCS12 fields that are not handled through shadow VMCS are rarely
written, and thus they are also almost constant in the vmcs02.  We can
thus optimize prepare_vmcs02 by skipping all the work for non-shadowed
fields in the common case.

This patch introduces the (pretty simple) tracking infrastructure; the
next patches will move work to prepare_vmcs02_full and save a few hundred
clock cycles per VMRESUME on a Haswell Xeon E5 system:

                                before  after
cpuid                           14159   13869
vmcall                          15290   14951
inl_from_kernel                 17703   17447
outl_to_kernel                  16011   14692
self_ipi_sti_nop                16763   15825
self_ipi_tpr_sti_nop            17341   15935
wr_tsc_adjust_msr               14510   14264
rd_tsc_adjust_msr               15018   14311
mmio-wildcard-eventfd:pci-mem   16381   14947
mmio-datamatch-eventfd:pci-mem  18620   17858
portio-wildcard-eventfd:pci-io  15121   14769
portio-datamatch-eventfd:pci-io 15761   14831

(average savings 748, stdev 460).

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
arch/x86/kvm/vmx.c
arch/x86/kvm/vmx_shadow_fields.h