All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marcelo Tosatti <mtosatti@redhat.com>
To: "Nikunj A. Dadhania" <nikunj@linux.vnet.ibm.com>,
	Peter Zijlstra <peter@programming.kicks-ass.net>,
	Avi Kivity <avi@redhat.com>
Cc: avi@redhat.com, raghukt@linux.vnet.ibm.com, alex.shi@intel.com,
	kvm@vger.kernel.org, stefano.stabellini@eu.citrix.com,
	peterz@infradead.org, hpa@zytor.com, vsrivatsa@gmail.com,
	mingo@elte.hu
Subject: Re: [PATCH v4 0/8] KVM paravirt remote flush tlb
Date: Thu, 23 Aug 2012 08:48:56 -0300	[thread overview]
Message-ID: <20120823114856.GB4747@amt.cnet> (raw)
In-Reply-To: <20120821112346.3512.99814.stgit@abhimanyu.in.ibm.com>

On Tue, Aug 21, 2012 at 04:55:52PM +0530, Nikunj A. Dadhania wrote:
> Remote flushing api's does a busy wait which is fine in bare-metal
> scenario. But with-in the guest, the vcpus might have been pre-empted
> or blocked. In this scenario, the initator vcpu would end up
> busy-waiting for a long amount of time.
> 
> This was discovered in our gang scheduling test and other way to solve
> this is by para-virtualizing the flush_tlb_others_ipi(now shows up as
> smp_call_function_many after Alex Shi's TLB optimization)
> 
> This patch set implements para-virt flush tlbs making sure that it
> does not wait for vcpus that are sleeping. And all the sleeping vcpus
> flush the tlb on guest enter. Idea was discussed here:
> https://lkml.org/lkml/2012/2/20/157
> 
> This also brings one more dependency for lock-less page walk that is
> performed by get_user_pages_fast(gup_fast). gup_fast disables the
> interrupt and assumes that the pages will not be freed during that
> period. And this was fine as the flush_tlb_others_ipi would wait for
> all the IPI to be processed and return back. With the new approach of
> not waiting for the sleeping vcpus, this assumption is not valid
> anymore. So now HAVE_RCU_TABLE_FREE is used to free the pages. This
> will make sure that all the cpus would atleast process smp_callback
> before the pages are freed.
> 
> Changelog from v3:
> • Add helper for cleaning up vcpu_state information (Marcelo)
> • Fix code for checking vs_page and leaking page refs (Marcelo)
> 
> Changelog from v2:
> • Rebase to 3.5 based linus(commit - f7da9cd) kernel.
> • Port PV-Flush to new TLB-Optimization code by Alex Shi
> • Use pinned pages to avoid overhead during guest enter/exit (Marcelo)
> • Remove kick, as this is not improving much
> • Use bit fields in the state(flush_on_enter and vcpu_running) flag to
>   avoid smp barriers (Marcelo)
> 
> Changelog from v1:
> • Race fixes reported by Vatsa
> • Address gup_fast dependency using PeterZ's rcu table free patch
> • Fix rcu_table_free for hw pagetable walkers
> 
> Here are the results from PLE hardware. Here is the setup details:
> • 32 CPUs (HT disabled)
> • 64-bit VM
>    • 32vcpus
>    • 8GB RAM
> 
> base =  3.6-rc1 + ple handler optimization patch
> pvflushv4 =  3.6-rc1 + ple handler optimization patch + pvflushv4 patch
> 
> kernbench(lower is better)
> ==========================
>          base      pvflushv4      %improvement
> 1VM    48.5800       46.8513       3.55846
> 2VM   108.1823      104.6410       3.27346
> 3VM   183.2733      163.3547      10.86825
> 
> ebizzy(higher is better)
> ========================
>          base         pvflushv4      %improvement
> 1VM     2414.5000     2089.8750     -13.44481
> 2VM     2167.6250     2371.7500      9.41699
> 3VM     1600.1111     2102.5556     31.40060
> 
> Thanks Raghu for running the tests.
> 
> [1] http://article.gmane.org/gmane.linux.kernel/1329752
> 
> ---
> 
> Nikunj A. Dadhania (6):
>       KVM Guest: Add VCPU running/pre-empted state for guest
>       KVM-HV: Add VCPU running/pre-empted state for guest
>       KVM Guest: Add paravirt kvm_flush_tlb_others
>       KVM-HV: Add flush_on_enter before guest enter
>       Enable HAVE_RCU_TABLE_FREE for kvm when PARAVIRT_TLB_FLUSH is enabled
>       KVM-doc: Add paravirt tlb flush document
> 
> Peter Zijlstra (2):
>       mm, x86: Add HAVE_RCU_TABLE_FREE support
>       mm: Add missing TLB invalidate to RCU page-table freeing
> 
> 
>  Documentation/virtual/kvm/msr.txt                |    4 +
>  Documentation/virtual/kvm/paravirt-tlb-flush.txt |   53 ++++++++++++++
>  arch/Kconfig                                     |    3 +
>  arch/powerpc/Kconfig                             |    1 
>  arch/sparc/Kconfig                               |    1 
>  arch/x86/Kconfig                                 |   11 +++
>  arch/x86/include/asm/kvm_host.h                  |    7 ++
>  arch/x86/include/asm/kvm_para.h                  |   13 +++
>  arch/x86/include/asm/tlb.h                       |    1 
>  arch/x86/include/asm/tlbflush.h                  |   11 +++
>  arch/x86/kernel/kvm.c                            |   38 ++++++++++
>  arch/x86/kvm/cpuid.c                             |    1 
>  arch/x86/kvm/x86.c                               |   84 +++++++++++++++++++++-
>  arch/x86/mm/pgtable.c                            |    6 +-
>  arch/x86/mm/tlb.c                                |   36 +++++++++
>  include/asm-generic/tlb.h                        |    9 ++
>  mm/memory.c                                      |   43 ++++++++++-
>  17 files changed, 311 insertions(+), 11 deletions(-)
>  create mode 100644 Documentation/virtual/kvm/paravirt-tlb-flush.txt

Avi, PeterZ can you please review?


  parent reply	other threads:[~2012-08-23 12:03 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-21 11:25 [PATCH v4 0/8] KVM paravirt remote flush tlb Nikunj A. Dadhania
2012-08-21 11:26 ` [PATCH v4 1/8] mm, x86: Add HAVE_RCU_TABLE_FREE support Nikunj A. Dadhania
2012-08-21 11:26 ` [PATCH v4 2/8] mm: Add missing TLB invalidate to RCU page-table freeing Nikunj A. Dadhania
2012-08-21 11:26 ` [PATCH v4 3/8] KVM Guest: Add VCPU running/pre-empted state for guest Nikunj A. Dadhania
2012-08-23  9:36   ` Marcelo Tosatti
2012-08-24  5:39     ` Nikunj A Dadhania
2012-08-24 15:02       ` Marcelo Tosatti
2012-08-27  4:24         ` Nikunj A Dadhania
2012-08-21 11:26 ` [PATCH v4 4/8] KVM-HV: " Nikunj A. Dadhania
2012-08-23 11:46   ` Marcelo Tosatti
2012-08-24  5:19     ` Nikunj A Dadhania
2012-08-24 15:02       ` Marcelo Tosatti
2012-08-21 11:27 ` [PATCH v4 5/8] KVM Guest: Add paravirt kvm_flush_tlb_others Nikunj A. Dadhania
2012-08-21 11:27 ` [PATCH v4 6/8] KVM-HV: Add flush_on_enter before guest enter Nikunj A. Dadhania
2012-08-21 11:27 ` [PATCH v4 7/8] Enable HAVE_RCU_TABLE_FREE for kvm when PARAVIRT_TLB_FLUSH is enabled Nikunj A. Dadhania
2012-08-21 11:28 ` [PATCH v4 8/8] KVM-doc: Add paravirt tlb flush document Nikunj A. Dadhania
2012-08-23 11:48 ` Marcelo Tosatti [this message]
2012-09-03 14:33 ` [PATCH v4 0/8] KVM paravirt remote flush tlb Avi Kivity
2012-09-03 15:27   ` Avi Kivity
2012-09-04  1:30   ` Nikunj A Dadhania
2012-09-04  7:51     ` Avi Kivity
2012-09-04  8:08       ` Nikunj A Dadhania
2012-09-04 10:37         ` Avi Kivity

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=20120823114856.GB4747@amt.cnet \
    --to=mtosatti@redhat.com \
    --cc=alex.shi@intel.com \
    --cc=avi@redhat.com \
    --cc=hpa@zytor.com \
    --cc=kvm@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=nikunj@linux.vnet.ibm.com \
    --cc=peter@programming.kicks-ass.net \
    --cc=peterz@infradead.org \
    --cc=raghukt@linux.vnet.ibm.com \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=vsrivatsa@gmail.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.