From: Sean Christopherson <seanjc@google.com>
To: lirongqing <lirongqing@baidu.com>
Cc: pbonzini@redhat.com, vkuznets@redhat.com, tglx@linutronix.de,
mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com,
x86@kernel.org, hpa@zytor.com, kvm@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] x86/kvm: Reorder PV spinlock checks for dedicated CPU case
Date: Fri, 18 Jul 2025 07:12:43 -0700 [thread overview]
Message-ID: <aHpWW0ZPuI5thDqZ@google.com> (raw)
In-Reply-To: <20250718094936.5283-1-lirongqing@baidu.com>
On Fri, Jul 18, 2025, lirongqing wrote:
> From: Li RongQing <lirongqing@baidu.com>
>
> When a vCPU has a dedicated physical CPU, typically, the hypervisor
> disables the HLT exit too,
But certainly not always. E.g. the hypervisor may disable MWAIT exiting but not
HLT exiting, so that the hypervisor can take action if a guest kernel refuses to
use MWAIT for whatever reason.
I assume native qspinlocks outperform virt_spin_lock() irrespective of HLT exiting
when the vCPU has a dedicated pCPU? If so, it's probably worth calling that out
in the changelog, e.g. to assuage any fears/concerns about this being undesirable
for setups with KVM_HINTS_REALTIME *and* KVM_FEATURE_PV_UNHALT.
> rendering the KVM_FEATURE_PV_UNHALT feature unavailable, and
> virt_spin_lock_key is expected to be disabled in this configuration, but:
>
> The problematic execution flow caused the enabled virt_spin_lock_key:
> - First check PV_UNHALT
> - Then check dedicated CPUs
>
> So change the order:
> - First check dedicated CPUs
> - Then check PV_UNHALT
>
> This ensures virt_spin_lock_key is disable when dedicated physical
> CPUs are available and HLT exit is disabled, and this will gives a
> pretty performance boost at high contention level
>
> Signed-off-by: Li RongQing <lirongqing@baidu.com>
> ---
> arch/x86/kernel/kvm.c | 20 ++++++++++----------
> 1 file changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
> index 921c1c7..9cda79f 100644
> --- a/arch/x86/kernel/kvm.c
> +++ b/arch/x86/kernel/kvm.c
> @@ -1073,16 +1073,6 @@ static void kvm_wait(u8 *ptr, u8 val)
> void __init kvm_spinlock_init(void)
> {
> /*
> - * In case host doesn't support KVM_FEATURE_PV_UNHALT there is still an
> - * advantage of keeping virt_spin_lock_key enabled: virt_spin_lock() is
> - * preferred over native qspinlock when vCPU is preempted.
> - */
> - if (!kvm_para_has_feature(KVM_FEATURE_PV_UNHALT)) {
> - pr_info("PV spinlocks disabled, no host support\n");
> - return;
> - }
> -
> - /*
> * Disable PV spinlocks and use native qspinlock when dedicated pCPUs
> * are available.
> */
> @@ -1101,6 +1091,16 @@ void __init kvm_spinlock_init(void)
> goto out;
> }
>
> + /*
> + * In case host doesn't support KVM_FEATURE_PV_UNHALT there is still an
> + * advantage of keeping virt_spin_lock_key enabled: virt_spin_lock() is
> + * preferred over native qspinlock when vCPU is preempted.
> + */
> + if (!kvm_para_has_feature(KVM_FEATURE_PV_UNHALT)) {
> + pr_info("PV spinlocks disabled, no host support\n");
> + return;
> + }
> +
> pr_info("PV spinlocks enabled\n");
>
> __pv_init_lock_hash();
> --
> 2.9.4
>
next prev parent reply other threads:[~2025-07-18 14:12 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-18 9:49 [PATCH] x86/kvm: Reorder PV spinlock checks for dedicated CPU case lirongqing
2025-07-18 14:12 ` Sean Christopherson [this message]
2025-07-21 2:26 ` 答复: [????] " Li,Rongqing
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=aHpWW0ZPuI5thDqZ@google.com \
--to=seanjc@google.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=hpa@zytor.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lirongqing@baidu.com \
--cc=mingo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=tglx@linutronix.de \
--cc=vkuznets@redhat.com \
--cc=x86@kernel.org \
/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.