public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/6] KVM: MMU: fast invalid all mmio sptes
@ 2013-04-01  9:56 Xiao Guangrong
  2013-04-01  9:56 ` [PATCH v2 1/6] KVM: MMU: retain more available bits on mmio spte Xiao Guangrong
                   ` (6 more replies)
  0 siblings, 7 replies; 13+ messages in thread
From: Xiao Guangrong @ 2013-04-01  9:56 UTC (permalink / raw)
  To: mtosatti; +Cc: gleb, linux-kernel, kvm, Xiao Guangrong

Changelog in v2:
  - rename kvm_mmu_invalid_mmio_spte to kvm_mmu_invalid_mmio_sptes
  - use kvm->memslots->generation as kvm global generation-number
  - fix comment and codestyle
  - init kvm generation close to mmio wrap-around value
  - keep kvm_mmu_zap_mmio_sptes

The current way is holding hot mmu-lock and walking all shadow pages, this
is not scale. This patchset tries to introduce a very simple and scale way
to fast invalid all mmio sptes - it need not walk any shadow pages and hold
any locks.

The idea is simple:
KVM maintains a global mmio invalid generation-number which is stored in
kvm->memslots.generation and every mmio spte stores the current global
generation-number into his available bits when it is created

When KVM need zap all mmio sptes, it just simply increase the global
generation-number. When guests do mmio access, KVM intercepts a MMIO #PF
then it walks the shadow page table and get the mmio spte. If the
generation-number on the spte does not equal the global generation-number,
it will go to the normal #PF handler to update the mmio spte

Since 19 bits are used to store generation-number on mmio spte, we zap all
mmio sptes when the number is round

Xiao Guangrong (6):
  KVM: MMU: retain more available bits on mmio spte
  KVM: MMU: store generation-number into mmio spte
  KVM: MMU: make return value of mmio page fault handler more readable
  KVM: MMU: fast invalid all mmio sptes
  KVM: MMU: add tracepoint for check_mmio_spte
  KVM: MMU: init kvm generation close to mmio wrap-around value

 arch/x86/include/asm/kvm_host.h |    3 +-
 arch/x86/kvm/mmu.c              |  134 +++++++++++++++++++++++++++++++--------
 arch/x86/kvm/mmu.h              |   17 +++++
 arch/x86/kvm/mmutrace.h         |   34 +++++++++-
 arch/x86/kvm/paging_tmpl.h      |   10 ++-
 arch/x86/kvm/vmx.c              |   12 +++-
 arch/x86/kvm/x86.c              |   11 +++-
 virt/kvm/kvm_main.c             |    6 ++
 8 files changed, 186 insertions(+), 41 deletions(-)

-- 
1.7.7.6

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2013-04-25  9:24 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-01  9:56 [PATCH v2 0/6] KVM: MMU: fast invalid all mmio sptes Xiao Guangrong
2013-04-01  9:56 ` [PATCH v2 1/6] KVM: MMU: retain more available bits on mmio spte Xiao Guangrong
2013-04-01  9:56 ` [PATCH v2 2/6] KVM: MMU: store generation-number into " Xiao Guangrong
2013-04-01  9:56 ` [PATCH v2 3/6] KVM: MMU: make return value of mmio page fault handler more readable Xiao Guangrong
2013-04-24 13:34   ` Gleb Natapov
2013-04-25  9:24     ` Xiao Guangrong
2013-04-01  9:56 ` [PATCH v2 4/6] KVM: MMU: fast invalid all mmio sptes Xiao Guangrong
2013-04-01  9:56 ` [PATCH v2 5/6] KVM: MMU: add tracepoint for check_mmio_spte Xiao Guangrong
2013-04-01  9:56 ` [PATCH v2 6/6] KVM: MMU: init kvm generation close to mmio wrap-around value Xiao Guangrong
2013-04-24 12:59   ` Gleb Natapov
2013-04-25  9:23     ` Xiao Guangrong
2013-04-16  0:54 ` [PATCH v2 0/6] KVM: MMU: fast invalid all mmio sptes Marcelo Tosatti
2013-04-16  3:09   ` Xiao Guangrong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox