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.
next prev parent reply other threads:[~2012-02-08 18:47 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1328016724.2446.229.camel@twins>
2012-01-31 13:47 ` [RFC][PATCH] srcu: Implement call_srcu() 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).