From: Avi Kivity <avi@redhat.com>
To: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>,
LKML <linux-kernel@vger.kernel.org>, KVM <kvm@vger.kernel.org>
Subject: Re: [PATCH 14/15] KVM: MMU: mmio page fault support
Date: Thu, 09 Jun 2011 10:28:01 +0300 [thread overview]
Message-ID: <4DF07601.9060705@redhat.com> (raw)
In-Reply-To: <4DEE2281.1000008@cn.fujitsu.com>
On 06/07/2011 04:07 PM, Xiao Guangrong wrote:
> The idea is from Avi:
>
> | We could cache the result of a miss in an spte by using a reserved bit, and
> | checking the page fault error code (or seeing if we get an ept violation or
> | ept misconfiguration), so if we get repeated mmio on a page, we don't need to
> | search the slot list/tree.
> | (https://lkml.org/lkml/2011/2/22/221)
>
> When the page fault is caused by mmio, we cache the info in the shadow page
> table, and also set the reserved bits in the shadow page table, so if the mmio
> is caused again, we can quickly identify it and emulate it directly
>
> Searching mmio gfn in memslots is heavy since we need to walk all memeslots, it
> can be reduced by this feature, and also avoid walking guest page table for
> soft mmu.
>
> This feature can be disabled/enabled at the runtime, if
> shadow_notrap_nonpresent_pte is enabled, the PFER.RSVD is always set, we need
> to walk shadow page table for all page fault, so disable this feature if
> shadow_notrap_nonpresent is enabled.
>
Maybe it's time to kill off bypass_guest_pf=1. It's not as effective as
it used to be, since unsync pages always use shadow_trap_nonpresent_pte,
and since we convert between the two nonpresent_ptes during sync and unsync.
> diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
> index 4f475ab..227cf10 100644
> --- a/arch/x86/kvm/mmu.c
> +++ b/arch/x86/kvm/mmu.c
> @@ -91,6 +91,9 @@ module_param(dbg, bool, 0644);
> static int oos_shadow = 1;
> module_param(oos_shadow, bool, 0644);
>
> +static int __read_mostly mmio_pf = 1;
> +module_param(mmio_pf, bool, 0644);
Why make it a module parameter?
> +static void mark_mmio_spte(u64 *sptep, u64 gfn, unsigned access)
> +{
> + access&= ACC_WRITE_MASK | ACC_USER_MASK;
> +
> + __set_spte(sptep, shadow_mmio_mask | access | gfn<< PAGE_SHIFT);
> +}
This can only work for shadow. Is it worth the complexity?
Also, shadow walking is not significantly faster than guest page table
walking. And if we miss, we have to walk the guest page tables in any case.
> +
> +static bool quickly_check_mmio_pf(struct kvm_vcpu *vcpu, u64 addr, bool direct)
> +{
> + if (direct&& vcpu_match_mmio_gpa(vcpu, addr))
> + return true;
> +
> + if (vcpu_match_mmio_gva(vcpu, addr))
> + return true;
> +
> + return false;
> +}
There is also the case of nesting - it's not direct and it's not a gva.
--
error compiling committee.c: too many arguments to function
next prev parent reply other threads:[~2011-06-09 7:28 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-07 12:58 [PATCH 0/15] KVM: optimize for MMIO handled Xiao Guangrong
2011-06-07 12:58 ` [PATCH 01/15] KVM: MMU: fix walking shadow page table Xiao Guangrong
2011-06-07 12:59 ` [PATCH 02/15] KVM: MMU: do not update slot bitmap if spte is nonpresent Xiao Guangrong
2011-06-20 16:28 ` Marcelo Tosatti
2011-06-20 18:32 ` Xiao Guangrong
2011-06-07 12:59 ` [PATCH 03/15] KVM: x86: avoid unnecessarily guest page table walking Xiao Guangrong
2011-06-09 6:59 ` Avi Kivity
2011-06-10 3:51 ` Xiao Guangrong
2011-06-07 13:00 ` [PATCH 04/15] KVM: MMU: cache mmio info on page fault path Xiao Guangrong
2011-06-08 8:22 ` Alexander Graf
2011-06-08 8:58 ` Xiao Guangrong
2011-06-08 9:18 ` Alexander Graf
2011-06-08 9:33 ` Xiao Guangrong
2011-06-08 9:39 ` Alexander Graf
2011-06-20 16:14 ` Marcelo Tosatti
2011-06-20 16:16 ` Marcelo Tosatti
2011-06-07 13:01 ` [PATCH 05/15] KVM: MMU: optimize to handle dirty bit Xiao Guangrong
2011-06-08 3:16 ` Xiao Guangrong
2011-06-07 13:01 ` [PATCH 06/15] KVM: MMU: cleanup for FNAME(fetch) Xiao Guangrong
2011-06-07 13:02 ` [PATCH 07/15] KVM: MMU: rename 'pt_write' to 'emulate' Xiao Guangrong
2011-06-07 13:02 ` [PATCH 08/15] KVM: MMU: count used shadow pages on preparing path Xiao Guangrong
2011-06-07 13:03 ` [PATCH 09/15] KVM: MMU: split kvm_mmu_free_page Xiao Guangrong
2011-06-09 7:07 ` Avi Kivity
2011-06-10 3:50 ` Xiao Guangrong
2011-06-12 8:33 ` Avi Kivity
2011-06-13 3:15 ` Xiao Guangrong
2011-06-07 13:04 ` [PATCH 10/15] KVM: MMU: lockless walking shadow page table Xiao Guangrong
2011-06-09 20:09 ` Paul E. McKenney
2011-06-10 4:23 ` Xiao Guangrong
2011-06-20 16:37 ` Marcelo Tosatti
2011-06-20 18:54 ` Xiao Guangrong
2011-06-07 13:05 ` [PATCH 11/15] KVM: MMU: filter out the mmio pfn from the fault pfn Xiao Guangrong
2011-06-07 13:05 ` [PATCH 12/15] KVM: MMU: abstract some functions to handle " Xiao Guangrong
2011-06-07 13:06 ` [PATCH 13/15] KVM: VMX: modify the default value of nontrap shadow pte Xiao Guangrong
2011-06-09 7:14 ` Avi Kivity
2011-06-07 13:07 ` [PATCH 14/15] KVM: MMU: mmio page fault support Xiao Guangrong
2011-06-09 7:28 ` Avi Kivity [this message]
2011-06-10 3:47 ` Xiao Guangrong
2011-06-12 8:38 ` Avi Kivity
2011-06-13 3:38 ` Xiao Guangrong
2011-06-13 8:10 ` Avi Kivity
2011-06-07 13:07 ` [PATCH 15/15] KVM: MMU: trace mmio page fault Xiao Guangrong
2011-06-08 3:11 ` [PATCH 0/15] KVM: optimize for MMIO handled Takuya Yoshikawa
2011-06-08 3:25 ` Xiao Guangrong
2011-06-08 3:32 ` Xiao Guangrong
2011-06-08 3:47 ` Takuya Yoshikawa
2011-06-08 5:16 ` Xiao Guangrong
2011-06-08 6:22 ` Xiao Guangrong
2011-06-08 8:33 ` Takuya Yoshikawa
2011-06-09 7:39 ` Avi Kivity
2011-06-10 4:05 ` Xiao Guangrong
2011-06-12 8:47 ` Avi Kivity
2011-06-13 4:46 ` Xiao Guangrong
2011-06-13 8:06 ` Avi Kivity
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=4DF07601.9060705@redhat.com \
--to=avi@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mtosatti@redhat.com \
--cc=xiaoguangrong@cn.fujitsu.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