From: "Michael S. Tsirkin" <mst@redhat.com>
To: Wanpeng Li <kernellwp@gmail.com>
Cc: "Paolo Bonzini" <pbonzini@redhat.com>,
"Eduardo Habkost" <ehabkost@redhat.com>,
qemu-devel@nongnu.org, kvm@vger.kernel.org,
"Radim Krčmář" <rkrcmar@redhat.com>
Subject: Re: [PATCH RESEND v2] i386/kvm: add support for KVM_CAP_X86_DISABLE_EXITS
Date: Tue, 17 Apr 2018 21:08:23 +0300 [thread overview]
Message-ID: <20180417201904-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <1523953455-28053-1-git-send-email-wanpengli@tencent.com>
On Tue, Apr 17, 2018 at 01:24:15AM -0700, Wanpeng Li wrote:
> From: Wanpeng Li <wanpengli@tencent.com>
>
> This patch adds support for KVM_CAP_X86_DISABLE_EXITS. Provides userspace with
> per-VM capability(KVM_CAP_X86_DISABLE_EXITS) to not intercept MWAIT/HLT/PAUSE
> in order that to improve latency in some workloads.
>
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: Radim Krčmář <rkrcmar@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Wanpeng Li <wanpengli@tencent.com>
> ---
>
> linux-headers/linux/kvm.h | 6 +++++-
> target/i386/cpu.h | 2 ++
> target/i386/kvm.c | 16 ++++++++++++++++
> 3 files changed, 23 insertions(+), 1 deletion(-)
>
> diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h
> index a167be8..857df15 100644
> --- a/linux-headers/linux/kvm.h
> +++ b/linux-headers/linux/kvm.h
> @@ -925,7 +925,7 @@ struct kvm_ppc_resize_hpt {
> #define KVM_CAP_S390_GS 140
> #define KVM_CAP_S390_AIS 141
> #define KVM_CAP_SPAPR_TCE_VFIO 142
> -#define KVM_CAP_X86_GUEST_MWAIT 143
> +#define KVM_CAP_X86_DISABLE_EXITS 143
> #define KVM_CAP_ARM_USER_IRQ 144
> #define KVM_CAP_S390_CMMA_MIGRATION 145
> #define KVM_CAP_PPC_FWNMI 146
> @@ -1508,6 +1508,10 @@ struct kvm_assigned_msix_entry {
> #define KVM_X2APIC_API_USE_32BIT_IDS (1ULL << 0)
> #define KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK (1ULL << 1)
>
> +#define KVM_X86_DISABLE_EXITS_MWAIT (1 << 0)
> +#define KVM_X86_DISABLE_EXITS_HLT (1 << 1)
> +#define KVM_X86_DISABLE_EXITS_PAUSE (1 << 2)
> +
> /* Available with KVM_CAP_ARM_USER_IRQ */
>
> /* Bits for run->s.regs.device_irq_level */
> diff --git a/target/i386/cpu.h b/target/i386/cpu.h
> index 1b219fa..965de1b 100644
> --- a/target/i386/cpu.h
> +++ b/target/i386/cpu.h
> @@ -685,6 +685,8 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS];
> #define CPUID_7_0_EDX_AVX512_4FMAPS (1U << 3) /* AVX512 Multiply Accumulation Single Precision */
> #define CPUID_7_0_EDX_SPEC_CTRL (1U << 26) /* Speculation Control */
>
> +#define KVM_PV_UNHALT (1U << 7)
> +
Why don't we use KVM_FEATURE_PV_UNHALT from kvm_para.h?
> #define KVM_HINTS_DEDICATED (1U << 0)
>
BTW I wonder whether we should switch to a value from
kvm_para.h? I'll send a version to do it, pls take a look.
> #define CPUID_8000_0008_EBX_IBPB (1U << 12) /* Indirect Branch Prediction Barrier */
> diff --git a/target/i386/kvm.c b/target/i386/kvm.c
> index 6c49954..3e99830 100644
> --- a/target/i386/kvm.c
> +++ b/target/i386/kvm.c
> @@ -1029,6 +1029,22 @@ int kvm_arch_init_vcpu(CPUState *cs)
> }
> }
>
> + if (env->features[FEAT_KVM_HINTS] & KVM_HINTS_DEDICATED) {
> + int disable_exits = kvm_check_extension(cs->kvm_state, KVM_CAP_X86_DISABLE_EXITS);
> +
> + if (disable_exits) {
> + disable_exits &= (KVM_X86_DISABLE_EXITS_MWAIT |
> + KVM_X86_DISABLE_EXITS_HLT |
> + KVM_X86_DISABLE_EXITS_PAUSE);
> + if (env->user_features[FEAT_KVM] & KVM_PV_UNHALT) {
> + disable_exits &= ~KVM_X86_DISABLE_EXITS_HLT;
> + }
> + }
> + if (kvm_vm_enable_cap(cs->kvm_state, KVM_CAP_X86_DISABLE_EXITS, 0, disable_exits)) {
> + error_report("kvm: DISABLE EXITS not supported");
> + }
> + }
> +
> qemu_add_vm_change_state_handler(cpu_update_state, env);
>
> c = cpuid_find_entry(&cpuid_data.cpuid, 1, 0);
> --
> 2.7.4
next prev parent reply other threads:[~2018-04-17 18:08 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-17 8:24 [PATCH RESEND v2] i386/kvm: add support for KVM_CAP_X86_DISABLE_EXITS Wanpeng Li
2018-04-17 8:28 ` no-reply
2018-04-17 18:08 ` Michael S. Tsirkin [this message]
2018-04-18 1:09 ` Wanpeng Li
2018-05-11 21:57 ` Michael S. Tsirkin
2018-05-12 0:49 ` Wanpeng Li
2018-04-17 20:59 ` Eduardo Habkost
2018-04-18 1:20 ` Wanpeng Li
2018-04-19 15:48 ` Paolo Bonzini
2018-04-19 19:56 ` Eduardo Habkost
2018-04-19 21:32 ` Paolo Bonzini
2018-04-19 21:53 ` Eduardo Habkost
2018-05-11 22:12 ` Michael S. Tsirkin
2018-05-16 12:34 ` Eduardo Habkost
2018-05-16 14:26 ` Michael S. Tsirkin
2018-05-17 17:34 ` Eduardo Habkost
2018-05-17 17:57 ` Michael S. Tsirkin
2018-05-17 18:18 ` Eduardo Habkost
2018-05-16 12:44 ` Paolo Bonzini
2018-05-16 14:22 ` Michael S. Tsirkin
2018-05-16 15:04 ` Paolo Bonzini
2018-05-16 15:13 ` Michael S. Tsirkin
2018-05-16 15:33 ` Eduardo Habkost
2018-05-16 16:21 ` Michael S. Tsirkin
2018-05-16 17:20 ` Eduardo Habkost
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=20180417201904-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=ehabkost@redhat.com \
--cc=kernellwp@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rkrcmar@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.