All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jin Yao <yao.jin@linux.intel.com>
To: acme@kernel.org, jolsa@kernel.org, peterz@infradead.org,
	mingo@redhat.com, alexander.shishkin@linux.intel.com
Cc: Linux-kernel@vger.kernel.org, ak@linux.intel.com,
	kan.liang@intel.com, yao.jin@intel.com,
	Jin Yao <yao.jin@linux.intel.com>
Subject: [PATCH v4 09/25] perf parse-events: Create two hybrid cache events
Date: Fri, 16 Apr 2021 22:05:01 +0800	[thread overview]
Message-ID: <20210416140517.18206-10-yao.jin@linux.intel.com> (raw)
In-Reply-To: <20210416140517.18206-1-yao.jin@linux.intel.com>

For cache events, they have pre-defined configs. The kernel needs
to know where the cache event comes from (e.g. from cpu_core pmu
or from cpu_atom pmu). But the perf type PERF_TYPE_HW_CACHE
can't carry pmu information.

Now the type PERF_TYPE_HW_CACHE is extended to be PMU aware type.
The PMU type ID is stored at attr.config[63:32].

When enabling a hybrid cache event without specified pmu, such as,
'perf stat -e LLC-loads -a', two events are created
automatically. One is for atom, the other is for core.

  # perf stat -e LLC-loads -a -vv -- sleep 1
  Control descriptor is not initialized
  ------------------------------------------------------------
  perf_event_attr:
    type                             3
    size                             120
    config                           0x400000002
    sample_type                      IDENTIFIER
    read_format                      TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING
    disabled                         1
    inherit                          1
    exclude_guest                    1
  ------------------------------------------------------------
  sys_perf_event_open: pid -1  cpu 0  group_fd -1  flags 0x8 = 3
  ------------------------------------------------------------
  ...
  ------------------------------------------------------------
  perf_event_attr:
    type                             3
    size                             120
    config                           0x400000002
    sample_type                      IDENTIFIER
    read_format                      TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING
    disabled                         1
    inherit                          1
    exclude_guest                    1
  ------------------------------------------------------------
  sys_perf_event_open: pid -1  cpu 15  group_fd -1  flags 0x8 = 19
  ------------------------------------------------------------
  perf_event_attr:
    type                             3
    size                             120
    config                           0x800000002
    sample_type                      IDENTIFIER
    read_format                      TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING
    disabled                         1
    inherit                          1
    exclude_guest                    1
  ------------------------------------------------------------
  sys_perf_event_open: pid -1  cpu 16  group_fd -1  flags 0x8 = 20
  ------------------------------------------------------------
  ...
  ------------------------------------------------------------
  perf_event_attr:
    type                             3
    size                             120
    config                           0x800000002
    sample_type                      IDENTIFIER
    read_format                      TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING
    disabled                         1
    inherit                          1
    exclude_guest                    1
  ------------------------------------------------------------
  sys_perf_event_open: pid -1  cpu 23  group_fd -1  flags 0x8 = 27
  LLC-loads: 0: 1507 1001800280 1001800280
  LLC-loads: 1: 666 1001812250 1001812250
  LLC-loads: 2: 3353 1001813453 1001813453
  LLC-loads: 3: 514 1001848795 1001848795
  LLC-loads: 4: 627 1001952832 1001952832
  LLC-loads: 5: 4399 1001451154 1001451154
  LLC-loads: 6: 1240 1001481052 1001481052
  LLC-loads: 7: 478 1001520348 1001520348
  LLC-loads: 8: 691 1001551236 1001551236
  LLC-loads: 9: 310 1001578945 1001578945
  LLC-loads: 10: 1018 1001594354 1001594354
  LLC-loads: 11: 3656 1001622355 1001622355
  LLC-loads: 12: 882 1001661416 1001661416
  LLC-loads: 13: 506 1001693963 1001693963
  LLC-loads: 14: 3547 1001721013 1001721013
  LLC-loads: 15: 1399 1001734818 1001734818
  LLC-loads: 0: 1314 1001793826 1001793826
  LLC-loads: 1: 2857 1001752764 1001752764
  LLC-loads: 2: 646 1001830694 1001830694
  LLC-loads: 3: 1612 1001864861 1001864861
  LLC-loads: 4: 2244 1001912381 1001912381
  LLC-loads: 5: 1255 1001943889 1001943889
  LLC-loads: 6: 4624 1002021109 1002021109
  LLC-loads: 7: 2703 1001959302 1001959302
  LLC-loads: 24793 16026838264 16026838264
  LLC-loads: 17255 8015078826 8015078826

   Performance counter stats for 'system wide':

              24,793      cpu_core/LLC-loads/
              17,255      cpu_atom/LLC-loads/

         1.001970988 seconds time elapsed

0x4 in 0x400000002 indicates the cpu_core pmu.
0x8 in 0x800000002 indicates the cpu_atom pmu.

Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
---
v4:
 - Use PERF_TYPE_HW_CACHE (v3 uses PERF_TYPE_HW_CACHE_PMU)
 - Define 'ret' variable for return value.

v3:
 - Raw event creation is moved to parse-events-hybrid.c.

 tools/perf/util/parse-events-hybrid.c | 23 +++++++++++++++++++++++
 tools/perf/util/parse-events-hybrid.h |  5 +++++
 tools/perf/util/parse-events.c        | 10 +++++++++-
 3 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/parse-events-hybrid.c b/tools/perf/util/parse-events-hybrid.c
index 8fd7f19a9865..7a7e065d2b5f 100644
--- a/tools/perf/util/parse-events-hybrid.c
+++ b/tools/perf/util/parse-events-hybrid.c
@@ -98,3 +98,26 @@ int parse_events__add_numeric_hybrid(struct parse_events_state *parse_state,
 
 	return -1;
 }
+
+int parse_events__add_cache_hybrid(struct list_head *list, int *idx,
+				   struct perf_event_attr *attr, char *name,
+				   struct list_head *config_terms,
+				   bool *hybrid)
+{
+	struct perf_pmu *pmu;
+	int ret;
+
+	*hybrid = false;
+	if (!perf_pmu__has_hybrid())
+		return 0;
+
+	*hybrid = true;
+	perf_pmu__for_each_hybrid_pmu(pmu) {
+		ret = create_event_hybrid(PERF_TYPE_HW_CACHE, idx, list,
+					  attr, name, config_terms, pmu);
+		if (ret)
+			return ret;
+	}
+
+	return 0;
+}
diff --git a/tools/perf/util/parse-events-hybrid.h b/tools/perf/util/parse-events-hybrid.h
index d81a76978480..9ad33cd0cef4 100644
--- a/tools/perf/util/parse-events-hybrid.h
+++ b/tools/perf/util/parse-events-hybrid.h
@@ -14,4 +14,9 @@ int parse_events__add_numeric_hybrid(struct parse_events_state *parse_state,
 				     char *name, struct list_head *config_terms,
 				     bool *hybrid);
 
+int parse_events__add_cache_hybrid(struct list_head *list, int *idx,
+				   struct perf_event_attr *attr, char *name,
+				   struct list_head *config_terms,
+				   bool *hybrid);
+
 #endif /* __PERF_PARSE_EVENTS_HYBRID_H */
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index f8a147b53962..9b2588df22a4 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -460,7 +460,8 @@ int parse_events_add_cache(struct list_head *list, int *idx,
 	char name[MAX_NAME_LEN], *config_name;
 	int cache_type = -1, cache_op = -1, cache_result = -1;
 	char *op_result[2] = { op_result1, op_result2 };
-	int i, n;
+	int i, n, ret;
+	bool hybrid;
 
 	/*
 	 * No fallback - if we cannot get a clear cache type
@@ -520,6 +521,13 @@ int parse_events_add_cache(struct list_head *list, int *idx,
 		if (get_config_terms(head_config, &config_terms))
 			return -ENOMEM;
 	}
+
+	ret = parse_events__add_cache_hybrid(list, idx, &attr,
+					     config_name ? : name, &config_terms,
+					     &hybrid);
+	if (hybrid)
+		return ret;
+
 	return add_event(list, idx, &attr, config_name ? : name, &config_terms);
 }
 
-- 
2.17.1


  parent reply	other threads:[~2021-04-16 14:06 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-16 14:04 [PATCH v4 00/25] perf tool: AlderLake hybrid support series 1 Jin Yao
2021-04-16 14:04 ` [PATCH v4 01/25] tools headers uapi: Update tools's copy of linux/perf_event.h Jin Yao
2021-04-16 14:04 ` [PATCH v4 02/25] perf jevents: Support unit value "cpu_core" and "cpu_atom" Jin Yao
2021-04-16 14:04 ` [PATCH v4 03/25] perf pmu: Simplify arguments of __perf_pmu__new_alias Jin Yao
2021-04-16 14:04 ` [PATCH v4 04/25] perf pmu: Save pmu name Jin Yao
2021-04-16 14:04 ` [PATCH v4 05/25] perf pmu: Save detected hybrid pmus to a global pmu list Jin Yao
2021-04-16 14:04 ` [PATCH v4 06/25] perf pmu: Add hybrid helper functions Jin Yao
2021-04-16 14:04 ` [PATCH v4 07/25] perf stat: Uniquify hybrid event name Jin Yao
2021-04-16 14:05 ` [PATCH v4 08/25] perf parse-events: Create two hybrid hardware events Jin Yao
2021-04-16 14:05 ` Jin Yao [this message]
2021-04-16 14:05 ` [PATCH v4 10/25] perf parse-events: Create two hybrid raw events Jin Yao
2021-04-16 14:05 ` [PATCH v4 11/25] perf parse-events: Compare with hybrid pmu name Jin Yao
2021-04-16 14:05 ` [PATCH v4 12/25] perf parse-events: Support event inside hybrid pmu Jin Yao
2021-04-21 18:29   ` Jiri Olsa
2021-04-22  1:44     ` Jin, Yao
2021-04-16 14:05 ` [PATCH v4 13/25] perf record: Create two hybrid 'cycles' events by default Jin Yao
2021-04-16 14:05 ` [PATCH v4 14/25] perf stat: Add default hybrid events Jin Yao
2021-04-21 18:29   ` Jiri Olsa
2021-04-22  2:12     ` Jin, Yao
2021-04-22 10:25       ` Jiri Olsa
2021-04-16 14:05 ` [PATCH v4 15/25] perf stat: Filter out unmatched aggregation for hybrid event Jin Yao
2021-04-21 18:29   ` Jiri Olsa
2021-04-22  3:10     ` Jin, Yao
2021-04-22 10:26       ` Jiri Olsa
2021-04-16 14:05 ` [PATCH v4 16/25] perf stat: Warn group events from different hybrid PMU Jin Yao
2021-04-16 14:05 ` [PATCH v4 17/25] perf record: Uniquify hybrid event name Jin Yao
2021-04-16 14:05 ` [PATCH v4 18/25] perf tests: Add hybrid cases for 'Parse event definition strings' test Jin Yao
2021-04-16 14:05 ` [PATCH v4 19/25] perf tests: Add hybrid cases for 'Roundtrip evsel->name' test Jin Yao
2021-04-16 14:05 ` [PATCH v4 20/25] perf tests: Skip 'Setup struct perf_event_attr' test for hybrid Jin Yao
2021-04-21 18:29   ` Jiri Olsa
2021-04-22  3:11     ` Jin, Yao
2021-04-16 14:05 ` [PATCH v4 21/25] perf tests: Support 'Track with sched_switch' " Jin Yao
2021-04-21 18:28   ` Jiri Olsa
2021-04-22  3:14     ` Jin, Yao
2021-04-16 14:05 ` [PATCH v4 22/25] perf tests: Support 'Parse and process metrics' " Jin Yao
2021-04-21 18:29   ` Jiri Olsa
2021-04-22  3:20     ` Jin, Yao
2021-04-16 14:05 ` [PATCH v4 23/25] perf tests: Support 'Session topology' " Jin Yao
2021-04-21 18:29   ` Jiri Olsa
2021-04-22  3:15     ` Jin, Yao
2021-04-16 14:05 ` [PATCH v4 24/25] perf tests: Support 'Convert perf time to TSC' " Jin Yao
2021-04-21 18:29   ` Jiri Olsa
2021-04-22  3:16     ` Jin, Yao
2021-04-16 14:05 ` [PATCH v4 25/25] perf tests: Skip 'perf stat metrics (shadow stat) test' " Jin Yao
2021-04-21  1:14 ` [PATCH v4 00/25] perf tool: AlderLake hybrid support series 1 Jin, Yao
2021-04-21 10:03   ` Jiri Olsa

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=20210416140517.18206-10-yao.jin@linux.intel.com \
    --to=yao.jin@linux.intel.com \
    --cc=Linux-kernel@vger.kernel.org \
    --cc=acme@kernel.org \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=jolsa@kernel.org \
    --cc=kan.liang@intel.com \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=yao.jin@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.