From: Sean Christopherson <sean.j.christopherson@intel.com>
To: "James Hogan" <jhogan@kernel.org>,
"Paul Mackerras" <paulus@ozlabs.org>,
"Christian Borntraeger" <borntraeger@de.ibm.com>,
"Janosch Frank" <frankja@linux.ibm.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Radim Krčmář" <rkrcmar@redhat.com>,
"Marc Zyngier" <maz@kernel.org>
Cc: linux-arm-kernel@lists.infradead.org,
Wanpeng Li <wanpengli@tencent.com>,
kvm@vger.kernel.org, David Hildenbrand <david@redhat.com>,
Joerg Roedel <joro@8bytes.org>, Cornelia Huck <cohuck@redhat.com>,
linux-mips@vger.kernel.org,
Sean Christopherson <sean.j.christopherson@intel.com>,
linux-kernel@vger.kernel.org, kvm-ppc@vger.kernel.org,
Vitaly Kuznetsov <vkuznets@redhat.com>,
kvmarm@lists.cs.columbia.edu, Jim Mattson <jmattson@google.com>
Subject: [PATCH v3 00/15] KVM: Dynamically size memslot arrays
Date: Thu, 24 Oct 2019 16:07:29 -0700 [thread overview]
Message-ID: <20191024230744.14543-1-sean.j.christopherson@intel.com> (raw)
The end goal of this series is to dynamically size the memslot array so
that KVM allocates memory based on the number of memslots in use, as
opposed to unconditionally allocating memory for the maximum number of
memslots. On x86, each memslot consumes 88 bytes, and so with 2 address
spaces of 512 memslots, each VM consumes ~90k bytes for the memslots.
E.g. given a VM that uses a total of 30 memslots, dynamic sizing reduces
the memory footprint from 90k to ~2.6k bytes.
The changes required to support dynamic sizing are relatively small,
e.g. are essentially contained in patches 14/15 and 15/15. Patches 1-13
clean up the memslot code, which has gotten quite crusty, especially
__kvm_set_memory_region(). The clean up is likely not strictly necessary
to switch to dynamic sizing, but I didn't have a remotely reasonable
level of confidence in the correctness of the dynamic sizing without first
doing the clean up.
Christoffer, I added your Tested-by to the patches that I was confident
would be fully tested based on the desription of what you tested. Let me
know if you disagree with any of 'em.
v3:
- Fix build errors on PPC and MIPS due to missed params during
refactoring [kbuild test robot].
- Rename the helpers for update_memslots() and add comments describing
the new algorithm and how it interacts with searching [Paolo].
- Remove the unnecessary and obnoxious warning regarding memslots being
a flexible array [Paolo].
- Fix typos in the changelog of patch 09/15 [Christoffer].
- Collect tags [Christoffer].
v2:
- Split "Drop kvm_arch_create_memslot()" into three patches to move
minor functional changes to standalone patches [Janosch].
- Rebase to latest kvm/queue (f0574a1cea5b, "KVM: x86: fix ...")
- Collect an Acked-by and a Reviewed-by
Sean Christopherson (15):
KVM: Reinstall old memslots if arch preparation fails
KVM: Don't free new memslot if allocation of said memslot fails
KVM: PPC: Move memslot memory allocation into prepare_memory_region()
KVM: x86: Allocate memslot resources during prepare_memory_region()
KVM: Drop kvm_arch_create_memslot()
KVM: Explicitly free allocated-but-unused dirty bitmap
KVM: Refactor error handling for setting memory region
KVM: Move setting of memslot into helper routine
KVM: Move memslot deletion to helper function
KVM: Simplify kvm_free_memslot() and all its descendents
KVM: Clean up local variable usage in __kvm_set_memory_region()
KVM: Provide common implementation for generic dirty log functions
KVM: Ensure validity of memslot with respect to kvm_get_dirty_log()
KVM: Terminate memslot walks via used_slots
KVM: Dynamically size memslot array based on number of used slots
arch/mips/include/asm/kvm_host.h | 2 +-
arch/mips/kvm/mips.c | 69 +--
arch/powerpc/include/asm/kvm_ppc.h | 17 +-
arch/powerpc/kvm/book3s.c | 22 +-
arch/powerpc/kvm/book3s_hv.c | 36 +-
arch/powerpc/kvm/book3s_pr.c | 20 +-
arch/powerpc/kvm/booke.c | 17 +-
arch/powerpc/kvm/powerpc.c | 13 +-
arch/s390/include/asm/kvm_host.h | 2 +-
arch/s390/kvm/kvm-s390.c | 21 +-
arch/x86/include/asm/kvm_page_track.h | 3 +-
arch/x86/kvm/page_track.c | 15 +-
arch/x86/kvm/x86.c | 101 +----
include/linux/kvm_host.h | 46 +-
virt/kvm/arm/arm.c | 48 +-
virt/kvm/arm/mmu.c | 18 +-
virt/kvm/kvm_main.c | 621 +++++++++++++++++---------
17 files changed, 542 insertions(+), 529 deletions(-)
--
2.22.0
_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
next reply other threads:[~2019-10-24 23:07 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-24 23:07 Sean Christopherson [this message]
2019-10-24 23:07 ` [PATCH v3 01/15] KVM: Reinstall old memslots if arch preparation fails Sean Christopherson
2019-10-24 23:07 ` [PATCH v3 02/15] KVM: Don't free new memslot if allocation of said memslot fails Sean Christopherson
2019-10-24 23:07 ` [PATCH v3 03/15] KVM: PPC: Move memslot memory allocation into prepare_memory_region() Sean Christopherson
2019-10-24 23:07 ` [PATCH v3 04/15] KVM: x86: Allocate memslot resources during prepare_memory_region() Sean Christopherson
2019-10-24 23:07 ` [PATCH v3 05/15] KVM: Drop kvm_arch_create_memslot() Sean Christopherson
2019-12-16 8:04 ` Christian Borntraeger
2019-10-24 23:07 ` [PATCH v3 06/15] KVM: Explicitly free allocated-but-unused dirty bitmap Sean Christopherson
2019-10-24 23:07 ` [PATCH v3 07/15] KVM: Refactor error handling for setting memory region Sean Christopherson
2019-12-05 9:49 ` Philippe Mathieu-Daudé
2019-10-24 23:07 ` [PATCH v3 08/15] KVM: Move setting of memslot into helper routine Sean Christopherson
2019-12-05 9:54 ` Philippe Mathieu-Daudé
2019-10-24 23:07 ` [PATCH v3 09/15] KVM: Move memslot deletion to helper function Sean Christopherson
2019-10-24 23:07 ` [PATCH v3 10/15] KVM: Simplify kvm_free_memslot() and all its descendents Sean Christopherson
2019-10-24 23:07 ` [PATCH v3 11/15] KVM: Clean up local variable usage in __kvm_set_memory_region() Sean Christopherson
2019-10-24 23:07 ` [PATCH v3 12/15] KVM: Provide common implementation for generic dirty log functions Sean Christopherson
2019-10-24 23:07 ` [PATCH v3 13/15] KVM: Ensure validity of memslot with respect to kvm_get_dirty_log() Sean Christopherson
2019-10-24 23:07 ` [PATCH v3 14/15] KVM: Terminate memslot walks via used_slots Sean Christopherson
2019-10-24 23:07 ` [PATCH v3 15/15] KVM: Dynamically size memslot array based on number of used slots Sean Christopherson
2019-10-25 13:28 ` [PATCH v3 00/15] KVM: Dynamically size memslot arrays Christoffer Dall
2019-10-25 16:30 ` Marc Zyngier
2019-12-03 22:14 ` Sean Christopherson
2019-12-13 20:01 ` Sean Christopherson
2019-12-16 8:25 ` Christian Borntraeger
2019-12-17 17:55 ` Sean Christopherson
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=20191024230744.14543-1-sean.j.christopherson@intel.com \
--to=sean.j.christopherson@intel.com \
--cc=borntraeger@de.ibm.com \
--cc=cohuck@redhat.com \
--cc=david@redhat.com \
--cc=frankja@linux.ibm.com \
--cc=jhogan@kernel.org \
--cc=jmattson@google.com \
--cc=joro@8bytes.org \
--cc=kvm-ppc@vger.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=maz@kernel.org \
--cc=paulus@ozlabs.org \
--cc=pbonzini@redhat.com \
--cc=rkrcmar@redhat.com \
--cc=vkuznets@redhat.com \
--cc=wanpengli@tencent.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).