All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: Peter Xu <peterx@redhat.com>
Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
	Maxim Levitsky <mlevitsk@redhat.com>,
	Vitaly Kuznetsov <vkuznets@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH v2 7/9] KVM: X86: MMU: Tune PTE_LIST_EXT to be bigger
Date: Wed, 28 Jul 2021 21:01:20 +0000	[thread overview]
Message-ID: <YQHFoDqp4yxfXcjc@google.com> (raw)
In-Reply-To: <20210625153413.43570-1-peterx@redhat.com>

On Fri, Jun 25, 2021, Peter Xu wrote:
> Currently rmap array element only contains 3 entries.  However for EPT=N there
> could have a lot of guest pages that got tens of even hundreds of rmap entry.
> 
> A normal distribution of a 6G guest (even if idle) shows this with rmap count
> statistics:
> 
> Rmap_Count:     0       1       2-3     4-7     8-15    16-31   32-63   64-127  128-255 256-511 512-1023
> Level=4K:       3089171 49005   14016   1363    235     212     15      7       0       0       0
> Level=2M:       5951    227     0       0       0       0       0       0       0       0       0
> Level=1G:       32      0       0       0       0       0       0       0       0       0       0
> 
> If we do some more fork some pages will grow even larger rmap counts.
> 
> This patch makes PTE_LIST_EXT bigger so it'll be more efficient for the general
> use case of EPT=N as we do list reference less and the loops over PTE_LIST_EXT
> will be slightly more efficient; but still not too large so less waste when
> array not full.
> 
> It should not affecting EPT=Y since EPT normally only has zero or one rmap
> entry for each page, so no array is even allocated.
> 
> With a test case to fork 500 child and recycle them ("./rmap_fork 500" [1]),
> this patch speeds up fork time of about 22%.
> 
>     Before: 367.20 (+-4.58%)
>     After:  302.00 (+-5.30%)
> 
> [1] https://github.com/xzpeter/clibs/commit/825436f825453de2ea5aaee4bdb1c92281efe5b3
> 
> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
>  arch/x86/kvm/mmu/mmu.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c
> index b3f738a7c05e..9b093985a2ef 100644
> --- a/arch/x86/kvm/mmu/mmu.c
> +++ b/arch/x86/kvm/mmu/mmu.c
> @@ -137,8 +137,8 @@ module_param(dbg, bool, 0644);
>  
>  #include <trace/events/kvm.h>
>  
> -/* make pte_list_desc fit well in cache line */
> -#define PTE_LIST_EXT 3
> +/* make pte_list_desc fit well in cache lines */
> +#define PTE_LIST_EXT 15

Ha, I was going to say that this should be '14' to fit pte_list_desc within two
cache lines, but looks like Paolo fixed it up on commit.

Also, if the whole cache line thing actually matters, sptes[] and spte_count
should be swapped since spte_count is always read, whereas spte_count[7:14] will
be read iff there are 8+ SPTEs.

>  struct pte_list_desc {
>  	u64 *sptes[PTE_LIST_EXT];
> -- 
> 2.31.1
> 

  reply	other threads:[~2021-07-28 21:01 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-25 15:32 [PATCH v2 0/9] KVM: X86: Some light optimizations on rmap logic Peter Xu
2021-06-25 15:32 ` [PATCH v2 1/9] KVM: X86: Add per-vm stat for max rmap list size Peter Xu
2021-06-25 15:32 ` [PATCH v2 2/9] KVM: Introduce kvm_get_kvm_safe() Peter Xu
2021-07-26 13:42   ` Paolo Bonzini
2021-06-25 15:32 ` [PATCH v2 3/9] KVM: Allow to have arch-specific per-vm debugfs files Peter Xu
2021-06-25 15:32 ` [PATCH v2 4/9] KVM: X86: Introduce pte_list_count() helper Peter Xu
2021-06-25 15:32 ` [PATCH v2 5/9] KVM: X86: Introduce kvm_mmu_slot_lpages() helpers Peter Xu
2021-06-25 15:32 ` [PATCH v2 6/9] KVM: X86: Introduce mmu_rmaps_stat per-vm debugfs file Peter Xu
2021-06-25 15:34 ` [PATCH v2 7/9] KVM: X86: MMU: Tune PTE_LIST_EXT to be bigger Peter Xu
2021-07-28 21:01   ` Sean Christopherson [this message]
2021-06-25 15:34 ` [PATCH v2 8/9] KVM: X86: Optimize pte_list_desc with per-array counter Peter Xu
2021-07-28 21:04   ` Sean Christopherson
2021-07-28 21:51     ` Peter Xu
2021-07-29  9:33       ` Paolo Bonzini
2021-07-29 15:53         ` Peter Xu
2021-07-30 15:45     ` Peter Xu
2021-06-25 15:34 ` [PATCH v2 9/9] KVM: X86: Optimize zapping rmap Peter Xu
2021-07-28 21:39   ` Sean Christopherson
2021-07-28 22:01     ` Peter Xu
2021-07-28 22:31       ` Sean Christopherson
2021-07-29  9:35         ` Paolo Bonzini
2021-07-26 13:05 ` [PATCH v2 0/9] KVM: X86: Some light optimizations on rmap logic 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=YQHFoDqp4yxfXcjc@google.com \
    --to=seanjc@google.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mlevitsk@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    --cc=vkuznets@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 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.