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] i386/kvm: add support for KVM_CAP_X86_DISABLE_EXITS
Date: Tue, 27 Mar 2018 22:42:56 +0300 [thread overview]
Message-ID: <20180327224058-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <1521211002-4529-1-git-send-email-wanpengli@tencent.com>
On Fri, Mar 16, 2018 at 07:36:42AM -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/kvm.c | 12 ++++++++++++
> 2 files changed, 17 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/kvm.c b/target/i386/kvm.c
> index d23fff1..95ed9eb 100644
> --- a/target/i386/kvm.c
> +++ b/target/i386/kvm.c
> @@ -999,6 +999,18 @@ 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 (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);
Why not a bit per capability?
I can see how someone might want to disable mwait exists
but not the rest of them.
> --
> 2.7.4
WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Wanpeng Li <kernellwp@gmail.com>
Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Radim Krčmář" <rkrcmar@redhat.com>,
"Eduardo Habkost" <ehabkost@redhat.com>
Subject: Re: [Qemu-devel] [PATCH] i386/kvm: add support for KVM_CAP_X86_DISABLE_EXITS
Date: Tue, 27 Mar 2018 22:42:56 +0300 [thread overview]
Message-ID: <20180327224058-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <1521211002-4529-1-git-send-email-wanpengli@tencent.com>
On Fri, Mar 16, 2018 at 07:36:42AM -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/kvm.c | 12 ++++++++++++
> 2 files changed, 17 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/kvm.c b/target/i386/kvm.c
> index d23fff1..95ed9eb 100644
> --- a/target/i386/kvm.c
> +++ b/target/i386/kvm.c
> @@ -999,6 +999,18 @@ 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 (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);
Why not a bit per capability?
I can see how someone might want to disable mwait exists
but not the rest of them.
> --
> 2.7.4
next prev parent reply other threads:[~2018-03-27 19:42 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-16 14:36 [PATCH] i386/kvm: add support for KVM_CAP_X86_DISABLE_EXITS Wanpeng Li
2018-03-16 14:36 ` [Qemu-devel] " Wanpeng Li
2018-03-16 14:41 ` no-reply
2018-03-16 14:41 ` [Qemu-devel] " no-reply
2018-03-16 14:58 ` Wanpeng Li
2018-03-16 14:58 ` [Qemu-devel] " Wanpeng Li
2018-03-16 15:22 ` Paolo Bonzini
2018-03-16 15:22 ` [Qemu-devel] " Paolo Bonzini
2018-03-23 20:18 ` Eduardo Habkost
2018-03-23 20:18 ` [Qemu-devel] " Eduardo Habkost
2018-03-25 3:33 ` Wanpeng Li
2018-03-25 3:33 ` [Qemu-devel] " Wanpeng Li
2018-03-26 19:43 ` Eduardo Habkost
2018-03-26 19:43 ` [Qemu-devel] " Eduardo Habkost
2018-04-10 9:43 ` Wanpeng Li
2018-04-10 9:43 ` [Qemu-devel] " Wanpeng Li
2018-03-27 19:42 ` Michael S. Tsirkin [this message]
2018-03-27 19:42 ` Michael S. Tsirkin
2018-03-27 21:36 ` Eduardo Habkost
2018-03-27 21:36 ` [Qemu-devel] " Eduardo Habkost
2018-03-28 0:06 ` Michael S. Tsirkin
2018-03-28 0:06 ` [Qemu-devel] " Michael S. Tsirkin
2018-03-28 18:31 ` Eduardo Habkost
2018-03-28 18:31 ` [Qemu-devel] " Eduardo Habkost
2018-03-28 21:43 ` Michael S. Tsirkin
2018-03-28 21:43 ` [Qemu-devel] " Michael S. Tsirkin
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=20180327224058-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.