From: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: gleb@redhat.com, avi.kivity@gmail.com, mtosatti@redhat.com,
linux-kernel@vger.kernel.org, kvm@vger.kernel.org
Subject: Re: [PATCH 7/7] KVM: MMU: document fast invalidate all mmio sptes
Date: Wed, 19 Jun 2013 21:10:17 +0800 [thread overview]
Message-ID: <51C1ADB9.2030509@linux.vnet.ibm.com> (raw)
In-Reply-To: <51C1A57F.3060704@redhat.com>
On 06/19/2013 08:35 PM, Paolo Bonzini wrote:
> Il 19/06/2013 11:09, Xiao Guangrong ha scritto:
>> Document it to Documentation/virtual/kvm/mmu.txt
>>
>> Signed-off-by: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
>> ---
>> Documentation/virtual/kvm/mmu.txt | 25 +++++++++++++++++++++++++
>> 1 file changed, 25 insertions(+)
>>
>> diff --git a/Documentation/virtual/kvm/mmu.txt b/Documentation/virtual/kvm/mmu.txt
>> index f5c4de9..9b7cfb3 100644
>> --- a/Documentation/virtual/kvm/mmu.txt
>> +++ b/Documentation/virtual/kvm/mmu.txt
>> @@ -396,6 +396,31 @@ ensures the old pages are not used any more. The invalid-gen pages
>> (sp->mmu_valid_gen != kvm->arch.mmu_valid_gen) are zapped by using lock-break
>> technique.
>>
>> +Fast invalidate all mmio sptes
>> +===========
>> +As mentioned in "Reaction to events" above, kvm will cache the mmio information
>> +to the last sptes so that we should zap all mmio sptes when the guest mmio info
>> +is changed. This will happen when a new memslot is added or the existing
>> +memslot is moved.
>> +
>> +Zapping mmio spte is also a scalability issue for the large memory and large
>> +vcpus guests since it needs to hold hot mmu-lock and walk all shadow pages to
>> +find all the mmio spte out.
>> +
>> +We fix this issue by using the similar way of "Fast invalidate all pages".
>> +The global mmio valid generation-number is stored in kvm->memslots.generation
>> +and every mmio spte stores the current global generation-number into his
>> +available bits when it is created
>> +
>> +The global mmio valid generation-number is increased whenever the gust memory
>> +info is changed. 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 pages
>> +when the number is round.
>
> As mentioned in "Reaction to events" above, kvm will cache MMIO
> information in leaf sptes. When a new memslot is added or an existing
> memslot is changed, this information may become stale and needs to be
> invalidated. This also needs to hold the MMU lock while walking all
> shadow pages, and is made more scalable with a similar technique.
>
> MMIO sptes have a few spare bits, which are used to store a
> generation number. The global generation number is stored in
> kvm_memslots(kvm)->generation, and increased whenever guest memory info
> changes. This generation number is distinct from the one described in
> the previous section.
>
> When KVM finds an MMIO spte, it checks the generation number of the spte.
> If the generation number of the spte does not equal the global generation
> number, it will ignore the cached MMIO information and handle the page
> fault through the slow path.
>
> Since only 19 bits are used to store generation-number on mmio spte, all
> pages are zapped when there is an overflow.
Really nice.
>
>
> I'm also adding this in the page fault section:
>
> - check for valid generation number in the spte (see "Fast invalidation of
> MMIO sptes" below)
Oh, i forgot it in this section, thanks for your fix.
next prev parent reply other threads:[~2013-06-19 13:10 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-19 9:09 [PATCH 0/7] KVM: MMU: update mmu documentation Xiao Guangrong
2013-06-19 9:09 ` [PATCH 1/7] KVM: MMU: update the documentation for reverse mapping of parent_pte Xiao Guangrong
2013-06-19 10:32 ` Paolo Bonzini
2013-06-19 9:09 ` [PATCH 2/7] KVM: MMU: document clear_spte_count Xiao Guangrong
2013-06-19 11:32 ` Paolo Bonzini
2013-06-19 11:53 ` Xiao Guangrong
2013-06-19 11:55 ` Paolo Bonzini
2013-06-19 12:25 ` Xiao Guangrong
2013-06-19 12:41 ` Paolo Bonzini
2013-06-19 13:29 ` Xiao Guangrong
2013-06-19 11:40 ` Paolo Bonzini
2013-06-19 12:39 ` Xiao Guangrong
2013-06-19 9:09 ` [PATCH 3/7] KVM: MMU: document write_flooding_count Xiao Guangrong
2013-06-19 11:58 ` Paolo Bonzini
2013-06-19 12:43 ` Xiao Guangrong
2013-06-19 9:09 ` [PATCH 4/7] KVM: MMU: document mmio page fault Xiao Guangrong
2013-06-19 12:10 ` Paolo Bonzini
2013-06-19 12:59 ` Xiao Guangrong
2013-06-19 9:09 ` [PATCH 5/7] KVM: MMU: document fast page fault in Xiao Guangrong
2013-06-19 12:13 ` Paolo Bonzini
2013-06-19 13:00 ` Xiao Guangrong
2013-06-19 9:09 ` [PATCH 6/7] KVM: MMU: document fast invalidate all pages Xiao Guangrong
2013-06-19 12:25 ` Paolo Bonzini
2013-06-19 13:07 ` Xiao Guangrong
2013-06-19 9:09 ` [PATCH 7/7] KVM: MMU: document fast invalidate all mmio sptes Xiao Guangrong
2013-06-19 12:35 ` Paolo Bonzini
2013-06-19 13:10 ` Xiao Guangrong [this message]
2013-06-20 5:21 ` Rob Landley
2013-06-20 8:19 ` Paolo Bonzini
2013-06-19 17:41 ` [PATCH 0/7] KVM: MMU: update mmu documentation Paolo Bonzini
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=51C1ADB9.2030509@linux.vnet.ibm.com \
--to=xiaoguangrong@linux.vnet.ibm.com \
--cc=avi.kivity@gmail.com \
--cc=gleb@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mtosatti@redhat.com \
--cc=pbonzini@redhat.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.