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 v5 14/26] perf stat: Add default hybrid events
Date: Fri, 23 Apr 2021 13:35:29 +0800 [thread overview]
Message-ID: <20210423053541.12521-15-yao.jin@linux.intel.com> (raw)
In-Reply-To: <20210423053541.12521-1-yao.jin@linux.intel.com>
Previously if '-e' is not specified in perf stat, some software events
and hardware events are added to evlist by default.
Before:
# perf stat -a -- sleep 1
Performance counter stats for 'system wide':
24,044.40 msec cpu-clock # 23.946 CPUs utilized
99 context-switches # 4.117 /sec
24 cpu-migrations # 0.998 /sec
3 page-faults # 0.125 /sec
7,000,244 cycles # 0.000 GHz
2,955,024 instructions # 0.42 insn per cycle
608,941 branches # 25.326 K/sec
31,991 branch-misses # 5.25% of all branches
1.004106859 seconds time elapsed
Among the events, cycles, instructions, branches and branch-misses
are hardware events.
One hybrid platform, two hardware events are created for one
hardware event.
cpu_core/cycles/,
cpu_atom/cycles/,
cpu_core/instructions/,
cpu_atom/instructions/,
cpu_core/branches/,
cpu_atom/branches/,
cpu_core/branch-misses/,
cpu_atom/branch-misses/
These events would be added to evlist on hybrid platform.
Since parse_events() has been supported to create two hardware events
for one event on hybrid platform, so we just use parse_events(evlist,
"cycles,instructions,branches,branch-misses") to create the default
events and add them to evlist.
After:
# perf stat -a -- sleep 1
Performance counter stats for 'system wide':
24,043.99 msec cpu-clock # 23.991 CPUs utilized
139 context-switches # 5.781 /sec
25 cpu-migrations # 1.040 /sec
6 page-faults # 0.250 /sec
10,381,751 cpu_core/cycles/ # 431.782 K/sec
1,264,216 cpu_atom/cycles/ # 52.579 K/sec
3,406,958 cpu_core/instructions/ # 141.697 K/sec
414,588 cpu_atom/instructions/ # 17.243 K/sec
705,149 cpu_core/branches/ # 29.327 K/sec
82,358 cpu_atom/branches/ # 3.425 K/sec
40,821 cpu_core/branch-misses/ # 1.698 K/sec
9,086 cpu_atom/branch-misses/ # 377.891 /sec
1.002228863 seconds time elapsed
We can see two events are created for one hardware event.
One TODO is, the shadow stats looks a bit different, now it's just
'M/sec'.
The perf_stat__update_shadow_stats and perf_stat__print_shadow_stats
need to be improved in future if we want to get the original shadow
stats.
Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
---
v5:
- Do the same way like when topdown calls parse events for checking
result and displayt the error.
v4:
- No change.
tools/perf/builtin-stat.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index 1255af4751c2..3ab4069ff8f0 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -1626,6 +1626,12 @@ static int add_default_attributes(void)
{ .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_BRANCH_INSTRUCTIONS },
{ .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_BRANCH_MISSES },
+};
+ struct perf_event_attr default_sw_attrs[] = {
+ { .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_TASK_CLOCK },
+ { .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_CONTEXT_SWITCHES },
+ { .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_CPU_MIGRATIONS },
+ { .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_PAGE_FAULTS },
};
/*
@@ -1863,6 +1869,28 @@ static int add_default_attributes(void)
}
if (!evsel_list->core.nr_entries) {
+ if (perf_pmu__has_hybrid()) {
+ const char *hybrid_str = "cycles,instructions,branches,branch-misses";
+
+ if (target__has_cpu(&target))
+ default_sw_attrs[0].config = PERF_COUNT_SW_CPU_CLOCK;
+
+ if (evlist__add_default_attrs(evsel_list,
+ default_sw_attrs) < 0) {
+ return -1;
+ }
+
+ err = parse_events(evsel_list, hybrid_str, &errinfo);
+ if (err) {
+ fprintf(stderr,
+ "Cannot set up hybrid events %s: %d\n",
+ hybrid_str, err);
+ parse_events_print_error(&errinfo, hybrid_str);
+ return -1;
+ }
+ return err;
+ }
+
if (target__has_cpu(&target))
default_attrs0[0].config = PERF_COUNT_SW_CPU_CLOCK;
--
2.17.1
next prev parent reply other threads:[~2021-04-23 5:37 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-23 5:35 [PATCH v5 00/26] perf tool: AlderLake hybrid support series 1 Jin Yao
2021-04-23 5:35 ` [PATCH v5 01/26] tools headers uapi: Update tools's copy of linux/perf_event.h Jin Yao
2021-04-23 5:35 ` [PATCH v5 02/26] perf jevents: Support unit value "cpu_core" and "cpu_atom" Jin Yao
2021-04-23 5:35 ` [PATCH v5 03/26] perf pmu: Simplify arguments of __perf_pmu__new_alias Jin Yao
2021-04-23 5:35 ` [PATCH v5 04/26] perf pmu: Save pmu name Jin Yao
2021-04-23 5:35 ` [PATCH v5 05/26] perf pmu: Save detected hybrid pmus to a global pmu list Jin Yao
2021-04-23 5:35 ` [PATCH v5 06/26] perf pmu: Add hybrid helper functions Jin Yao
2021-04-23 5:35 ` [PATCH v5 07/26] perf stat: Uniquify hybrid event name Jin Yao
2021-04-23 5:35 ` [PATCH v5 08/26] perf parse-events: Create two hybrid hardware events Jin Yao
2021-04-23 5:35 ` [PATCH v5 09/26] perf parse-events: Create two hybrid cache events Jin Yao
2021-04-23 5:35 ` [PATCH v5 10/26] perf parse-events: Create two hybrid raw events Jin Yao
2021-04-23 5:35 ` [PATCH v5 11/26] perf parse-events: Compare with hybrid pmu name Jin Yao
2021-04-23 5:35 ` [PATCH v5 12/26] perf parse-events: Support event inside hybrid pmu Jin Yao
2021-04-25 16:17 ` Jiri Olsa
2021-04-26 0:56 ` Jin, Yao
2021-04-26 21:34 ` Jiri Olsa
2021-04-23 5:35 ` [PATCH v5 13/26] perf record: Create two hybrid 'cycles' events by default Jin Yao
2021-04-23 5:35 ` Jin Yao [this message]
2021-04-23 5:35 ` [PATCH v5 15/26] perf stat: Filter out unmatched aggregation for hybrid event Jin Yao
2021-04-23 5:35 ` [PATCH v5 16/26] perf stat: Warn group events from different hybrid PMU Jin Yao
2021-04-23 5:35 ` [PATCH v5 17/26] perf record: Uniquify hybrid event name Jin Yao
2021-04-23 5:35 ` [PATCH v5 18/26] perf tests: Add hybrid cases for 'Parse event definition strings' test Jin Yao
2021-04-23 5:35 ` [PATCH v5 19/26] perf tests: Add hybrid cases for 'Roundtrip evsel->name' test Jin Yao
2021-04-23 5:35 ` [PATCH v5 20/26] perf tests: Skip 'Setup struct perf_event_attr' test for hybrid Jin Yao
2021-04-23 5:35 ` [PATCH v5 21/26] perf tests: Support 'Track with sched_switch' " Jin Yao
2021-04-23 5:35 ` [PATCH v5 22/26] perf tests: Support 'Parse and process metrics' " Jin Yao
2021-04-23 5:35 ` [PATCH v5 23/26] perf tests: Support 'Session topology' " Jin Yao
2021-04-23 5:35 ` [PATCH v5 24/26] perf tests: Support 'Convert perf time to TSC' " Jin Yao
2021-04-23 5:35 ` [PATCH v5 25/26] perf tests: Skip 'perf stat metrics (shadow stat) test' " Jin Yao
2021-04-23 5:35 ` [PATCH v5 26/26] perf Documentation: Document intel-hybrid support Jin Yao
2021-04-26 20:41 ` [PATCH v5 00/26] perf tool: AlderLake hybrid support series 1 Arnaldo Carvalho de Melo
2021-04-27 0:48 ` Jin, Yao
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=20210423053541.12521-15-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.