From nobody Thu Oct 2 04:47:05 2025 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 577BA27934B for ; Tue, 23 Sep 2025 04:19:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758601182; cv=none; b=cuinlR00tuofr0IPoB+f9ucb7Q7WQ5l0q2BnMatSI8h3s5pttdwIzZyKAwGLeQOvo4d3QLIzP0ihnaUSgjDXL06BpEBzXpCGTlkg5YmWY6vbCapi9uLE2FBpYgBh0Cz0P8Xw0OUCxmGEjeLGineImVsLP7D5wY8hwnRGhcpWB4k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758601182; c=relaxed/simple; bh=J/njVxYCDEmbW4+z7frkDxwUpOtGcRaj4HsDxiGSg7g=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=WJ3WVLvmvOyTSengtCz2b6pvOPaAPbcS2G7rgwO+QwpL4lum2XWJxHgCXJMbjzwfR1qR7Wh8e741zSdMPTY8FLGEu2cac1YE51FpErmu2JiYIIUeCw573nS66oOkEPi8VIb1MC3B6ari6Sqdscje5SbWwnxTMFM9tuax09sIiz0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=aUaQ7y9H; arc=none smtp.client-ip=209.85.215.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="aUaQ7y9H" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b54df707c1cso3142162a12.2 for ; Mon, 22 Sep 2025 21:19:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1758601180; x=1759205980; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=mqGe0PNL9mmdDtMTbjwPoyqHqrWIwFj8Nxxf5qA3690=; b=aUaQ7y9HrJ/ixeW7Pq+kYgKyAod4s8lH8dDWm2S1LsGC2fgFIBGhu/n38FxucFj6Jv wjg28LpJiXRNvPU2mYulFEfjTz6xBmc4qI5kMbaBXx/RTL2enIxisnl5YlxFwgA5LQ5P dEF8//VVJgRqi494c22ga1dj74h8s+WRqtxjhPBQvhpz2DpQrywGpFt+oRUo+6wHkvIk 3Lo6y4ZbSXsQJ703utqTyuxa+rN/ph/jw6rwJfjYCoiVbPv+jmVT6NOj0mqVQBc7glKl 7VgCCt2os48YVH6L0NX/ukr9tn4ZzOavF5FbQDv8q5P3JYreuYJOHhra/uGNjl0+faGl zwbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758601180; x=1759205980; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=mqGe0PNL9mmdDtMTbjwPoyqHqrWIwFj8Nxxf5qA3690=; b=CYNySLq6nVAmjWOBJZpGta7YTaczI34vVv3VTQbx+BjBoe26+AGU9Dsyfq4/rAk7/u hwpcZfPM+R3SglL9A3h5C7ATkIYM6PCGo9ZtahbW6HHGoORQZoWZKRynVHR3b0u4ZBpB s0d9oYWBHYZdGxZG9eHy7IGlnY+EuejdHGyH95xhabH36l0oEiy9NnfMcdvZeqJ3PuUP 9jRr+B7uJO2NelzkcdtgDyycuTMZpDtaTJ7II3Mf7L02y4L5kmdo8H3gNPc/HGnGdDva Kq5uvo7BlXF6qpu67N/2pDRHE0EfLRkIXB3lNmy1ZmVX4hEIeTYgM3ioCXDxLCauq7pF guLw== X-Forwarded-Encrypted: i=1; AJvYcCVEXh5WK3WHQ7XjAfFhWjkrQbjFq79RGOG11UjqLtD1lnznC/E3ylsmiPmUaO7s87I0cMFXJmZy9Jt38qg=@vger.kernel.org X-Gm-Message-State: AOJu0YybOZXbrJZXyiowpwgYV6ajOcpR0DMJnv6Mu+QOczsyz/F3jvse u/xyW+VBbjee2Xq+iuMKREC+qtyD+XQ8myasOCNnhbZa21navXhkCQNIAEJsF4+yfpsNUezIrXn Bbjjlg8CNhA== X-Google-Smtp-Source: AGHT+IGWp2qzmdaD/9P+NZzg4BtuVDVcrbuR6Y4GJ3eU5LtzSkHc0WCx5dhdYZWvarADZIxi3DZGFesI+ygN X-Received: from pgci187.prod.google.com ([2002:a63:6dc4:0:b0:b4e:547e:d9bd]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:748a:b0:262:9461:2e5b with SMTP id adf61e73a8af0-2cffd6a334bmr1811288637.53.1758601179660; Mon, 22 Sep 2025 21:19:39 -0700 (PDT) Date: Mon, 22 Sep 2025 21:18:42 -0700 In-Reply-To: <20250923041844.400164-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250923041844.400164-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.534.gc79095c0ca-goog Message-ID: <20250923041844.400164-24-irogers@google.com> Subject: [PATCH v5 23/25] perf test parse-events: Without a PMU use cpu-cycles rather than cycles From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , Thomas Falcon , Andi Kleen , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, bpf@vger.kernel.org, Atish Patra , Beeman Strong , Leo Yan , Vince Weaver Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Without a PMU perf matches an event against any PMU with the event. Unfortunately some PMU drivers advertise a "cycles" event which is typically just a core event. Switch to using "cpu-cycles" which is an indentical legacy event but avoids the multiple PMU confusion introduced by the PMU drivers. Note, on x86 cpu-cycles is also a sysfs event but cycles isn't. Signed-off-by: Ian Rogers --- tools/perf/tests/parse-events.c | 57 +++++++++++++++++---------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-event= s.c index 4f197f34621b..8a48a671e593 100644 --- a/tools/perf/tests/parse-events.c +++ b/tools/perf/tests/parse-events.c @@ -585,9 +585,10 @@ static int test__checkevent_pmu(struct evlist *evlist) { =20 struct evsel *evsel =3D evlist__first(evlist); + struct perf_pmu *core_pmu =3D perf_pmus__find_core_pmu(); =20 TEST_ASSERT_VAL("wrong number of entries", 1 =3D=3D evlist->core.nr_entri= es); - TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW =3D=3D evsel->core.attr.type); + TEST_ASSERT_VAL("wrong type", core_pmu->type =3D=3D evsel->core.attr.type= ); TEST_ASSERT_VAL("wrong config", test_config(evsel, 10)); TEST_ASSERT_VAL("wrong config1", 1 =3D=3D evsel->core.attr.config1); TEST_ASSERT_VAL("wrong config2", 3 =3D=3D evsel->core.attr.config2); @@ -651,14 +652,14 @@ static int test__checkevent_pmu_name(struct evlist *e= vlist) =20 /* default_core/config=3D1,name=3Dkrava/u */ TEST_ASSERT_VAL("wrong number of entries", 2 =3D=3D evlist->core.nr_entri= es); - TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW =3D=3D evsel->core.attr.type); + TEST_ASSERT_VAL("wrong type", core_pmu->type =3D=3D evsel->core.attr.type= ); TEST_ASSERT_VAL("wrong config", 1 =3D=3D evsel->core.attr.config); TEST_ASSERT_VAL("wrong name", evsel__name_is(evsel, "krava")); =20 /* default_core/config=3D2/u" */ evsel =3D evsel__next(evsel); TEST_ASSERT_VAL("wrong number of entries", 2 =3D=3D evlist->core.nr_entri= es); - TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW =3D=3D evsel->core.attr.type); + TEST_ASSERT_VAL("wrong type", core_pmu->type =3D=3D evsel->core.attr.type= ); TEST_ASSERT_VAL("wrong config", 2 =3D=3D evsel->core.attr.config); snprintf(buf, sizeof(buf), "%s/config=3D2/u", core_pmu->name); TEST_ASSERT_VAL("wrong name", evsel__name_is(evsel, buf)); @@ -669,10 +670,11 @@ static int test__checkevent_pmu_name(struct evlist *e= vlist) static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evli= st) { struct evsel *evsel =3D evlist__first(evlist); + struct perf_pmu *core_pmu =3D perf_pmus__find_core_pmu(); =20 /* default_core/config=3D1,call-graph=3Dfp,time,period=3D100000/ */ TEST_ASSERT_VAL("wrong number of entries", 2 =3D=3D evlist->core.nr_entri= es); - TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW =3D=3D evsel->core.attr.type); + TEST_ASSERT_VAL("wrong type", core_pmu->type =3D=3D evsel->core.attr.type= ); TEST_ASSERT_VAL("wrong config", 1 =3D=3D evsel->core.attr.config); /* * The period, time and callgraph value gets configured within evlist__co= nfig, @@ -684,7 +686,7 @@ static int test__checkevent_pmu_partial_time_callgraph(= struct evlist *evlist) =20 /* default_core/config=3D2,call-graph=3Dno,time=3D0,period=3D2000/ */ evsel =3D evsel__next(evsel); - TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW =3D=3D evsel->core.attr.type); + TEST_ASSERT_VAL("wrong type", core_pmu->type =3D=3D evsel->core.attr.type= ); TEST_ASSERT_VAL("wrong config", 2 =3D=3D evsel->core.attr.config); /* * The period, time and callgraph value gets configured within evlist__co= nfig, @@ -700,11 +702,12 @@ static int test__checkevent_pmu_partial_time_callgrap= h(struct evlist *evlist) static int test__checkevent_pmu_events(struct evlist *evlist) { struct evsel *evsel; + struct perf_pmu *core_pmu =3D perf_pmus__find_core_pmu(); =20 TEST_ASSERT_VAL("wrong number of entries", 1 <=3D evlist->core.nr_entries= ); =20 evlist__for_each_entry(evlist, evsel) { - TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW =3D=3D evsel->core.attr.type= || + TEST_ASSERT_VAL("wrong type", core_pmu->type =3D=3D evsel->core.attr.typ= e || !strncmp(evsel__name(evsel), evsel->pmu->name, strlen(evsel->pmu->name))); TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); @@ -1603,7 +1606,7 @@ static int test__checkevent_complex_name(struct evlis= t *evlist) =20 TEST_ASSERT_VAL("wrong complex name parsing", evsel__name_is(evsel, - "COMPLEX_CYCLES_NAME:orig=3Dcycles,desc=3Dchip-clock-ticks")); + "COMPLEX_CYCLES_NAME:orig=3Dcpu-cycles,desc=3Dchip-clock-ticks"= )); return TEST_OK; } =20 @@ -1740,7 +1743,7 @@ static const struct evlist_test test__events[] =3D { /* 4 */ }, { - .name =3D "cycles/period=3D100000,config2/", + .name =3D "cpu-cycles/period=3D100000,config2/", .check =3D test__checkevent_symbolic_name_config, /* 5 */ }, @@ -1855,27 +1858,27 @@ static const struct evlist_test test__events[] =3D { /* 7 */ }, { - .name =3D "{instructions:k,cycles:upp}", + .name =3D "{instructions:k,cpu-cycles:upp}", .check =3D test__group1, /* 8 */ }, { - .name =3D "{faults:k,branches}:u,cycles:k", + .name =3D "{faults:k,branches}:u,cpu-cycles:k", .check =3D test__group2, /* 9 */ }, { - .name =3D "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycle= s,1:3}:G,instructions:u", + .name =3D "group1{syscalls:sys_enter_openat:H,cpu-cycles:kppp},group2{c= pu-cycles,1:3}:G,instructions:u", .check =3D test__group3, /* 0 */ }, { - .name =3D "{cycles:u,instructions:kp}:p", + .name =3D "{cpu-cycles:u,instructions:kp}:p", .check =3D test__group4, /* 1 */ }, { - .name =3D "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", + .name =3D "{cpu-cycles,instructions}:G,{cpu-cycles:G,instructions:G},cp= u-cycles", .check =3D test__group5, /* 2 */ }, @@ -1885,27 +1888,27 @@ static const struct evlist_test test__events[] =3D { /* 3 */ }, { - .name =3D "{cycles,cache-misses:G}:H", + .name =3D "{cpu-cycles,cache-misses:G}:H", .check =3D test__group_gh1, /* 4 */ }, { - .name =3D "{cycles,cache-misses:H}:G", + .name =3D "{cpu-cycles,cache-misses:H}:G", .check =3D test__group_gh2, /* 5 */ }, { - .name =3D "{cycles:G,cache-misses:H}:u", + .name =3D "{cpu-cycles:G,cache-misses:H}:u", .check =3D test__group_gh3, /* 6 */ }, { - .name =3D "{cycles:G,cache-misses:H}:uG", + .name =3D "{cpu-cycles:G,cache-misses:H}:uG", .check =3D test__group_gh4, /* 7 */ }, { - .name =3D "{cycles,cache-misses,branch-misses}:S", + .name =3D "{cpu-cycles,cache-misses,branch-misses}:S", .check =3D test__leader_sample1, /* 8 */ }, @@ -1920,7 +1923,7 @@ static const struct evlist_test test__events[] =3D { /* 0 */ }, { - .name =3D "{cycles,cache-misses,branch-misses}:D", + .name =3D "{cpu-cycles,cache-misses,branch-misses}:D", .check =3D test__pinned_group, /* 1 */ }, @@ -1958,7 +1961,7 @@ static const struct evlist_test test__events[] =3D { /* 6 */ }, { - .name =3D "task-clock:P,cycles", + .name =3D "task-clock:P,cpu-cycles", .check =3D test__checkevent_precise_max_modifier, /* 7 */ }, @@ -1989,17 +1992,17 @@ static const struct evlist_test test__events[] =3D { /* 2 */ }, { - .name =3D "cycles/name=3D'COMPLEX_CYCLES_NAME:orig=3Dcycles,desc=3Dchip= -clock-ticks'/Duk", + .name =3D "cpu-cycles/name=3D'COMPLEX_CYCLES_NAME:orig=3Dcpu-cycles,des= c=3Dchip-clock-ticks'/Duk", .check =3D test__checkevent_complex_name, /* 3 */ }, { - .name =3D "cycles//u", + .name =3D "cpu-cycles//u", .check =3D test__sym_event_slash, /* 4 */ }, { - .name =3D "cycles:k", + .name =3D "cpu-cycles:k", .check =3D test__sym_event_dc, /* 5 */ }, @@ -2009,17 +2012,17 @@ static const struct evlist_test test__events[] =3D { /* 6 */ }, { - .name =3D "{cycles,cache-misses,branch-misses}:e", + .name =3D "{cpu-cycles,cache-misses,branch-misses}:e", .check =3D test__exclusive_group, /* 7 */ }, { - .name =3D "cycles/name=3Dname/", + .name =3D "cpu-cycles/name=3Dname/", .check =3D test__term_equal_term, /* 8 */ }, { - .name =3D "cycles/name=3Dl1d/", + .name =3D "cpu-cycles/name=3Dl1d/", .check =3D test__term_equal_legacy, /* 9 */ }, @@ -2117,7 +2120,7 @@ static const struct evlist_test test__events_pmu[] = =3D { /* 2 */ }, { - .name =3D "default_core/name=3D'COMPLEX_CYCLES_NAME:orig=3Dcycles,desc= =3Dchip-clock-ticks',period=3D0x1,event=3D0x2/ukp", + .name =3D "default_core/name=3D'COMPLEX_CYCLES_NAME:orig=3Dcpu-cycles,d= esc=3Dchip-clock-ticks',period=3D0x1,event=3D0x2/ukp", .valid =3D test__pmu_default_core_event_valid, .check =3D test__checkevent_complex_name, /* 3 */ --=20 2.51.0.534.gc79095c0ca-goog