Kernel KVM virtualization development
 help / color / mirror / Atom feed
From: Dongli Zhang <dongli.zhang@oracle.com>
To: "Chen, Zide" <zide.chen@intel.com>,
	qemu-devel@nongnu.org, kvm@vger.kernel.org
Cc: pbonzini@redhat.com, zhao1.liu@intel.com, mtosatti@redhat.com,
	sandipan.das@amd.com, babu.moger@amd.com, likexu@tencent.com,
	like.xu.linux@gmail.com, groug@kaod.org, khorenko@virtuozzo.com,
	alexander.ivanov@virtuozzo.com, den@virtuozzo.com,
	davydov-max@yandex-team.ru, xiaoyao.li@intel.com,
	dapeng1.mi@linux.intel.com, joe.jin@oracle.com,
	ewanhai-oc@zhaoxin.com, ewanhai@zhaoxin.com
Subject: Re: [PATCH v8 7/7] target/i386/kvm: don't stop Intel PMU counters
Date: Wed, 7 Jan 2026 00:36:58 -0800	[thread overview]
Message-ID: <cbf5341e-a397-477a-9d5a-3a2305355539@oracle.com> (raw)
In-Reply-To: <d043ff42-9604-4acd-8341-830b30cba951@intel.com>

Hi Zide,

On 1/6/26 1:04 PM, Chen, Zide wrote:
> 
> 
> On 1/5/2026 12:24 PM, Dongli Zhang wrote:
>> Hi Zide,
>>
>> On 1/2/26 4:27 PM, Chen, Zide wrote:
>>>
>>>
>>> On 12/29/2025 11:42 PM, Dongli Zhang wrote:
>>>> PMU MSRs are set by QEMU only at levels >= KVM_PUT_RESET_STATE,
>>>> excluding runtime. Therefore, updating these MSRs without stopping events
>>>> should be acceptable.
>>>
>>> It seems preferable to keep the existing logic. The sequence of
>>> disabling -> setting new counters -> re-enabling is complete and
>>> reasonable. Re-enabling the PMU implicitly tell KVM to do whatever
>>> actions are needed to make the new counters take effect.
>>>
>>> If the purpose of this patch to improve performance, given that this is
>>> a non-critical path, trading this clear and robust logic for a minor
>>> performance gain does not seem necessary.
>>>
>>>
>>>> In addition, KVM creates kernel perf events with host mode excluded
>>>> (exclude_host = 1). While the events remain active, they don't increment
>>>> the counter during QEMU vCPU userspace mode.
>>>>
>>>> Finally, The kvm_put_msrs() sets the MSRs using KVM_SET_MSRS. The x86 KVM
>>>> processes these MSRs one by one in a loop, only saving the config and
>>>> triggering the KVM_REQ_PMU request. This approach does not immediately stop
>>>> the event before updating PMC. This approach is true since Linux kernel
>>>> commit 68fb4757e867 ("KVM: x86/pmu: Defer reprogram_counter() to
>>>> kvm_pmu_handle_event"), that is, v6.2.
>>>
>>> This seems to assume KVM's internal behavior. While that is true today
>>> (and possibly in the future), it’s not necessary for QEMU to  make such
>>> assumptions, as that could unnecessarily limit KVM’s flexibility to
>>> change its behavior later.
>>>
>>
>> To "assume KVM's internal behavior" is only one of the two reasons. The first
>> reason is that QEMU controls the state of the vCPU to ensure this action only
>> occurs when "levels >= KVM_PUT_RESET_STATE."
>>
>> Thanks to "(level >= KVM_PUT_RESET_STATE)", QEMU is able to avoid unnecessary
>> updates to many MSR registers during runtime.
>>
>>
>> The main objective is to sync the implementation for Intel and AMD.
>>
>> Both MSR_CORE_PERF_FIXED_CTR_CTRL and MSR_CORE_PERF_GLOBAL_CTRL are reset to
>> zero only in the case where "has_pmu_version > 1." Otherwise, we may need to
>> reset the MSR_P6_PERFCTR_N registers before writing to the counter registers.
>> Without PATCH 7/7, an additional patch will be required to fix the workflow for
>> handling PMU registers to reset control registers before counter registers.
> 
> I might be missing something here, but since this is not for runtime,
> I don’t quite understand the need to reset the control registers.

Global control registers take priority over per-counter control registers. If a
counter is disabled by the global register, enabling it in the per-counter
control register will have no effect.

However, assuming !(has_architectural_pmu_version > 1), which is highly unlikely
in modern systems, there will be no support for the global register.

As a result, QEMU should:

1. Set the control register to 0 for each counter.
2. Write to the counter.
3. Write to the control register.

From the KVM source code, the minimum version is 2, although QEMU assumes any
version can be utilized.


> 
>> If the plan is to maintain the current logic, we may need to adjust the logic
>> for the AMD registers as well. In PATCH 6/7, we never reset global registers
>> before writing to control and counter registers.
>>
>> Would you mine sharing your thoughts on it?
> 
> Personally, I would lean towards keeping the current logic and instead
> adjusting patch 6/7 to reset the global registers.  This is just my
> view, and please don’t feel obligated to follow it.
> 

It just seems odd to me that we would need to emulate PMU MSR usage in a VM,
i.e., stop all counters in the global registers at the beginning, when they
won't actually take effect.

Perhaps other reviewers have some insights?

Thank you very much!

Dongli Zhang


      reply	other threads:[~2026-01-07  8:37 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-30  7:42 [PATCH v8 0/7] target/i386/kvm/pmu: PMU Enhancement, Bugfix and Cleanup Dongli Zhang
2025-12-30  7:42 ` [PATCH v8 1/7] target/i386/kvm: set KVM_PMU_CAP_DISABLE if "-pmu" is configured Dongli Zhang
2026-10-01  8:32   ` Michael Tokarev
2026-10-01  8:54     ` Sandipan Das
2026-10-01 10:00       ` Michael Tokarev
2026-10-01 10:43         ` Sandipan Das
2026-10-01 11:05           ` Michael Tokarev
2026-10-01 11:12             ` Sandipan Das
2026-10-06  8:41               ` Sandipan Das
2026-10-07  0:51                 ` Dongli Zhang
2025-12-30  7:42 ` [PATCH v8 2/7] target/i386/kvm: extract unrelated code out of kvm_x86_build_cpuid() Dongli Zhang
2025-12-30  7:42 ` [PATCH v8 3/7] target/i386/kvm: rename architectural PMU variables Dongli Zhang
2025-12-30  7:42 ` [PATCH v8 4/7] target/i386/kvm: query kvm.enable_pmu parameter Dongli Zhang
2026-01-02 22:59   ` Chen, Zide
2026-01-05 20:21     ` Dongli Zhang
2026-01-06 21:03       ` Chen, Zide
2026-01-07  8:05         ` Dongli Zhang
2026-01-07 18:09           ` Chen, Zide
2025-12-30  7:42 ` [PATCH v8 5/7] target/i386/kvm: reset AMD PMU registers during VM reset Dongli Zhang
2025-12-30  7:42 ` [PATCH v8 6/7] target/i386/kvm: support perfmon-v2 for reset Dongli Zhang
2025-12-30  7:42 ` [PATCH v8 7/7] target/i386/kvm: don't stop Intel PMU counters Dongli Zhang
2026-01-03  0:27   ` Chen, Zide
2026-01-05 20:24     ` Dongli Zhang
2026-01-06 21:04       ` Chen, Zide
2026-01-07  8:36         ` Dongli Zhang [this message]

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=cbf5341e-a397-477a-9d5a-3a2305355539@oracle.com \
    --to=dongli.zhang@oracle.com \
    --cc=alexander.ivanov@virtuozzo.com \
    --cc=babu.moger@amd.com \
    --cc=dapeng1.mi@linux.intel.com \
    --cc=davydov-max@yandex-team.ru \
    --cc=den@virtuozzo.com \
    --cc=ewanhai-oc@zhaoxin.com \
    --cc=ewanhai@zhaoxin.com \
    --cc=groug@kaod.org \
    --cc=joe.jin@oracle.com \
    --cc=khorenko@virtuozzo.com \
    --cc=kvm@vger.kernel.org \
    --cc=like.xu.linux@gmail.com \
    --cc=likexu@tencent.com \
    --cc=mtosatti@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=sandipan.das@amd.com \
    --cc=xiaoyao.li@intel.com \
    --cc=zhao1.liu@intel.com \
    --cc=zide.chen@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox