All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@osdl.org>
To: Avi Kivity <avi@qumranet.com>
Cc: kvm-devel <kvm-devel@lists.sourceforge.net>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	Ingo Molnar <mingo@elte.hu>
Subject: Re: [PATCH 0/33] KVM: MMU: Cache shadow page tables
Date: Thu, 4 Jan 2007 09:22:26 -0800	[thread overview]
Message-ID: <20070104092226.91fa2dfe.akpm@osdl.org> (raw)
In-Reply-To: <459D21DD.5090506@qumranet.com>

On Thu, 04 Jan 2007 17:48:45 +0200
Avi Kivity <avi@qumranet.com> wrote:

> The current kvm shadow page table implementation does not cache shadow 
> page tables (except for global translations, used for kernel addresses) 
> across context switches.  This means that after a context switch, every 
> memory access will trap into the host.  After a while, the shadow page 
> tables will be rebuild, and the guest can proceed at native speed until 
> the next context switch.
> 
> The natural solution, then, is to cache shadow page tables across 
> context switches.  Unfortunately, this introduces a bucketload of problems:
> 
> - the guest does not notify the processor (and hence kvm) that it 
> modifies a page table entry if it has reason to believe that the 
> modification will be followed by a tlb flush.  It becomes necessary to 
> write-protect guest page tables so that we can use the page fault when 
> the access occurs as a notification.
> - write protecting the guest page tables means we need to keep track of 
> which ptes map those guest page table. We need to add reverse mapping 
> for all mapped writable guest pages.
> - when the guest does access the write-protected page, we need to allow 
> it to perform the write in some way.  We do that either by emulating the 
> write, or removing all shadow page tables for that page and allowing the 
> write to proceed, depending on circumstances.
> 
> This patchset implements the ideas above.  While a lot of tuning remains 
> to be done (for example, a sane page replacement algorithm), a guest 
> running with this patchset applied is much faster and more responsive 
> than with 2.6.20-rc3.  Some preliminary benchmarks are available in 
> http://article.gmane.org/gmane.comp.emulators.kvm.devel/661.
> 
> The patchset is bisectable compile-wise.

Is this intended for 2.6.20, or would you prefer that we release what we
have now and hold this off for 2.6.21?

WARNING: multiple messages have this Message-ID (diff)
From: Andrew Morton <akpm-3NddpPZAyC0@public.gmane.org>
To: Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
Cc: kvm-devel
	<kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>,
	linux-kernel
	<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [PATCH 0/33] KVM: MMU: Cache shadow page tables
Date: Thu, 4 Jan 2007 09:22:26 -0800	[thread overview]
Message-ID: <20070104092226.91fa2dfe.akpm@osdl.org> (raw)
In-Reply-To: <459D21DD.5090506-atKUWr5tajBWk0Htik3J/w@public.gmane.org>

On Thu, 04 Jan 2007 17:48:45 +0200
Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org> wrote:

> The current kvm shadow page table implementation does not cache shadow 
> page tables (except for global translations, used for kernel addresses) 
> across context switches.  This means that after a context switch, every 
> memory access will trap into the host.  After a while, the shadow page 
> tables will be rebuild, and the guest can proceed at native speed until 
> the next context switch.
> 
> The natural solution, then, is to cache shadow page tables across 
> context switches.  Unfortunately, this introduces a bucketload of problems:
> 
> - the guest does not notify the processor (and hence kvm) that it 
> modifies a page table entry if it has reason to believe that the 
> modification will be followed by a tlb flush.  It becomes necessary to 
> write-protect guest page tables so that we can use the page fault when 
> the access occurs as a notification.
> - write protecting the guest page tables means we need to keep track of 
> which ptes map those guest page table. We need to add reverse mapping 
> for all mapped writable guest pages.
> - when the guest does access the write-protected page, we need to allow 
> it to perform the write in some way.  We do that either by emulating the 
> write, or removing all shadow page tables for that page and allowing the 
> write to proceed, depending on circumstances.
> 
> This patchset implements the ideas above.  While a lot of tuning remains 
> to be done (for example, a sane page replacement algorithm), a guest 
> running with this patchset applied is much faster and more responsive 
> than with 2.6.20-rc3.  Some preliminary benchmarks are available in 
> http://article.gmane.org/gmane.comp.emulators.kvm.devel/661.
> 
> The patchset is bisectable compile-wise.

Is this intended for 2.6.20, or would you prefer that we release what we
have now and hold this off for 2.6.21?

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

  parent reply	other threads:[~2007-01-04 17:22 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-01-04 15:48 [PATCH 0/33] KVM: MMU: Cache shadow page tables Avi Kivity
2007-01-04 15:48 ` Avi Kivity
2007-01-04 15:50 ` [PATCH 1/33] KVM: MMU: Implement simple reverse mapping Avi Kivity
2007-01-04 15:51 ` [PATCH 2/33] KVM: MMU: Teach the page table walker to track guest page table gfns Avi Kivity
2007-01-04 15:51   ` Avi Kivity
2007-01-04 15:52 ` [PATCH 3/33] KVM: MMU: Load the pae pdptrs on cr3 change like the processor does Avi Kivity
2007-01-04 15:52   ` Avi Kivity
2007-01-04 15:53 ` [PATCH 4/33] KVM: MMU: Fold fetch_guest() into init_walker() Avi Kivity
2007-01-04 15:53   ` Avi Kivity
2007-01-04 15:54 ` [PATCH 5/33] KVM: MU: Special treatment for shadow pae root pages Avi Kivity
2007-01-04 15:54   ` Avi Kivity
2007-01-04 15:55 ` [PATCH 6/33] KVM: MMU: Use the guest pdptrs instead of mapping cr3 in pae mode Avi Kivity
2007-01-04 15:55   ` Avi Kivity
2007-01-04 15:56 ` [PATCH 7/33] KVM: MMU: Make the shadow page tables also special-case pae Avi Kivity
2007-01-04 15:56   ` Avi Kivity
2007-01-04 15:57 ` [PATCH 8/33] KVM: MMU: Make kvm_mmu_alloc_page() return a kvm_mmu_page pointer Avi Kivity
2007-01-04 15:57   ` Avi Kivity
2007-01-04 15:58 ` [PATCH 9/33] KVM: MMU: Shadow page table caching Avi Kivity
2007-01-04 15:58   ` Avi Kivity
2007-01-04 15:59 ` [PATCH 10/33] KVM: MMU: Write protect guest pages when a shadow is created for them Avi Kivity
2007-01-04 15:59   ` Avi Kivity
2007-01-04 16:00 ` [PATCH 11/33] KVM: MMU: Let the walker extract the target page gfn from the pte Avi Kivity
2007-01-04 16:00   ` Avi Kivity
2007-01-04 16:01 ` [PATCH 12/33] KVM: MMU: Support emulated writes into RAM Avi Kivity
2007-01-04 16:01   ` Avi Kivity
2007-01-04 16:02 ` [PATCH 13/33] KVM: MMU: Zap shadow page table entries on writes to guest page tables Avi Kivity
2007-01-04 16:02   ` Avi Kivity
2007-01-04 16:03 ` [PATCH 14/33] KVM: MMU: If emulating an instruction fails, try unprotecting the page Avi Kivity
2007-01-04 16:03   ` Avi Kivity
2007-01-04 16:04 ` [PATCH 15/33] KVM: MMU: Implement child shadow unlinking Avi Kivity
2007-01-04 16:04   ` Avi Kivity
2007-01-04 16:05 ` [PATCH 16/33] KVM: MMU: kvm_mmu_put_page() only removes one link to the page Avi Kivity
2007-01-04 16:06 ` [PATCH 17/33] KVM: MMU: oom handling Avi Kivity
2007-01-04 16:06   ` Avi Kivity
2007-01-04 16:07 ` [PATCH 18/33] KVM: MMU: Remove invlpg interception Avi Kivity
2007-01-04 16:07   ` Avi Kivity
2007-01-04 16:08 ` [PATCH 19/33] KVM: MMU: Remove release_pt_page_64() Avi Kivity
2007-01-04 16:08   ` Avi Kivity
2007-01-04 16:09 ` [PATCH 20/33] KVM: MMU: Handle misaligned accesses to write protected guest page tables Avi Kivity
2007-01-04 16:10 ` [PATCH 21/33] KVM: MMU: <ove is_empty_shadow_page() above kvm_mmu_free_page() Avi Kivity
2007-01-04 16:10   ` Avi Kivity
2007-01-04 16:11 ` [PATCH 22/33] KVM: MMU: Ensure freed shadow pages are clean Avi Kivity
2007-01-04 16:11   ` Avi Kivity
2007-01-04 16:12 ` [PATCH 23/33] KVM: MMU: If an empty shadow page is not empty, report more info Avi Kivity
2007-01-04 16:13 ` [PATCH 24/33] KVM: MMU: Page table write flood protection Avi Kivity
2007-01-04 16:13   ` Avi Kivity
2007-01-04 16:14 ` [PATCH 25/33] KVM: MMU: Never free a shadow page actively serving as a root Avi Kivity
2007-01-04 16:14   ` Avi Kivity
2007-01-04 16:15 ` [PATCH 26/33] KVM: MMU: Fix cmpxchg8b emulation Avi Kivity
2007-01-04 16:15   ` Avi Kivity
2007-01-04 16:16 ` [PATCH 27/33] KVM: MMU: Treat user-mode faults as a hint that a page is no longer a page table Avi Kivity
2007-01-04 16:16   ` Avi Kivity
2007-01-04 16:17 ` [PATCH 28/33] KVM: MMU: Free pages on kvm destruction Avi Kivity
2007-01-04 16:17   ` Avi Kivity
2007-01-04 16:18 ` [PATCH 29/33] KVM: MMU: Replace atomic allocations by preallocated objects Avi Kivity
2007-01-04 16:18   ` Avi Kivity
2007-01-04 16:19 ` [PATCH 30/33] KVM: MMU: Detect oom conditions and propagate error to userspace Avi Kivity
2007-01-04 16:19   ` Avi Kivity
2007-01-04 16:20 ` [PATCH 31/33] KVM: MMU: Flush guest tlb when reducing permissions on a pte Avi Kivity
2007-01-04 16:20   ` Avi Kivity
2007-01-04 16:21 ` [PATCH 32/33] KVM: MMU: Destroy mmu while we still have a vcpu left Avi Kivity
2007-01-04 16:21   ` Avi Kivity
2007-01-04 16:22 ` [PATCH 33/33] KVM: MMU: add audit code to check mappings, etc are correct Avi Kivity
2007-01-04 16:22   ` Avi Kivity
2007-01-04 17:22 ` Andrew Morton [this message]
2007-01-04 17:22   ` [PATCH 0/33] KVM: MMU: Cache shadow page tables Andrew Morton
2007-01-04 17:41   ` Avi Kivity
2007-01-04 17:41     ` Avi Kivity
2007-01-04 18:02     ` Ingo Molnar
2007-01-04 18:02       ` Ingo Molnar

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=20070104092226.91fa2dfe.akpm@osdl.org \
    --to=akpm@osdl.org \
    --cc=avi@qumranet.com \
    --cc=kvm-devel@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    /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.