From: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
To: Gleb Natapov <gleb@redhat.com>
Cc: avi.kivity@gmail.com, mtosatti@redhat.com, pbonzini@redhat.com,
linux-kernel@vger.kernel.org, kvm@vger.kernel.org
Subject: Re: [PATCH v6 3/7] KVM: MMU: fast invalidate all pages
Date: Mon, 20 May 2013 17:12:39 +0800 [thread overview]
Message-ID: <5199E907.4010700@linux.vnet.ibm.com> (raw)
In-Reply-To: <20130519100439.GD4725@redhat.com>
On 05/19/2013 06:04 PM, Gleb Natapov wrote:
>> + /*
>> + * Do not repeatedly zap a root page to avoid unnecessary
>> + * KVM_REQ_MMU_RELOAD, otherwise we may not be able to
>> + * progress:
>> + * vcpu 0 vcpu 1
>> + * call vcpu_enter_guest():
>> + * 1): handle KVM_REQ_MMU_RELOAD
>> + * and require mmu-lock to
>> + * load mmu
>> + * repeat:
>> + * 1): zap root page and
>> + * send KVM_REQ_MMU_RELOAD
>> + *
>> + * 2): if (cond_resched_lock(mmu-lock))
>> + *
>> + * 2): hold mmu-lock and load mmu
>> + *
>> + * 3): see KVM_REQ_MMU_RELOAD bit
>> + * on vcpu->requests is set
>> + * then return 1 to call
>> + * vcpu_enter_guest() again.
>> + * goto repeat;
>> + *
>> + */
> I am not sure why the above scenario will prevent us from progressing.
> There is finite number of root pages with invalid generation number, so
> eventually we will zap them all and vcpu1 will stop seeing KVM_REQ_MMU_RELOAD
> request.
This patch does not "zap pages in batch", so kvm_zap_obsolete_pages() can
just zap invalid root pages and lock-break due to the lock contention on the
path of handing KVM_REQ_MMU_RELOAD.
Yes, after "zap pages in batch", this issue does not exist any more. I should
update this into that patch.
>
> This check here prevent unnecessary KVM_REQ_MMU_RELOAD as you say, but
> this races the question, why don't we check for sp->role.invalid in
> kvm_mmu_prepare_zap_page before calling kvm_reload_remote_mmus()?
> Something like this:
>
> diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
> index 40d7b2d..d2ae3a4 100644
> --- a/arch/x86/kvm/mmu.c
> +++ b/arch/x86/kvm/mmu.c
> @@ -2081,7 +2081,8 @@ static int kvm_mmu_prepare_zap_page(struct kvm *kvm, struct kvm_mmu_page *sp,
> kvm_mod_used_mmu_pages(kvm, -1);
> } else {
> list_move(&sp->link, &kvm->arch.active_mmu_pages);
> - kvm_reload_remote_mmus(kvm);
> + if (!sp->role.invalid)
> + kvm_reload_remote_mmus(kvm);
> }
>
> sp->role.invalid = 1;
Yes, it is better.
>
> Actually we can add check for is_obsolete_sp() there too since
> kvm_mmu_invalidate_all_pages() already calls kvm_reload_remote_mmus()
> after incrementing mmu_valid_gen.
Yes, I agree.
>
> Or do I miss something?
No, you are right. ;)
next prev parent reply other threads:[~2013-05-20 9:12 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-16 21:12 [PATCH v6 0/7] KVM: MMU: fast zap all shadow pages Xiao Guangrong
2013-05-16 21:12 ` [PATCH v6 1/7] KVM: MMU: drop unnecessary kvm_reload_remote_mmus Xiao Guangrong
2013-05-16 21:12 ` [PATCH v6 2/7] KVM: MMU: delete shadow page from hash list in kvm_mmu_prepare_zap_page Xiao Guangrong
2013-05-19 10:47 ` Gleb Natapov
2013-05-20 9:19 ` Xiao Guangrong
2013-05-20 9:42 ` Gleb Natapov
2013-05-16 21:12 ` [PATCH v6 3/7] KVM: MMU: fast invalidate all pages Xiao Guangrong
2013-05-19 10:04 ` Gleb Natapov
2013-05-20 9:12 ` Xiao Guangrong [this message]
2013-05-20 19:46 ` Marcelo Tosatti
2013-05-20 20:15 ` Gleb Natapov
2013-05-20 20:40 ` Marcelo Tosatti
2013-05-21 3:36 ` Xiao Guangrong
2013-05-21 8:45 ` Gleb Natapov
2013-05-22 1:41 ` Marcelo Tosatti
2013-05-21 8:39 ` Gleb Natapov
2013-05-22 1:33 ` Marcelo Tosatti
2013-05-22 6:34 ` Gleb Natapov
2013-05-22 8:46 ` Xiao Guangrong
2013-05-22 8:54 ` Gleb Natapov
2013-05-22 9:41 ` Xiao Guangrong
2013-05-22 13:17 ` Gleb Natapov
2013-05-22 15:25 ` Xiao Guangrong
2013-05-22 15:42 ` Gleb Natapov
2013-05-22 15:06 ` Marcelo Tosatti
2013-05-16 21:12 ` [PATCH v6 4/7] KVM: MMU: zap pages in batch Xiao Guangrong
2013-05-16 21:13 ` [PATCH v6 5/7] KVM: x86: use the fast way to invalidate all pages Xiao Guangrong
2013-05-16 21:13 ` [PATCH v6 6/7] KVM: MMU: show mmu_valid_gen in shadow page related tracepoints Xiao Guangrong
2013-05-16 21:13 ` [PATCH v6 7/7] KVM: MMU: add tracepoint for kvm_mmu_invalidate_all_pages Xiao Guangrong
2013-05-19 10:49 ` [PATCH v6 0/7] KVM: MMU: fast zap all shadow pages Gleb Natapov
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=5199E907.4010700@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.