kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ben Gardon <bgardon@google.com>
To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org
Cc: Paolo Bonzini <pbonzini@redhat.com>, Peter Xu <peterx@redhat.com>,
	Sean Christopherson <seanjc@google.com>,
	Peter Shier <pshier@google.com>,
	Yulei Zhang <yulei.kernel@gmail.com>,
	Wanpeng Li <kernellwp@gmail.com>,
	Xiao Guangrong <xiaoguangrong.eric@gmail.com>,
	Kai Huang <kai.huang@intel.com>,
	Keqian Zhu <zhukeqian1@huawei.com>,
	Ben Gardon <bgardon@google.com>
Subject: [PATCH v3 0/8] Lazily allocate memslot rmaps
Date: Thu,  6 May 2021 11:42:33 -0700	[thread overview]
Message-ID: <20210506184241.618958-1-bgardon@google.com> (raw)

This series enables KVM to save memory when using the TDP MMU by waiting
to allocate memslot rmaps until they are needed. To do this, KVM tracks
whether or not a shadow root has been allocated. In order to get away
with not allocating the rmaps, KVM must also be sure to skip operations
which iterate over the rmaps. If the TDP MMU is in use and we have not
allocated a shadow root, these operations would essentially be op-ops
anyway. Skipping the rmap operations has a secondary benefit of avoiding
acquiring the MMU lock in write mode in many cases, substantially
reducing MMU lock contention.

This series was tested on an Intel Skylake machine. With the TDP MMU off
and on, this introduced no new failures on kvm-unit-tests or KVM selftests.

Changelog:
v2:
	Incorporated feedback from Paolo and Sean
	Replaced the memslot_assignment_lock with slots_arch_lock, which
	has a larger critical section.

v3:
	Removed shadow_mmu_active as suggested by Sean
	Removed everything except adding a return value to
	kvm_mmu_init_tdp_mmu from patch 1 of v2
	Added RCU protection and better memory ordering for installing the
	memslot rmaps as suggested by Paolo
	Reordered most of the patches

Ben Gardon (8):
  KVM: x86/mmu: Deduplicate rmap freeing
  KVM: x86/mmu: Factor out allocating memslot rmap
  KVM: mmu: Refactor memslot copy
  KVM: mmu: Add slots_arch_lock for memslot arch fields
  KVM: x86/mmu: Add a field to control memslot rmap allocation
  KVM: x86/mmu: Skip rmap operations if rmaps not allocated
  KVM: x86/mmu: Protect rmaps independently with SRCU
  KVM: x86/mmu: Lazily allocate memslot rmaps

 arch/x86/include/asm/kvm_host.h |   9 ++
 arch/x86/kvm/mmu/mmu.c          | 195 ++++++++++++++++++++------------
 arch/x86/kvm/mmu/tdp_mmu.c      |   6 +-
 arch/x86/kvm/mmu/tdp_mmu.h      |   4 +-
 arch/x86/kvm/x86.c              | 107 ++++++++++++++----
 include/linux/kvm_host.h        |   9 ++
 virt/kvm/kvm_main.c             |  54 +++++++--
 7 files changed, 275 insertions(+), 109 deletions(-)

-- 
2.31.1.607.g51e8a6a459-goog


             reply	other threads:[~2021-05-06 18:42 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-06 18:42 Ben Gardon [this message]
2021-05-06 18:42 ` [PATCH v3 1/8] KVM: x86/mmu: Deduplicate rmap freeing Ben Gardon
2021-05-07  7:42   ` David Hildenbrand
2021-05-06 18:42 ` [PATCH v3 2/8] KVM: x86/mmu: Factor out allocating memslot rmap Ben Gardon
2021-05-07  7:46   ` David Hildenbrand
2021-05-10 16:29     ` Ben Gardon
2021-05-06 18:42 ` [PATCH v3 3/8] KVM: mmu: Refactor memslot copy Ben Gardon
2021-05-07  7:48   ` David Hildenbrand
2021-05-06 18:42 ` [PATCH v3 4/8] KVM: mmu: Add slots_arch_lock for memslot arch fields Ben Gardon
2021-05-06 18:42 ` [PATCH v3 5/8] KVM: x86/mmu: Add a field to control memslot rmap allocation Ben Gardon
2021-05-06 23:44   ` Ben Gardon
2021-05-07  7:50     ` David Hildenbrand
2021-05-07  8:28     ` Paolo Bonzini
2021-05-10 16:14       ` Ben Gardon
2021-05-10 16:33         ` Paolo Bonzini
2021-05-10 16:37           ` Ben Gardon
2021-05-06 18:42 ` [PATCH v3 6/8] KVM: x86/mmu: Skip rmap operations if rmaps not allocated Ben Gardon
2021-05-06 23:07   ` kernel test robot
2021-05-06 18:42 ` [PATCH v3 7/8] KVM: x86/mmu: Protect rmaps independently with SRCU Ben Gardon
2021-05-06 23:58   ` kernel test robot
2021-05-07  0:56   ` kernel test robot
2021-05-07  8:42   ` Paolo Bonzini
2021-05-10 17:45     ` Sean Christopherson
2021-05-10 17:53       ` Paolo Bonzini
2021-05-10 18:28         ` Sean Christopherson
2021-05-11 16:22           ` Ben Gardon
2021-05-11 16:45             ` Paolo Bonzini
2021-05-06 18:42 ` [PATCH v3 8/8] KVM: x86/mmu: Lazily allocate memslot rmaps Ben Gardon
2021-05-07  1:10   ` kernel test robot
2021-05-07  8:28   ` Paolo Bonzini
2021-05-07  7:40 ` [PATCH v3 0/8] " David Hildenbrand

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=20210506184241.618958-1-bgardon@google.com \
    --to=bgardon@google.com \
    --cc=kai.huang@intel.com \
    --cc=kernellwp@gmail.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    --cc=pshier@google.com \
    --cc=seanjc@google.com \
    --cc=xiaoguangrong.eric@gmail.com \
    --cc=yulei.kernel@gmail.com \
    --cc=zhukeqian1@huawei.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).