public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* [kvm-unit-tests Patch v3 00/11] pmu test bugs fix and improvements
@ 2024-01-03  3:13 Dapeng Mi
  2024-01-03  3:13 ` [kvm-unit-tests Patch v3 01/11] x86: pmu: Remove duplicate code in pmu_init() Dapeng Mi
                   ` (11 more replies)
  0 siblings, 12 replies; 38+ messages in thread
From: Dapeng Mi @ 2024-01-03  3:13 UTC (permalink / raw)
  To: Sean Christopherson, Paolo Bonzini, Jim Mattson
  Cc: kvm, linux-kernel, Zhenyu Wang, Zhang Xiong, Mingwei Zhang,
	Like Xu, Jinrong Liang, Dapeng Mi, Dapeng Mi

When running pmu test on Sapphire Rapids, we found sometimes pmu test
reports the following failures.

1. FAIL: Intel: all counters
2. FAIL: Intel: core cycles-0
3. FAIL: Intel: llc misses-4

Further investigation shows these failures are all false alarms rather
than real vPMU issues.

The failure 1 is caused by a bug in check_counters_many() which defines
a cnt[] array with length 10. On Sapphire Rapids KVM supports 8 GP
counters and 3 fixed counters, obviously the total counter number (11)
of Sapphire Rapids exceed current cnt[] length 10, it would cause a out
of memory access and lead to the "all counters" false alarm. Patch
02~03 would fix this issue.

The failure 2 is caused by pipeline and cache warm-up latency.
Currently "core cycles" is the first executed event. When the measured
loop() program is executed at the first time, cache hierarchy and pipeline
are needed to warm up. All these warm-up work consumes so much cycles
that it exceeds the predefined upper boundary and cause the failure.
Patch 04 fixes this issue.

The failure 3 is caused by 0 llc misses count. It's possible and
reasonable that there is no llc misses happened for such simple loop()
asm blob especially along with larger and larger LLC size on new
processors. Patch 09 would fix this issue by introducing clflush
instruction to force LLC miss.

Besides above bug fixes, this patch series also includes several
optimizations.

One important optimization (patch 07~08) is to move
GLOBAL_CTRL enabling/disabling into the loop asm blob, so the precise
count for instructions and branches events can be measured and the
verification can be done against the precise count instead of the rough
count range. This improves the verification accuracy.

Another important optimization (patch 10~11) is to leverage IBPB command
to force to trigger a branch miss, so the lower boundary of branch miss
event can be set to 1 instead of the ambiguous 0. This eliminates the
ambiguity brought from 0.

All these changes are tested on Intel Sapphire Rapids server platform
and the pmu test passes. Since I have no AMD platforms on my hand, these
changes are not verified on AMD platforms yet. If someone can help to
verify these changes on AMD platforms, it's welcome and appreciated.

Changes:
  v2 -> v3:
        fix "core cycles" failure,
        introduce precise verification for instructions/branches,
        leverage IBPB command to optimize branch misses verification,
        drop v2 introduced slots event verification
  v1 -> v2:
        introduce clflush to optimize llc misses verification
        introduce rdrand to optimize branch misses verification

History:
  v2: https://lore.kernel.org/lkml/20231031092921.2885109-1-dapeng1.mi@linux.intel.com/
  v1: https://lore.kernel.org/lkml/20231024075748.1675382-1-dapeng1.mi@linux.intel.com/

Dapeng Mi (10):
  x86: pmu: Enlarge cnt[] length to 64 in check_counters_many()
  x86: pmu: Add asserts to warn inconsistent fixed events and counters
  x86: pmu: Switch instructions and core cycles events sequence
  x86: pmu: Refine fixed_events[] names
  x86: pmu: Remove blank line and redundant space
  x86: pmu: Enable and disable PMCs in loop() asm blob
  x86: pmu: Improve instruction and branches events verification
  x86: pmu: Improve LLC misses event verification
  x86: pmu: Add IBPB indirect jump asm blob
  x86: pmu: Improve branch misses event verification

Xiong Zhang (1):
  x86: pmu: Remove duplicate code in pmu_init()

 lib/x86/pmu.c |   5 --
 x86/pmu.c     | 201 ++++++++++++++++++++++++++++++++++++++++++--------
 2 files changed, 171 insertions(+), 35 deletions(-)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 38+ messages in thread

end of thread, other threads:[~2024-04-09  0:29 UTC | newest]

Thread overview: 38+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-03  3:13 [kvm-unit-tests Patch v3 00/11] pmu test bugs fix and improvements Dapeng Mi
2024-01-03  3:13 ` [kvm-unit-tests Patch v3 01/11] x86: pmu: Remove duplicate code in pmu_init() Dapeng Mi
2024-03-28  1:19   ` Yang, Weijiang
2024-03-28  1:21     ` Mi, Dapeng
2024-01-03  3:14 ` [kvm-unit-tests Patch v3 02/11] x86: pmu: Enlarge cnt[] length to 64 in check_counters_many() Dapeng Mi
2024-03-25 21:41   ` Jim Mattson
2024-03-27  6:40     ` Mi, Dapeng
2024-01-03  3:14 ` [kvm-unit-tests Patch v3 03/11] x86: pmu: Add asserts to warn inconsistent fixed events and counters Dapeng Mi
2024-03-27  5:30   ` Mingwei Zhang
2024-03-27  6:43     ` Mi, Dapeng
2024-03-27 13:11   ` Jim Mattson
2024-03-28  9:29     ` Mi, Dapeng
2024-01-03  3:14 ` [kvm-unit-tests Patch v3 04/11] x86: pmu: Switch instructions and core cycles events sequence Dapeng Mi
2024-03-27  5:36   ` Mingwei Zhang
2024-03-27  8:54     ` Mi, Dapeng
2024-03-27 17:06       ` Mingwei Zhang
2024-03-28 10:09         ` Mi, Dapeng
2024-01-03  3:14 ` [kvm-unit-tests Patch v3 05/11] x86: pmu: Refine fixed_events[] names Dapeng Mi
2024-03-27  5:38   ` Mingwei Zhang
2024-01-03  3:14 ` [kvm-unit-tests Patch v3 06/11] x86: pmu: Remove blank line and redundant space Dapeng Mi
2024-03-27  5:38   ` Mingwei Zhang
2024-03-28  1:23   ` Yang, Weijiang
2024-03-28 10:12     ` Mi, Dapeng
2024-01-03  3:14 ` [kvm-unit-tests Patch v3 07/11] x86: pmu: Enable and disable PMCs in loop() asm blob Dapeng Mi
2024-03-27  6:07   ` Mingwei Zhang
2024-03-27  8:55     ` Mi, Dapeng
2024-04-08 23:17       ` Mingwei Zhang
2024-04-09  0:28         ` Mi, Dapeng
2024-01-03  3:14 ` [kvm-unit-tests Patch v3 08/11] x86: pmu: Improve instruction and branches events verification Dapeng Mi
2024-03-27  6:14   ` Mingwei Zhang
2024-03-27  8:59     ` Mi, Dapeng
2024-01-03  3:14 ` [kvm-unit-tests Patch v3 09/11] x86: pmu: Improve LLC misses event verification Dapeng Mi
2024-03-27  6:23   ` Mingwei Zhang
2024-03-27  9:18     ` Mi, Dapeng
2024-03-27 15:20   ` Yang, Weijiang
2024-01-03  3:14 ` [kvm-unit-tests Patch v3 10/11] x86: pmu: Add IBPB indirect jump asm blob Dapeng Mi
2024-01-03  3:14 ` [kvm-unit-tests Patch v3 11/11] x86: pmu: Improve branch misses event verification Dapeng Mi
2024-01-24  8:18 ` [kvm-unit-tests Patch v3 00/11] pmu test bugs fix and improvements Mi, Dapeng

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox