mbox series

[v2,00/13] More parallel operations for the TDP MMU

Message ID 20210401233736.638171-1-bgardon@google.com (mailing list archive)
Headers show
Series More parallel operations for the TDP MMU | expand

Message

Ben Gardon April 1, 2021, 11:37 p.m. UTC
Now that the TDP MMU is able to handle page faults in parallel, it's a
relatively small change to expand to other operations. This series allows
zapping a range of GFNs, reclaiming collapsible SPTEs (when disabling
dirty logging), and enabling dirty logging to all happen under the MMU
lock in read mode.

This is partly a cleanup + rewrite of the last few patches of the parallel
page faults series. I've incorporated feedback from Sean and Paolo, but
the patches have changed so much that I'm sending this as a separate
series.

Ran kvm-unit-tests + selftests on an SMP kernel + Intel Skylake, with the
TDP MMU enabled and disabled. This series introduces no new failures or
warnings.

I know this will conflict horribly with the patches from Sean's series
which were just queued, and I'll send a v2 to fix those conflicts +
address any feedback on this v1.

Changelog
v2:
--	Rebased patches on top of kvm/queue to incorporate Sean's recent
	TLB flushing changes
--	Dropped patch 5: "KVM: x86/mmu: comment for_each_tdp_mmu_root
	requires MMU write lock" as the following patch to protect the roots
	list with RCU adds lockdep which makes the comment somewhat redundant.

Ben Gardon (13):
  KVM: x86/mmu: Re-add const qualifier in
    kvm_tdp_mmu_zap_collapsible_sptes
  KVM: x86/mmu: Move kvm_mmu_(get|put)_root to TDP MMU
  KVM: x86/mmu: use tdp_mmu_free_sp to free roots
  KVM: x86/mmu: Merge TDP MMU put and free root
  KVM: x86/mmu: Refactor yield safe root iterator
  KVM: x86/mmu: Make TDP MMU root refcount atomic
  KVM: x86/mmu: handle cmpxchg failure in kvm_tdp_mmu_get_root
  KVM: x86/mmu: Protect the tdp_mmu_roots list with RCU
  KVM: x86/mmu: Allow zap gfn range to operate under the mmu read lock
  KVM: x86/mmu: Allow zapping collapsible SPTEs to use MMU read lock
  KVM: x86/mmu: Allow enabling / disabling dirty logging under MMU read
    lock
  KVM: x86/mmu: Fast invalidation for TDP MMU
  KVM: x86/mmu: Tear down roots in fast invalidation thread

 arch/x86/include/asm/kvm_host.h |  21 +-
 arch/x86/kvm/mmu/mmu.c          | 115 +++++++---
 arch/x86/kvm/mmu/mmu_internal.h |  27 +--
 arch/x86/kvm/mmu/tdp_mmu.c      | 375 +++++++++++++++++++++++---------
 arch/x86/kvm/mmu/tdp_mmu.h      |  28 ++-
 include/linux/kvm_host.h        |   2 +-
 6 files changed, 407 insertions(+), 161 deletions(-)

Comments

Paolo Bonzini April 2, 2021, 11:43 a.m. UTC | #1
On 02/04/21 01:37, Ben Gardon wrote:
> Now that the TDP MMU is able to handle page faults in parallel, it's a
> relatively small change to expand to other operations. This series allows
> zapping a range of GFNs, reclaiming collapsible SPTEs (when disabling
> dirty logging), and enabling dirty logging to all happen under the MMU
> lock in read mode.
> 
> This is partly a cleanup + rewrite of the last few patches of the parallel
> page faults series. I've incorporated feedback from Sean and Paolo, but
> the patches have changed so much that I'm sending this as a separate
> series.
> 
> Ran kvm-unit-tests + selftests on an SMP kernel + Intel Skylake, with the
> TDP MMU enabled and disabled. This series introduces no new failures or
> warnings.
> 
> I know this will conflict horribly with the patches from Sean's series
> which were just queued, and I'll send a v2 to fix those conflicts +
> address any feedback on this v1.
> 
> Changelog
> v2:
> --	Rebased patches on top of kvm/queue to incorporate Sean's recent
> 	TLB flushing changes
> --	Dropped patch 5: "KVM: x86/mmu: comment for_each_tdp_mmu_root
> 	requires MMU write lock" as the following patch to protect the roots
> 	list with RCU adds lockdep which makes the comment somewhat redundant.
> 
> Ben Gardon (13):
>    KVM: x86/mmu: Re-add const qualifier in
>      kvm_tdp_mmu_zap_collapsible_sptes
>    KVM: x86/mmu: Move kvm_mmu_(get|put)_root to TDP MMU
>    KVM: x86/mmu: use tdp_mmu_free_sp to free roots
>    KVM: x86/mmu: Merge TDP MMU put and free root
>    KVM: x86/mmu: Refactor yield safe root iterator
>    KVM: x86/mmu: Make TDP MMU root refcount atomic
>    KVM: x86/mmu: handle cmpxchg failure in kvm_tdp_mmu_get_root
>    KVM: x86/mmu: Protect the tdp_mmu_roots list with RCU
>    KVM: x86/mmu: Allow zap gfn range to operate under the mmu read lock
>    KVM: x86/mmu: Allow zapping collapsible SPTEs to use MMU read lock
>    KVM: x86/mmu: Allow enabling / disabling dirty logging under MMU read
>      lock
>    KVM: x86/mmu: Fast invalidation for TDP MMU
>    KVM: x86/mmu: Tear down roots in fast invalidation thread
> 
>   arch/x86/include/asm/kvm_host.h |  21 +-
>   arch/x86/kvm/mmu/mmu.c          | 115 +++++++---
>   arch/x86/kvm/mmu/mmu_internal.h |  27 +--
>   arch/x86/kvm/mmu/tdp_mmu.c      | 375 +++++++++++++++++++++++---------
>   arch/x86/kvm/mmu/tdp_mmu.h      |  28 ++-
>   include/linux/kvm_host.h        |   2 +-
>   6 files changed, 407 insertions(+), 161 deletions(-)
> 

Applied to kvm/mmu-notifier-queue, thanks.

Paolo
Sean Christopherson May 26, 2021, 9:34 p.m. UTC | #2
On Fri, Apr 02, 2021, Paolo Bonzini wrote:
> On 02/04/21 01:37, Ben Gardon wrote:
> > Now that the TDP MMU is able to handle page faults in parallel, it's a
> > relatively small change to expand to other operations. This series allows
> > zapping a range of GFNs, reclaiming collapsible SPTEs (when disabling
> > dirty logging), and enabling dirty logging to all happen under the MMU
> > lock in read mode.
> > 
> > This is partly a cleanup + rewrite of the last few patches of the parallel
> > page faults series. I've incorporated feedback from Sean and Paolo, but
> > the patches have changed so much that I'm sending this as a separate
> > series.
> > 
> > Ran kvm-unit-tests + selftests on an SMP kernel + Intel Skylake, with the
> > TDP MMU enabled and disabled. This series introduces no new failures or
> > warnings.
> > 
> > I know this will conflict horribly with the patches from Sean's series
> > which were just queued, and I'll send a v2 to fix those conflicts +
> > address any feedback on this v1.
> > 
> > Changelog
> > v2:
> > --	Rebased patches on top of kvm/queue to incorporate Sean's recent
> > 	TLB flushing changes
> > --	Dropped patch 5: "KVM: x86/mmu: comment for_each_tdp_mmu_root
> > 	requires MMU write lock" as the following patch to protect the roots
> > 	list with RCU adds lockdep which makes the comment somewhat redundant.
> > 
> > Ben Gardon (13):
> >    KVM: x86/mmu: Re-add const qualifier in
> >      kvm_tdp_mmu_zap_collapsible_sptes
> >    KVM: x86/mmu: Move kvm_mmu_(get|put)_root to TDP MMU
> >    KVM: x86/mmu: use tdp_mmu_free_sp to free roots
> >    KVM: x86/mmu: Merge TDP MMU put and free root
> >    KVM: x86/mmu: Refactor yield safe root iterator
> >    KVM: x86/mmu: Make TDP MMU root refcount atomic
> >    KVM: x86/mmu: handle cmpxchg failure in kvm_tdp_mmu_get_root
> >    KVM: x86/mmu: Protect the tdp_mmu_roots list with RCU
> >    KVM: x86/mmu: Allow zap gfn range to operate under the mmu read lock
> >    KVM: x86/mmu: Allow zapping collapsible SPTEs to use MMU read lock
> >    KVM: x86/mmu: Allow enabling / disabling dirty logging under MMU read
> >      lock
> >    KVM: x86/mmu: Fast invalidation for TDP MMU
> >    KVM: x86/mmu: Tear down roots in fast invalidation thread
> > 
> >   arch/x86/include/asm/kvm_host.h |  21 +-
> >   arch/x86/kvm/mmu/mmu.c          | 115 +++++++---
> >   arch/x86/kvm/mmu/mmu_internal.h |  27 +--
> >   arch/x86/kvm/mmu/tdp_mmu.c      | 375 +++++++++++++++++++++++---------
> >   arch/x86/kvm/mmu/tdp_mmu.h      |  28 ++-
> >   include/linux/kvm_host.h        |   2 +-
> >   6 files changed, 407 insertions(+), 161 deletions(-)
> > 
> 
> Applied to kvm/mmu-notifier-queue, thanks.

What's the plan for kvm/mmu-notifier-queue?  More specifically, are the hashes
stable, i.e. will non-critical review feedback get squashed?  I was finally
getting around to reviewing this, but what's sitting in that branch doesn't
appear to be exactly what's posted here.  If the hashes are stable, I'll probably
test and review functionality, but not do a thorough review.

Thanks!
Paolo Bonzini May 27, 2021, 11:41 a.m. UTC | #3
On 26/05/21 23:34, Sean Christopherson wrote:
>> Applied to kvm/mmu-notifier-queue, thanks.
> What's the plan for kvm/mmu-notifier-queue?  More specifically, are the hashes
> stable, i.e. will non-critical review feedback get squashed?  I was finally
> getting around to reviewing this, but what's sitting in that branch doesn't
> appear to be exactly what's posted here.  If the hashes are stable, I'll probably
> test and review functionality, but not do a thorough review.

It's all in 5.13 except for the lock elision patch, for which I was 
waiting for a review.  I'll post that patch separately.

Thanks,

Paolo
Sean Christopherson May 27, 2021, 3:26 p.m. UTC | #4
On Thu, May 27, 2021, Paolo Bonzini wrote:
> On 26/05/21 23:34, Sean Christopherson wrote:
> > > Applied to kvm/mmu-notifier-queue, thanks.
> > What's the plan for kvm/mmu-notifier-queue?  More specifically, are the hashes
> > stable, i.e. will non-critical review feedback get squashed?  I was finally
> > getting around to reviewing this, but what's sitting in that branch doesn't
> > appear to be exactly what's posted here.  If the hashes are stable, I'll probably
> > test and review functionality, but not do a thorough review.
> 
> It's all in 5.13 except for the lock elision patch, for which I was waiting
> for a review.  I'll post that patch separately.

Ha, stable indeed.  Thanks!