2024-01-03 17:04:46

by Ian Rogers

[permalink] [raw]
Subject: [PATCH v2 1/2] perf x86 test: Update hybrid expectations

The legacy events cpu-cycles and instructions have sysfs event
equivalents on x86 (see /sys/devices/cpu_core/events). As sysfs/JSON
events are now higher in priority than legacy events this causes the
hybrid test expectations not to be met. To fix this switch to legacy
events that don't have sysfs versions, namely cpu-cycles becomes
cycles and instructions becomes branches.

Fixes: a24d9d9dc096 ("perf parse-events: Make legacy events lower priority than sysfs/JSON")
Reported-by: Arnaldo Carvalho de Melo <[email protected]>
Closes: https://lore.kernel.org/lkml/[email protected]/
Signed-off-by: Ian Rogers <[email protected]>
---
tools/perf/arch/x86/tests/hybrid.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/tools/perf/arch/x86/tests/hybrid.c b/tools/perf/arch/x86/tests/hybrid.c
index eb152770f148..05a5f81e8167 100644
--- a/tools/perf/arch/x86/tests/hybrid.c
+++ b/tools/perf/arch/x86/tests/hybrid.c
@@ -47,7 +47,7 @@ static int test__hybrid_hw_group_event(struct evlist *evlist)
evsel = evsel__next(evsel);
TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
TEST_ASSERT_VAL("wrong hybrid type", test_hybrid_type(evsel, PERF_TYPE_RAW));
- TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
+ TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_INSTRUCTIONS));
TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
return TEST_OK;
}
@@ -102,7 +102,7 @@ static int test__hybrid_group_modifier1(struct evlist *evlist)
evsel = evsel__next(evsel);
TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
TEST_ASSERT_VAL("wrong hybrid type", test_hybrid_type(evsel, PERF_TYPE_RAW));
- TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
+ TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_INSTRUCTIONS));
TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
@@ -171,27 +171,27 @@ struct evlist_test {

static const struct evlist_test test__hybrid_events[] = {
{
- .name = "cpu_core/cpu-cycles/",
+ .name = "cpu_core/cycles/",
.check = test__hybrid_hw_event_with_pmu,
/* 0 */
},
{
- .name = "{cpu_core/cpu-cycles/,cpu_core/instructions/}",
+ .name = "{cpu_core/cycles/,cpu_core/branches/}",
.check = test__hybrid_hw_group_event,
/* 1 */
},
{
- .name = "{cpu-clock,cpu_core/cpu-cycles/}",
+ .name = "{cpu-clock,cpu_core/cycles/}",
.check = test__hybrid_sw_hw_group_event,
/* 2 */
},
{
- .name = "{cpu_core/cpu-cycles/,cpu-clock}",
+ .name = "{cpu_core/cycles/,cpu-clock}",
.check = test__hybrid_hw_sw_group_event,
/* 3 */
},
{
- .name = "{cpu_core/cpu-cycles/k,cpu_core/instructions/u}",
+ .name = "{cpu_core/cycles/k,cpu_core/branches/u}",
.check = test__hybrid_group_modifier1,
/* 4 */
},
--
2.43.0.472.g3155946c3a-goog



2024-01-03 17:45:14

by Liang, Kan

[permalink] [raw]
Subject: Re: [PATCH v2 1/2] perf x86 test: Update hybrid expectations



On 2024-01-03 12:01 p.m., Ian Rogers wrote:
> The legacy events cpu-cycles and instructions have sysfs event
> equivalents on x86 (see /sys/devices/cpu_core/events). As sysfs/JSON
> events are now higher in priority than legacy events this causes the
> hybrid test expectations not to be met. To fix this switch to legacy
> events that don't have sysfs versions, namely cpu-cycles becomes
> cycles and instructions becomes branches.
>
> Fixes: a24d9d9dc096 ("perf parse-events: Make legacy events lower priority than sysfs/JSON")
> Reported-by: Arnaldo Carvalho de Melo <[email protected]>
> Closes: https://lore.kernel.org/lkml/[email protected]/
> Signed-off-by: Ian Rogers <[email protected]>
> ---

Thanks Ian. For the series,

Reviewed-by: Kan Liang <[email protected]>

Thanks,
Kan
> tools/perf/arch/x86/tests/hybrid.c | 14 +++++++-------
> 1 file changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/tools/perf/arch/x86/tests/hybrid.c b/tools/perf/arch/x86/tests/hybrid.c
> index eb152770f148..05a5f81e8167 100644
> --- a/tools/perf/arch/x86/tests/hybrid.c
> +++ b/tools/perf/arch/x86/tests/hybrid.c
> @@ -47,7 +47,7 @@ static int test__hybrid_hw_group_event(struct evlist *evlist)
> evsel = evsel__next(evsel);
> TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
> TEST_ASSERT_VAL("wrong hybrid type", test_hybrid_type(evsel, PERF_TYPE_RAW));
> - TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
> + TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_INSTRUCTIONS));
> TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
> return TEST_OK;
> }
> @@ -102,7 +102,7 @@ static int test__hybrid_group_modifier1(struct evlist *evlist)
> evsel = evsel__next(evsel);
> TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
> TEST_ASSERT_VAL("wrong hybrid type", test_hybrid_type(evsel, PERF_TYPE_RAW));
> - TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
> + TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_INSTRUCTIONS));
> TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
> TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
> TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
> @@ -171,27 +171,27 @@ struct evlist_test {
>
> static const struct evlist_test test__hybrid_events[] = {
> {
> - .name = "cpu_core/cpu-cycles/",
> + .name = "cpu_core/cycles/",
> .check = test__hybrid_hw_event_with_pmu,
> /* 0 */
> },
> {
> - .name = "{cpu_core/cpu-cycles/,cpu_core/instructions/}",
> + .name = "{cpu_core/cycles/,cpu_core/branches/}",
> .check = test__hybrid_hw_group_event,
> /* 1 */
> },
> {
> - .name = "{cpu-clock,cpu_core/cpu-cycles/}",
> + .name = "{cpu-clock,cpu_core/cycles/}",
> .check = test__hybrid_sw_hw_group_event,
> /* 2 */
> },
> {
> - .name = "{cpu_core/cpu-cycles/,cpu-clock}",
> + .name = "{cpu_core/cycles/,cpu-clock}",
> .check = test__hybrid_hw_sw_group_event,
> /* 3 */
> },
> {
> - .name = "{cpu_core/cpu-cycles/k,cpu_core/instructions/u}",
> + .name = "{cpu_core/cycles/k,cpu_core/branches/u}",
> .check = test__hybrid_group_modifier1,
> /* 4 */
> },

2024-01-05 12:00:15

by Mark Rutland

[permalink] [raw]
Subject: Re: [PATCH v2 1/2] perf x86 test: Update hybrid expectations

On Wed, Jan 03, 2024 at 09:01:58AM -0800, Ian Rogers wrote:
> The legacy events cpu-cycles and instructions have sysfs event
> equivalents on x86 (see /sys/devices/cpu_core/events). As sysfs/JSON
> events are now higher in priority than legacy events this causes the
> hybrid test expectations not to be met. To fix this switch to legacy
> events that don't have sysfs versions, namely cpu-cycles becomes
> cycles and instructions becomes branches.
>
> Fixes: a24d9d9dc096 ("perf parse-events: Make legacy events lower priority than sysfs/JSON")
> Reported-by: Arnaldo Carvalho de Melo <[email protected]>
> Closes: https://lore.kernel.org/lkml/[email protected]/
> Signed-off-by: Ian Rogers <[email protected]>
> ---
> tools/perf/arch/x86/tests/hybrid.c | 14 +++++++-------
> 1 file changed, 7 insertions(+), 7 deletions(-)

For both patches:

Acked-by: Mark Rutland <[email protected]>

Mark.

>
> diff --git a/tools/perf/arch/x86/tests/hybrid.c b/tools/perf/arch/x86/tests/hybrid.c
> index eb152770f148..05a5f81e8167 100644
> --- a/tools/perf/arch/x86/tests/hybrid.c
> +++ b/tools/perf/arch/x86/tests/hybrid.c
> @@ -47,7 +47,7 @@ static int test__hybrid_hw_group_event(struct evlist *evlist)
> evsel = evsel__next(evsel);
> TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
> TEST_ASSERT_VAL("wrong hybrid type", test_hybrid_type(evsel, PERF_TYPE_RAW));
> - TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
> + TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_INSTRUCTIONS));
> TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
> return TEST_OK;
> }
> @@ -102,7 +102,7 @@ static int test__hybrid_group_modifier1(struct evlist *evlist)
> evsel = evsel__next(evsel);
> TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
> TEST_ASSERT_VAL("wrong hybrid type", test_hybrid_type(evsel, PERF_TYPE_RAW));
> - TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
> + TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_INSTRUCTIONS));
> TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
> TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
> TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
> @@ -171,27 +171,27 @@ struct evlist_test {
>
> static const struct evlist_test test__hybrid_events[] = {
> {
> - .name = "cpu_core/cpu-cycles/",
> + .name = "cpu_core/cycles/",
> .check = test__hybrid_hw_event_with_pmu,
> /* 0 */
> },
> {
> - .name = "{cpu_core/cpu-cycles/,cpu_core/instructions/}",
> + .name = "{cpu_core/cycles/,cpu_core/branches/}",
> .check = test__hybrid_hw_group_event,
> /* 1 */
> },
> {
> - .name = "{cpu-clock,cpu_core/cpu-cycles/}",
> + .name = "{cpu-clock,cpu_core/cycles/}",
> .check = test__hybrid_sw_hw_group_event,
> /* 2 */
> },
> {
> - .name = "{cpu_core/cpu-cycles/,cpu-clock}",
> + .name = "{cpu_core/cycles/,cpu-clock}",
> .check = test__hybrid_hw_sw_group_event,
> /* 3 */
> },
> {
> - .name = "{cpu_core/cpu-cycles/k,cpu_core/instructions/u}",
> + .name = "{cpu_core/cycles/k,cpu_core/branches/u}",
> .check = test__hybrid_group_modifier1,
> /* 4 */
> },
> --
> 2.43.0.472.g3155946c3a-goog
>