All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dapeng Mi <dapeng1.mi@linux.intel.com>
To: Sean Christopherson <seanjc@google.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
	Jim Mattson <jmattson@google.com>,
	Mingwei Zhang <mizhang@google.com>,
	Xiong Zhang <xiong.y.zhang@intel.com>,
	Zhenyu Wang <zhenyuw@linux.intel.com>,
	Like Xu <like.xu.linux@gmail.com>,
	Jinrong Liang <cloudliang@tencent.com>,
	Yongwei Ma <yongwei.ma@intel.com>,
	Dapeng Mi <dapeng1.mi@intel.com>,
	Dapeng Mi <dapeng1.mi@linux.intel.com>
Subject: [kvm-unit-tests patch v6 17/18] x86: pmu: Adjust lower boundary of branch-misses event
Date: Sat, 14 Sep 2024 10:17:27 +0000	[thread overview]
Message-ID: <20240914101728.33148-18-dapeng1.mi@linux.intel.com> (raw)
In-Reply-To: <20240914101728.33148-1-dapeng1.mi@linux.intel.com>

Since the IBPB command is added to force to trigger a branch miss at
least, the lower boundary of branch misses event is increased to 1 by
default. For these CPUs without IBPB support, adjust dynamically the
lower boundary to 0 to avoid false positive.

Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com>
---
 x86/pmu.c | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/x86/pmu.c b/x86/pmu.c
index 279d418d..c7848fd1 100644
--- a/x86/pmu.c
+++ b/x86/pmu.c
@@ -90,12 +90,12 @@ struct pmu_event {
 	{"llc references", 0x4f2e, 1, 2*N},
 	{"llc misses", 0x412e, 1, 1*N},
 	{"branches", 0x00c4, 1*N, 1.1*N},
-	{"branch misses", 0x00c5, 0, 0.1*N},
+	{"branch misses", 0x00c5, 1, 0.1*N},
 }, amd_gp_events[] = {
 	{"core cycles", 0x0076, 1*N, 50*N},
 	{"instructions", 0x00c0, 10*N, 10.2*N},
 	{"branches", 0x00c2, 1*N, 1.1*N},
-	{"branch misses", 0x00c3, 0, 0.1*N},
+	{"branch misses", 0x00c3, 1, 0.1*N},
 }, fixed_events[] = {
 	{"fixed 0", MSR_CORE_PERF_FIXED_CTR0, 10*N, 10.2*N},
 	{"fixed 1", MSR_CORE_PERF_FIXED_CTR0 + 1, 1*N, 30*N},
@@ -111,6 +111,7 @@ enum {
 	INTEL_REF_CYCLES_IDX	= 2,
 	INTEL_LLC_MISSES_IDX	= 4,
 	INTEL_BRANCHES_IDX	= 5,
+	INTEL_BRANCH_MISS_IDX	= 6,
 };
 
 /*
@@ -120,6 +121,7 @@ enum {
 enum {
 	AMD_INSTRUCTIONS_IDX    = 1,
 	AMD_BRANCHES_IDX	= 2,
+	AMD_BRANCH_MISS_IDX	= 3,
 };
 
 char *buf;
@@ -184,7 +186,8 @@ static inline void loop(u64 cntrs)
 }
 
 static void adjust_events_range(struct pmu_event *gp_events,
-				int instruction_idx, int branch_idx)
+				int instruction_idx, int branch_idx,
+				int branch_miss_idx)
 {
 	/*
 	 * If HW supports GLOBAL_CTRL MSR, enabling and disabling PMCs are
@@ -205,6 +208,17 @@ static void adjust_events_range(struct pmu_event *gp_events,
 		gp_events[branch_idx].min = LOOP_BRANCHES;
 		gp_events[branch_idx].max = LOOP_BRANCHES;
 	}
+
+	/*
+	 * For CPUs without IBPB support, no way to force to trigger a
+	 * branch miss and the measured branch misses is possible to be
+	 * 0. Thus overwrite the lower boundary of branch misses event
+	 * to 0 to avoid false positive.
+	 */
+	if (!has_ibpb()) {
+		/* branch misses event */
+		gp_events[branch_miss_idx].min = 0;
+	}
 }
 
 volatile uint64_t irq_received;
@@ -918,6 +932,7 @@ int main(int ac, char **av)
 {
 	int instruction_idx;
 	int branch_idx;
+	int branch_miss_idx;
 
 	setup_vm();
 	handle_irq(PMI_VECTOR, cnt_overflow);
@@ -934,6 +949,7 @@ int main(int ac, char **av)
 		gp_events_size = sizeof(intel_gp_events)/sizeof(intel_gp_events[0]);
 		instruction_idx = INTEL_INSTRUCTIONS_IDX;
 		branch_idx = INTEL_BRANCHES_IDX;
+		branch_miss_idx = INTEL_BRANCH_MISS_IDX;
 
 		/*
 		 * For legacy Intel CPUS without clflush/clflushopt support,
@@ -950,9 +966,10 @@ int main(int ac, char **av)
 		gp_events = (struct pmu_event *)amd_gp_events;
 		instruction_idx = AMD_INSTRUCTIONS_IDX;
 		branch_idx = AMD_BRANCHES_IDX;
+		branch_miss_idx = AMD_BRANCH_MISS_IDX;
 		report_prefix_push("AMD");
 	}
-	adjust_events_range(gp_events, instruction_idx, branch_idx);
+	adjust_events_range(gp_events, instruction_idx, branch_idx, branch_miss_idx);
 
 	printf("PMU version:         %d\n", pmu.version);
 	printf("GP counters:         %d\n", pmu.nr_gp_counters);
-- 
2.40.1


  parent reply	other threads:[~2024-09-14  7:01 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-14 10:17 [kvm-unit-tests patch v6 00/18] pmu test bugs fix and improvements Dapeng Mi
2024-09-14 10:17 ` [kvm-unit-tests patch v6 01/18] x86: pmu: Remove duplicate code in pmu_init() Dapeng Mi
2024-09-14 10:17 ` [kvm-unit-tests patch v6 02/18] x86: pmu: Remove blank line and redundant space Dapeng Mi
2024-09-14 10:17 ` [kvm-unit-tests patch v6 03/18] x86: pmu: Refine fixed_events[] names Dapeng Mi
2024-09-14 10:17 ` [kvm-unit-tests patch v6 04/18] x86: pmu: Fix the issue that pmu_counter_t.config crosses cache line Dapeng Mi
2025-02-14 21:05   ` Sean Christopherson
2025-02-18  9:07     ` Mi, Dapeng
2024-09-14 10:17 ` [kvm-unit-tests patch v6 05/18] x86: pmu: Enlarge cnt[] length to 48 in check_counters_many() Dapeng Mi
2025-02-14 21:06   ` Sean Christopherson
2025-02-18  9:24     ` Mi, Dapeng
2025-02-18 15:56       ` Sean Christopherson
2024-09-14 10:17 ` [kvm-unit-tests patch v6 06/18] x86: pmu: Print measured event count if test fails Dapeng Mi
2024-09-14 10:17 ` [kvm-unit-tests patch v6 07/18] x86: pmu: Fix potential out of bound access for fixed events Dapeng Mi
2025-02-14 21:07   ` Sean Christopherson
2025-02-18  9:34     ` Mi, Dapeng
2025-02-18 15:04       ` Sean Christopherson
2024-09-14 10:17 ` [kvm-unit-tests patch v6 08/18] x86: pmu: Fix cycles event validation failure Dapeng Mi
2025-02-14 21:07   ` Sean Christopherson
2025-02-18  9:36     ` Mi, Dapeng
2024-09-14 10:17 ` [kvm-unit-tests patch v6 09/18] x86: pmu: Use macro to replace hard-coded branches event index Dapeng Mi
2024-09-14 10:17 ` [kvm-unit-tests patch v6 10/18] x86: pmu: Use macro to replace hard-coded ref-cycles " Dapeng Mi
2024-09-14 10:17 ` [kvm-unit-tests patch v6 11/18] x86: pmu: Use macro to replace hard-coded instructions " Dapeng Mi
2024-09-14 10:17 ` [kvm-unit-tests patch v6 12/18] x86: pmu: Enable and disable PMCs in loop() asm blob Dapeng Mi
2024-09-14 10:17 ` [kvm-unit-tests patch v6 13/18] x86: pmu: Improve instruction and branches events verification Dapeng Mi
2025-02-14 21:08   ` Sean Christopherson
2025-02-18  9:40     ` Mi, Dapeng
2024-09-14 10:17 ` [kvm-unit-tests patch v6 14/18] x86: pmu: Improve LLC misses event verification Dapeng Mi
2024-09-14 10:17 ` [kvm-unit-tests patch v6 15/18] x86: pmu: Adjust lower boundary of llc-misses event to 0 for legacy CPUs Dapeng Mi
2024-09-14 10:17 ` [kvm-unit-tests patch v6 16/18] x86: pmu: Add IBPB indirect jump asm blob Dapeng Mi
2024-09-14 10:17 ` Dapeng Mi [this message]
2025-02-14 21:09   ` [kvm-unit-tests patch v6 17/18] x86: pmu: Adjust lower boundary of branch-misses event Sean Christopherson
2025-02-18  9:42     ` Mi, Dapeng
2024-09-14 10:17 ` [kvm-unit-tests patch v6 18/18] x86: pmu: Optimize emulated instruction validation Dapeng Mi

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=20240914101728.33148-18-dapeng1.mi@linux.intel.com \
    --to=dapeng1.mi@linux.intel.com \
    --cc=cloudliang@tencent.com \
    --cc=dapeng1.mi@intel.com \
    --cc=jmattson@google.com \
    --cc=kvm@vger.kernel.org \
    --cc=like.xu.linux@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mizhang@google.com \
    --cc=pbonzini@redhat.com \
    --cc=seanjc@google.com \
    --cc=xiong.y.zhang@intel.com \
    --cc=yongwei.ma@intel.com \
    --cc=zhenyuw@linux.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 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.