From: Sean Christopherson <sean.j.christopherson@intel.com>
To: Wanpeng Li <kernellwp@gmail.com>
Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
Paolo Bonzini <pbonzini@redhat.com>,
Vitaly Kuznetsov <vkuznets@redhat.com>,
Wanpeng Li <wanpengli@tencent.com>,
Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>,
Haiwei Li <lihaiwei@tencent.com>
Subject: Re: [PATCH v3 5/5] KVM: VMX: Handle preemption timer fastpath
Date: Mon, 27 Apr 2020 11:42:53 -0700 [thread overview]
Message-ID: <20200427184253.GR14870@linux.intel.com> (raw)
In-Reply-To: <1587709364-19090-6-git-send-email-wanpengli@tencent.com>
On Fri, Apr 24, 2020 at 02:22:44PM +0800, Wanpeng Li wrote:
> From: Wanpeng Li <wanpengli@tencent.com>
>
> This patch implements handle preemption timer fastpath, after timer fire
> due to VMX-preemption timer counts down to zero, handle it as soon as
> possible and vmentry immediately without checking various kvm stuff when
> possible.
>
> Testing on SKX Server.
>
> cyclictest in guest(w/o mwait exposed, adaptive advance lapic timer is default -1):
>
> 5540.5ns -> 4602ns 17%
>
> kvm-unit-test/vmexit.flat:
>
> w/o avanced timer:
> tscdeadline_immed: 2885 -> 2431.25 15.7%
> tscdeadline: 5668.75 -> 5188.5 8.4%
>
> w/ adaptive advance timer default -1:
> tscdeadline_immed: 2965.25 -> 2520 15.0%
> tscdeadline: 4663.75 -> 4537 2.7%
>
> Tested-by: Haiwei Li <lihaiwei@tencent.com>
> Cc: Haiwei Li <lihaiwei@tencent.com>
> Signed-off-by: Wanpeng Li <wanpengli@tencent.com>
> ---
> arch/x86/kvm/vmx/vmx.c | 16 ++++++++++++++++
> 1 file changed, 16 insertions(+)
>
> diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
> index d21b66b..028967a 100644
> --- a/arch/x86/kvm/vmx/vmx.c
> +++ b/arch/x86/kvm/vmx/vmx.c
> @@ -6560,12 +6560,28 @@ void vmx_update_host_rsp(struct vcpu_vmx *vmx, unsigned long host_rsp)
> }
> }
>
> +static enum exit_fastpath_completion handle_fastpath_preemption_timer(struct kvm_vcpu *vcpu)
Somewhat offtopic, would it make sense to add a fastpath_t typedef? These
enum lines are a bit long...
> +{
> + struct vcpu_vmx *vmx = to_vmx(vcpu);
> +
> + if (!vmx->req_immediate_exit &&
> + !unlikely(vmx->loaded_vmcs->hv_timer_soft_disabled)) {
Bad indentation.
Also, this is is identical to handle_preemption_timer(), why not something
like:
static bool __handle_preemption_timer(struct vcpu)
{
struct vcpu_vmx *vmx = to_vmx(vcpu);
if (!vmx->req_immediate_exit &&
!unlikely(vmx->loaded_vmcs->hv_timer_soft_disabled)) {
kvm_lapic_expired_hv_timer(vcpu);
return true;
}
return false;
}
static enum exit_fastpath_completion handle_fastpath_preemption_timer(struct kvm_vcpu *vcpu)
{
if (__handle_preemption_timer(vcpu))
return EXIT_FASTPATH_CONT_RUN;
return EXIT_FASTPATH_NONE;
}
static int handle_preemption_timer(struct kvm_vcpu *vcpu)
{
__handle_preemption_timer(vcpu);
return 1;
}
> + kvm_lapic_expired_hv_timer(vcpu);
> + trace_kvm_exit(EXIT_REASON_PREEMPTION_TIMER, vcpu, KVM_ISA_VMX);
> + return EXIT_FASTPATH_CONT_RUN;
> + }
> +
> + return EXIT_FASTPATH_NONE;
> +}
> +
> static enum exit_fastpath_completion vmx_exit_handlers_fastpath(struct kvm_vcpu *vcpu)
> {
> if (!is_guest_mode(vcpu) && vcpu->arch.apicv_active) {
> switch (to_vmx(vcpu)->exit_reason) {
> case EXIT_REASON_MSR_WRITE:
> return handle_fastpath_set_msr_irqoff(vcpu);
> + case EXIT_REASON_PREEMPTION_TIMER:
> + return handle_fastpath_preemption_timer(vcpu);
> default:
> return EXIT_FASTPATH_NONE;
> }
> --
> 2.7.4
>
next prev parent reply other threads:[~2020-04-27 18:42 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-24 6:22 [PATCH v3 0/5] KVM: VMX: Tscdeadline timer emulation fastpath Wanpeng Li
2020-04-24 6:22 ` [PATCH v3 1/5] KVM: VMX: Introduce generic fastpath handler Wanpeng Li
2020-04-27 18:26 ` Sean Christopherson
2020-04-28 0:47 ` Wanpeng Li
2020-04-24 6:22 ` [PATCH v3 2/5] KVM: X86: Introduce need_cancel_enter_guest helper Wanpeng Li
2020-04-26 2:05 ` Wanpeng Li
2020-04-27 18:36 ` Sean Christopherson
2020-04-28 0:44 ` Wanpeng Li
2020-04-28 1:03 ` Sean Christopherson
2020-04-27 18:30 ` Sean Christopherson
2020-04-28 7:17 ` Wanpeng Li
2020-04-24 6:22 ` [PATCH v3 3/5] KVM: VMX: Optimize posted-interrupt delivery for timer fastpath Wanpeng Li
2020-04-27 18:37 ` Sean Christopherson
2020-04-24 6:22 ` [PATCH v3 4/5] KVM: X86: TSCDEADLINE MSR emulation fastpath Wanpeng Li
2020-04-27 18:38 ` Sean Christopherson
2020-04-24 6:22 ` [PATCH v3 5/5] KVM: VMX: Handle preemption timer fastpath Wanpeng Li
2020-04-27 18:42 ` Sean Christopherson [this message]
2020-04-28 0:45 ` Wanpeng Li
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=20200427184253.GR14870@linux.intel.com \
--to=sean.j.christopherson@intel.com \
--cc=jmattson@google.com \
--cc=joro@8bytes.org \
--cc=kernellwp@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=lihaiwei@tencent.com \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=vkuznets@redhat.com \
--cc=wanpengli@tencent.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.