From: Sean Christopherson <sean.j.christopherson@intel.com>
To: "Paolo Bonzini" <pbonzini@redhat.com>,
"Radim Krčmář" <rkrcmar@redhat.com>
Cc: kvm@vger.kernel.org, Jim Mattson <jmattson@google.com>,
Liran Alon <liran.alon@oracle.com>
Subject: [PATCH 0/7] KVM: nVMX: Optimize VMCS data copying
Date: Tue, 7 May 2019 08:36:22 -0700 [thread overview]
Message-ID: <20190507153629.3681-1-sean.j.christopherson@intel.com> (raw)
KVM spends a lot of time copying data between VMCSes, especially when
utilizing a shadow VMCS as data needs to moved between vmcs12 and the
shadow VMCS.
This series is comprised of three mostly unrelated optimizations that
happen to modify the same code and would cause non-trivial conflicts:
- Expose read-frequently write-rarely fields to L1 for VMREAD only.
Exposing fields to L1 for both VMWRITE and VMREAD means KVM needs
to copy data from the shadow VMCS to vmcs12 on nested VM-Entry.
For fields that are almost never written by L1, copying those
fields on every nested VM-Entry is pure overhead.
- Track the vmcs12 offsets for shadowed fields. All offsets are
known at compile time (HIGH fields complicate this slightly), but
KVM currently does a runtime lookup to get the offset, which adds
measurable latency to copying to/from the shadow VMCS.
- Sync rarely accessed guest fields from vmcs02 to vmcs12 only when
necessary. A non-trivial number of guest fields are infrequently
accessed by VMMs, e.g. most segment descriptor fields. Avoid
copying the fields from vmcs02 (30+ VMREADs) on every nested VM-Exit
to L1, and instead pull them from vmcs02 when read by L1, or when
they may be consumed by KVM, e.g. for consistency checks.
Sean Christopherson (7):
KVM: nVMX: Intercept VMWRITEs to read-only shadow VMCS fields
KVM: nVMX: Intercept VMWRITEs to GUEST_{CS,SS}_AR_BYTES
KVM: nVMX: Track vmcs12 offsets for shadowed VMCS fields
KVM: nVMX: Lift sync_vmcs12() out of prepare_vmcs12()
KVM: nVMX: Use descriptive names for VMCS sync functions and flags
KVM: nVMX: Add helpers to identify shadowed VMCS fields
KVM: nVMX: Sync rarely accessed guest fields only when needed
arch/x86/kvm/vmx/nested.c | 384 +++++++++++++++++---------
arch/x86/kvm/vmx/nested.h | 2 +-
arch/x86/kvm/vmx/vmcs12.h | 57 ++--
arch/x86/kvm/vmx/vmcs_shadow_fields.h | 78 +++---
arch/x86/kvm/vmx/vmx.c | 4 +-
arch/x86/kvm/vmx/vmx.h | 8 +-
6 files changed, 320 insertions(+), 213 deletions(-)
--
2.21.0
next reply other threads:[~2019-05-07 15:36 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-07 15:36 Sean Christopherson [this message]
2019-05-07 15:36 ` [PATCH 1/7] KVM: nVMX: Intercept VMWRITEs to read-only shadow VMCS fields Sean Christopherson
2019-06-06 13:26 ` Paolo Bonzini
2019-06-13 17:02 ` Jim Mattson
2019-06-13 17:18 ` Paolo Bonzini
2019-06-13 17:36 ` Jim Mattson
2019-06-13 17:59 ` Paolo Bonzini
2019-05-07 15:36 ` [PATCH 2/7] KVM: nVMX: Intercept VMWRITEs to GUEST_{CS,SS}_AR_BYTES Sean Christopherson
2019-06-06 13:31 ` Paolo Bonzini
2019-05-07 15:36 ` [PATCH 3/7] KVM: nVMX: Track vmcs12 offsets for shadowed VMCS fields Sean Christopherson
2019-05-07 15:36 ` [PATCH 4/7] KVM: nVMX: Lift sync_vmcs12() out of prepare_vmcs12() Sean Christopherson
2019-05-07 15:36 ` [PATCH 5/7] KVM: nVMX: Use descriptive names for VMCS sync functions and flags Sean Christopherson
2019-05-07 15:36 ` [PATCH 6/7] KVM: nVMX: Add helpers to identify shadowed VMCS fields Sean Christopherson
2019-05-07 15:36 ` [PATCH 7/7] KVM: nVMX: Sync rarely accessed guest fields only when needed Sean Christopherson
2019-06-06 15:29 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190507153629.3681-1-sean.j.christopherson@intel.com \
--to=sean.j.christopherson@intel.com \
--cc=jmattson@google.com \
--cc=kvm@vger.kernel.org \
--cc=liran.alon@oracle.com \
--cc=pbonzini@redhat.com \
--cc=rkrcmar@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).