From: David Gibson <david@gibson.dropbear.id.au>
To: paulus@samba.org, aik@ozlabs.ru, benh@kernel.crashing.org
Cc: bharata@linux.vnet.ibm.com, linuxppc-dev@lists.ozlabs.org,
michael@ellerman.id.au
Subject: Re: [RFCv3 00/17] PAPR HPT resizing, guest & host side
Date: Mon, 21 Mar 2016 16:46:34 +1100 [thread overview]
Message-ID: <20160321054634.GK23586@voom.redhat.com> (raw)
In-Reply-To: <1458532404-21258-1-git-send-email-david@gibson.dropbear.id.au>
[-- Attachment #1: Type: text/plain, Size: 3952 bytes --]
On Mon, Mar 21, 2016 at 02:53:07PM +1100, David Gibson wrote:
> This is an implementation of the kernel parts of the PAPR hashed page
> table (HPT) resizing extension.
>
> It contains a complete guest-side implementation - or as complete as
> it can be until we have a final PAPR change.
>
> It also contains a draft host side implementation for KVM HV (the KVM
> PR and TCG host-side implementations live in qemu). This works, but
> is very slow in the critical section (where the guest must be
> stopped). It is significantly slower than the TCG/PR implementation;
> unusably slow for large hash tables (~2.8s for a 1G HPT).
Since posting this, I've managed to bring this down to ~570ms for a 1G
HPT. Still slow, but much better. The optimization to do this was to
skip rehashing an HPTE if neither VALID|ABSENT are set *before*
locking the HPTE. I believe this is safe, since nothing should be
able to add new VALID|ABSENT HPTEs while the guest is stopped.
>
> I'm still looking into what's the cause of the slowness, and I'm not
> sure yet if the current approach can be tweaked to be fast enough, or
> if it will require a new approach.
>
> Changes since RFCv2:
> * Completely new approach to handling KVM HV implementation. Much
> simpler synchronization requirements, but also slower
> * Rebase to latest Linus' tree
> * Changed number for capability, so as not to collide
> * Host side now actually works
>
> David Gibson (17):
> pseries: Add hypercall wrappers for hash page table resizing
> pseries: Add support for hash table resizing
> pseries: Advertise HPT resizing support via CAS
> pseries: Automatically resize HPT for memory hot add/remove
> powerpc/kvm: Corectly report KVM_CAP_PPC_ALLOC_HTAB
> powerpc/kvm: Add capability flag for hashed page table resizing
> powerpc/kvm: Rename kvm_alloc_hpt() for clarity
> powerpc/kvm: Gather HPT related variables into sub-structure
> powerpc/kvm: Don't store values derivable from HPT order
> powerpc/kvm: Split HPT allocation from activation
> powerpc/kvm: Allow KVM_PPC_ALLOCATE_HTAB ioctl() to change HPT size
> powerpc/kvm: Create kvmppc_unmap_hpte_helper()
> powerpc/kvm: KVM-HV HPT resizing stub implementation
> powerpc/kvm: Outline of KVM-HV HPT resizing implementation
> powerpc/kvm: KVM-HV HPT resizing, preparation path
> powerpc/kvm: HVM-HV HPT resizing, commit path
> powerpc/kvm: Advertise availablity of HPT resizing on KVM HV
>
> arch/powerpc/include/asm/firmware.h | 5 +-
> arch/powerpc/include/asm/hvcall.h | 2 +
> arch/powerpc/include/asm/kvm_book3s.h | 12 +-
> arch/powerpc/include/asm/kvm_book3s_64.h | 15 +
> arch/powerpc/include/asm/kvm_host.h | 17 +-
> arch/powerpc/include/asm/kvm_ppc.h | 11 +-
> arch/powerpc/include/asm/machdep.h | 1 +
> arch/powerpc/include/asm/plpar_wrappers.h | 12 +
> arch/powerpc/include/asm/prom.h | 1 +
> arch/powerpc/include/asm/sparsemem.h | 1 +
> arch/powerpc/kernel/prom_init.c | 2 +-
> arch/powerpc/kvm/book3s_64_mmu_hv.c | 626 ++++++++++++++++++++++++------
> arch/powerpc/kvm/book3s_hv.c | 37 +-
> arch/powerpc/kvm/book3s_hv_builtin.c | 8 +-
> arch/powerpc/kvm/book3s_hv_rm_mmu.c | 68 ++--
> arch/powerpc/kvm/powerpc.c | 17 +-
> arch/powerpc/mm/hash_utils_64.c | 57 +++
> arch/powerpc/mm/mem.c | 4 +
> arch/powerpc/platforms/pseries/firmware.c | 1 +
> arch/powerpc/platforms/pseries/lpar.c | 110 ++++++
> include/uapi/linux/kvm.h | 1 +
> 21 files changed, 825 insertions(+), 183 deletions(-)
>
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2016-03-21 5:45 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-21 3:53 [RFCv3 00/17] PAPR HPT resizing, guest & host side David Gibson
2016-03-21 3:53 ` [RFCv3 01/17] pseries: Add hypercall wrappers for hash page table resizing David Gibson
2016-03-21 3:53 ` [RFCv3 02/17] pseries: Add support for hash " David Gibson
2016-03-21 3:53 ` [RFCv3 03/17] pseries: Advertise HPT resizing support via CAS David Gibson
2016-03-21 3:53 ` [RFCv3 04/17] pseries: Automatically resize HPT for memory hot add/remove David Gibson
2016-03-21 3:53 ` [RFCv3 05/17] powerpc/kvm: Corectly report KVM_CAP_PPC_ALLOC_HTAB David Gibson
2016-03-21 3:53 ` [RFCv3 06/17] powerpc/kvm: Add capability flag for hashed page table resizing David Gibson
2016-03-21 3:53 ` [RFCv3 07/17] powerpc/kvm: Rename kvm_alloc_hpt() for clarity David Gibson
2016-03-21 3:53 ` [RFCv3 08/17] powerpc/kvm: Gather HPT related variables into sub-structure David Gibson
2016-03-21 3:53 ` [RFCv3 09/17] powerpc/kvm: Don't store values derivable from HPT order David Gibson
2016-03-21 3:53 ` [RFCv3 10/17] powerpc/kvm: Split HPT allocation from activation David Gibson
2016-03-21 3:53 ` [RFCv3 11/17] powerpc/kvm: Allow KVM_PPC_ALLOCATE_HTAB ioctl() to change HPT size David Gibson
2016-03-21 3:53 ` [RFCv3 12/17] powerpc/kvm: Create kvmppc_unmap_hpte_helper() David Gibson
2016-03-21 3:53 ` [RFCv3 13/17] powerpc/kvm: KVM-HV HPT resizing stub implementation David Gibson
2016-03-21 3:53 ` [RFCv3 14/17] powerpc/kvm: Outline of KVM-HV HPT resizing implementation David Gibson
2016-03-21 3:53 ` [RFCv3 15/17] powerpc/kvm: KVM-HV HPT resizing, preparation path David Gibson
2016-03-21 3:53 ` [RFCv3 16/17] powerpc/kvm: HVM-HV HPT resizing, commit path David Gibson
2016-03-21 3:53 ` [RFCv3 17/17] powerpc/kvm: Advertise availablity of HPT resizing on KVM HV David Gibson
2016-03-21 5:46 ` David Gibson [this message]
2016-08-25 12:38 ` [RFCv3 00/17] PAPR HPT resizing, guest & host side Paul Mackerras
2016-08-25 17:57 ` David Gibson
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=20160321054634.GK23586@voom.redhat.com \
--to=david@gibson.dropbear.id.au \
--cc=aik@ozlabs.ru \
--cc=benh@kernel.crashing.org \
--cc=bharata@linux.vnet.ibm.com \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=michael@ellerman.id.au \
--cc=paulus@samba.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.