All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marcelo Tosatti <mtosatti@redhat.com>
To: Takuya Yoshikawa <takuya.yoshikawa@gmail.com>
Cc: avi@redhat.com, kvm@vger.kernel.org
Subject: Re: [RFC] need to improve slot creation/destruction? -- Re: [RFC][PATCH] srcu: Implement call_srcu()
Date: Wed, 8 Feb 2012 16:45:31 -0200	[thread overview]
Message-ID: <20120208184531.GA19883@amt.cnet> (raw)
In-Reply-To: <20120209004320.5772daa0472aef4700dab1b6@gmail.com>

On Thu, Feb 09, 2012 at 12:43:20AM +0900, Takuya Yoshikawa wrote:
> [Dropped non-kvm members from cc]
> 
> Marcelo Tosatti <mtosatti@redhat.com> wrote:
> 
> > VGABIOS mode constantly destroys and creates 0xa0000 slot, so
> > performance is required for KVM_SET_MEM too (it can probably be fixed in
> > qemu, but older qemu's must be supported).
> 
> Apart from srcu, I see some problems concerning slot creation/destruction:
> heavy shadow flush (and extra write protection).
> 
> 
> Look at __kvm_set_memory_region().
> 
> 1. When we invalidate a memory slot, we call kvm_arch_flush_shadow() and
> zap all shadow pages, not restricted to that slot.
> 
> 	/* From this point no new shadow pages pointing to a deleted
> 	 * memslot will be created.
> 	 *
> 	 * validation of sp->gfn happens in:
> 	 *	- gfn_to_hva (kvm_read_guest, gfn_to_pfn)
> 	 *	- kvm_is_visible_gfn (mmu_check_roots)
> 	 */
> 	kvm_arch_flush_shadow(kvm);
> 
> 2. When we create(and shift?) a memory slot, we call kvm_arch_flush_shadow()
> to clear all mmio sptes, again not restricted to that slot.
> 
> 	/*
> 	 * If the new memory slot is created, we need to clear all
> 	 * mmio sptes.
> 	 */
> 	if (npages && old.base_gfn != mem->guest_phys_addr >> PAGE_SHIFT)
> 		kvm_arch_flush_shadow(kvm);
> 
> 3. In addition to these, we do write-protect all pages in that slot in
> kvm_arch_commit_memory_region() every time.
> 
> 
> For 1:  I made a patch to restrict the flush to that slot by using sp->slot_bitmap.
> (seems working here)
> 
> For 2:  I think we can do the same:  not 100% sure yet because I am still
> struggling with the "mmio spte optimization" code.  (really hacky ...)

Yes, you can. The flush is there because a new slot invalidates any mmio
sptes in that region, but in the region covered by the new slot only.

> For 3:  I think doing both "write protection" and "shadow flush" is unnecessary.

If you enable dirty logging on a slot, certainly you have to write
protect?

> BTW do we really need fast slot creation/destruction?

At the moment yes. Boot a RHEL/Fedora installation disk (or any other
guest which uses SYSLINUX splash screen) and you will see. That
particular case is a limitation of cirrus in QEMU, ideally it should be
optimized there.


  reply	other threads:[~2012-02-08 18:47 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-31 13:32 [RFC][PATCH] srcu: Implement call_srcu() Peter Zijlstra
2012-01-31 13:47 ` Avi Kivity
2012-01-31 13:50   ` Peter Zijlstra
2012-01-31 22:24     ` Paul E. McKenney
2012-02-01 10:22       ` Peter Zijlstra
2012-02-01 10:44         ` Avi Kivity
2012-02-01 10:49           ` Avi Kivity
2012-02-01 11:00             ` Takuya Yoshikawa
2012-02-01 11:01               ` Avi Kivity
2012-02-01 11:12                 ` Takuya Yoshikawa
2012-02-01 13:24                   ` Avi Kivity
2012-02-02  5:46                     ` [test result] dirty logging without srcu update -- " Takuya Yoshikawa
2012-02-02 10:10                       ` Avi Kivity
2012-02-02 10:21                         ` Takuya Yoshikawa
2012-02-02 10:21                           ` Avi Kivity
2012-02-02 10:40                             ` Takuya Yoshikawa
2012-02-02 11:02                               ` Avi Kivity
2012-02-02 14:44                                 ` Takuya Yoshikawa
2012-02-02 14:57                                   ` Avi Kivity
2012-02-01 13:43                 ` Marcelo Tosatti
2012-02-01 15:42                   ` Takuya Yoshikawa
2012-02-01 13:50             ` Marcelo Tosatti
2012-02-08 15:43               ` [RFC] need to improve slot creation/destruction? -- " Takuya Yoshikawa
2012-02-08 18:45                 ` Marcelo Tosatti [this message]
2012-02-09 13:48                   ` Takuya Yoshikawa
2012-02-09 14:25                   ` Avi Kivity
2012-02-10 17:16                     ` Marcelo Tosatti
2012-02-14  9:52                       ` Avi Kivity
2012-02-09 14:23                 ` Avi Kivity
2012-02-09 14:24                   ` Avi Kivity
2012-02-10 13:08                     ` Takuya Yoshikawa
2012-02-10 17:17                       ` Marcelo Tosatti
2012-02-10 13:25                   ` Takuya Yoshikawa
2012-02-14  9:52                     ` Avi Kivity
2012-02-01 14:07         ` Paul E. McKenney

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=20120208184531.GA19883@amt.cnet \
    --to=mtosatti@redhat.com \
    --cc=avi@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=takuya.yoshikawa@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.