linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/8] KVM: nSVM: ondemand nested state allocation + nested guest state caching
@ 2020-08-20  9:13 Maxim Levitsky
  2020-08-20  9:13 ` [PATCH 1/8] KVM: SVM: rename a variable in the svm_create_vcpu Maxim Levitsky
                   ` (7 more replies)
  0 siblings, 8 replies; 24+ messages in thread
From: Maxim Levitsky @ 2020-08-20  9:13 UTC (permalink / raw)
  To: kvm
  Cc: Jim Mattson, Joerg Roedel, Paolo Bonzini, Borislav Petkov,
	Thomas Gleixner, H. Peter Anvin, Vitaly Kuznetsov,
	open list:X86 ARCHITECTURE (32-BIT AND 64-BIT),
	maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT),
	Ingo Molnar, Wanpeng Li, Sean Christopherson, Maxim Levitsky

Hi!

This patch series implements caching of the whole nested guest vmcb
as opposed to current code that only caches its control area.
This allows us to avoid race in which guest changes the data area
while we are verifying it.

In adddition to that I also implemented on demand nested state area
to compensate a bit for memory usage increase from this caching.
This way at least guests that don't use nesting won't waste memory
on nested state.

Patches 1,2,3 are just refactoring,

Patches 4,5 are for ondemand nested state, while patches 6,7,8 are
for caching of the nested state.

Patch 8 is more of an optimization and can be dropped if you like to.

The series was tested with various nested guests, in one case even with
L3 running, but note that due to unrelated issue, migration with nested
guest running didn't work for me with or without this series.
I am investigating this currently.

Best regards,
	Maxim Levitsky

Maxim Levitsky (8):
  KVM: SVM: rename a variable in the svm_create_vcpu
  KVM: nSVM: rename nested 'vmcb' to vmcb_gpa in few places
  KVM: SVM: refactor msr permission bitmap allocation
  KVM: x86: allow kvm_x86_ops.set_efer to return a value
  KVM: nSVM: implement ondemand allocation of the nested state
  SVM: nSVM: cache whole nested vmcb instead of only its control area
  KVM: nSVM: implement caching of nested vmcb save area
  KVM: nSVM: read only changed fields of the nested guest data area

 arch/x86/include/asm/kvm_host.h |   2 +-
 arch/x86/kvm/svm/nested.c       | 296 +++++++++++++++++++++++---------
 arch/x86/kvm/svm/svm.c          | 129 +++++++-------
 arch/x86/kvm/svm/svm.h          |  32 ++--
 arch/x86/kvm/vmx/vmx.c          |   5 +-
 arch/x86/kvm/x86.c              |   3 +-
 6 files changed, 312 insertions(+), 155 deletions(-)

-- 
2.26.2



^ permalink raw reply	[flat|nested] 24+ messages in thread
* [PATCH 0/8] KVM: nSVM: ondemand nested state allocation + smm fixes
@ 2020-08-27 17:04 Maxim Levitsky
  2020-08-27 17:04 ` [PATCH 1/8] KVM: SVM: rename a variable in the svm_create_vcpu Maxim Levitsky
  0 siblings, 1 reply; 24+ messages in thread
From: Maxim Levitsky @ 2020-08-27 17:04 UTC (permalink / raw)
  To: kvm
  Cc: Joerg Roedel, Borislav Petkov, Paolo Bonzini, H. Peter Anvin,
	linux-kernel, Ingo Molnar,
	maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT),
	Vitaly Kuznetsov, Jim Mattson, Wanpeng Li, Thomas Gleixner,
	Sean Christopherson, Maxim Levitsky

This patch series does some refactoring and implements on demand nested state area
This way at least guests that don't use nesting won't waste memory
on nested state.

This patch series is based on patch series '[PATCH 0/3] Few nSVM bugfixes'
(patch #7 here should have beeing moved there as well to be honest)

The series was tested with various nested guests, and it seems to work
as long as I disable the TSC deadline timer (this is unrelated to this
patch series)

I addressed the review feedback from V2, and added few refactoring
patches to this series as suggested.

Best regards,
        Maxim Levitsky

Maxim Levitsky (8):
  KVM: SVM: rename a variable in the svm_create_vcpu
  KVM: nSVM: rename nested vmcb to vmcb12
  KVM: SVM: refactor msr permission bitmap allocation
  KVM: SVM: use __GFP_ZERO instead of clear_page
  KVM: SVM: refactor exit labels in svm_create_vcpu
  KVM: x86: allow kvm_x86_ops.set_efer to return a value
  KVM: emulator: more strict rsm checks.
  KVM: nSVM: implement ondemand allocation of the nested state

 arch/x86/include/asm/kvm_host.h |   2 +-
 arch/x86/kvm/emulate.c          |  22 ++-
 arch/x86/kvm/svm/nested.c       | 267 ++++++++++++++++++--------------
 arch/x86/kvm/svm/svm.c          | 106 +++++++------
 arch/x86/kvm/svm/svm.h          |  10 +-
 arch/x86/kvm/vmx/vmx.c          |   9 +-
 arch/x86/kvm/x86.c              |   3 +-
 7 files changed, 243 insertions(+), 176 deletions(-)

-- 
2.26.2



^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2020-08-27 17:04 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-20  9:13 [PATCH 0/8] KVM: nSVM: ondemand nested state allocation + nested guest state caching Maxim Levitsky
2020-08-20  9:13 ` [PATCH 1/8] KVM: SVM: rename a variable in the svm_create_vcpu Maxim Levitsky
2020-08-20  9:13 ` [PATCH 2/8] KVM: nSVM: rename nested 'vmcb' to vmcb_gpa in few places Maxim Levitsky
2020-08-20  9:56   ` Paolo Bonzini
2020-08-20 10:00     ` Maxim Levitsky
2020-08-20 10:19       ` Paolo Bonzini
2020-08-20 10:23         ` Maxim Levitsky
2020-08-20 10:56           ` Paolo Bonzini
2020-08-20 11:52             ` Maxim Levitsky
2020-08-20  9:13 ` [PATCH 3/8] KVM: SVM: refactor msr permission bitmap allocation Maxim Levitsky
2020-08-20  9:13 ` [PATCH 4/8] KVM: x86: allow kvm_x86_ops.set_efer to return a value Maxim Levitsky
2020-08-20  9:13 ` [PATCH 5/8] KVM: nSVM: implement ondemand allocation of the nested state Maxim Levitsky
2020-08-20  9:58   ` Paolo Bonzini
2020-08-20 10:02     ` Maxim Levitsky
2020-08-20  9:13 ` [PATCH 6/8] SVM: nSVM: cache whole nested vmcb instead of only its control area Maxim Levitsky
2020-08-20  9:13 ` [PATCH 7/8] KVM: nSVM: implement caching of nested vmcb save area Maxim Levitsky
2020-08-20  9:13 ` [PATCH 8/8] KVM: nSVM: read only changed fields of the nested guest data area Maxim Levitsky
2020-08-20  9:55   ` Paolo Bonzini
2020-08-20  9:57     ` Maxim Levitsky
2020-08-20 10:01   ` Paolo Bonzini
2020-08-20 10:05     ` Maxim Levitsky
2020-08-20 10:18       ` Paolo Bonzini
2020-08-20 10:26         ` Maxim Levitsky
2020-08-27 17:04 [PATCH 0/8] KVM: nSVM: ondemand nested state allocation + smm fixes Maxim Levitsky
2020-08-27 17:04 ` [PATCH 1/8] KVM: SVM: rename a variable in the svm_create_vcpu Maxim Levitsky

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).