149 lines
5.7 KiB
Diff
149 lines
5.7 KiB
Diff
From e61fd6e1d87c9ff8d33b5b07e4be63440bece6eb Mon Sep 17 00:00:00 2001
|
|
From: Andi Kleen <ak@linux.intel.com>
|
|
Date: Tue, 26 Mar 2019 15:18:23 -0700
|
|
Subject: [PATCH 012/201] perf list: Output tool events
|
|
|
|
mainline inclusion
|
|
from mainline-v5.2-rc1
|
|
commit 5e0861baa3fa73e8bd861a4b7ba7fa992b1dff82
|
|
category: feature
|
|
bugzilla: https://gitee.com/openeuler/kernel/issues/I8C0CX
|
|
|
|
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5e0861baa3fa73e8bd861a4b7ba7fa992b1dff82
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
Add support in 'perf list' to output tool internal events, currently
|
|
only 'duration_time'.
|
|
|
|
Committer testing:
|
|
|
|
$ perf list dur*
|
|
|
|
List of pre-defined events (to be used in -e):
|
|
|
|
duration_time [Tool event]
|
|
|
|
Metric Groups:
|
|
|
|
$ perf list sw
|
|
|
|
List of pre-defined events (to be used in -e):
|
|
|
|
alignment-faults [Software event]
|
|
bpf-output [Software event]
|
|
context-switches OR cs [Software event]
|
|
cpu-clock [Software event]
|
|
cpu-migrations OR migrations [Software event]
|
|
dummy [Software event]
|
|
emulation-faults [Software event]
|
|
major-faults [Software event]
|
|
minor-faults [Software event]
|
|
page-faults OR faults [Software event]
|
|
task-clock [Software event]
|
|
|
|
duration_time [Tool event]
|
|
|
|
$ perf list | grep duration
|
|
duration_time [Tool event]
|
|
[L1D miss outstandings duration in cycles]
|
|
page walk duration are excluded in Skylake]
|
|
load. EPT page walk duration are excluded in Skylake]
|
|
page walk duration are excluded in Skylake]
|
|
store. EPT page walk duration are excluded in Skylake]
|
|
(instruction fetch) request. EPT page walk duration are excluded in
|
|
instruction fetch request. EPT page walk duration are excluded in
|
|
$
|
|
|
|
Signed-off-by: Andi Kleen <ak@linux.intel.com>
|
|
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
|
Acked-by: Jiri Olsa <jolsa@kernel.org>
|
|
Link: http://lkml.kernel.org/r/20190326221823.11518-5-andi@firstfloor.org
|
|
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
|
Signed-off-by: hongrongxuan <hongrongxuan@huawei.com>
|
|
---
|
|
tools/perf/builtin-list.c | 6 ++++--
|
|
tools/perf/util/parse-events.c | 20 ++++++++++++++++++++
|
|
tools/perf/util/parse-events.h | 1 +
|
|
3 files changed, 25 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/tools/perf/builtin-list.c b/tools/perf/builtin-list.c
|
|
index c9f98d00c0e9..e4606919bda9 100644
|
|
--- a/tools/perf/builtin-list.c
|
|
+++ b/tools/perf/builtin-list.c
|
|
@@ -70,10 +70,11 @@ int cmd_list(int argc, const char **argv)
|
|
print_symbol_events(NULL, PERF_TYPE_HARDWARE,
|
|
event_symbols_hw, PERF_COUNT_HW_MAX, raw_dump);
|
|
else if (strcmp(argv[i], "sw") == 0 ||
|
|
- strcmp(argv[i], "software") == 0)
|
|
+ strcmp(argv[i], "software") == 0) {
|
|
print_symbol_events(NULL, PERF_TYPE_SOFTWARE,
|
|
event_symbols_sw, PERF_COUNT_SW_MAX, raw_dump);
|
|
- else if (strcmp(argv[i], "cache") == 0 ||
|
|
+ print_tool_events(NULL, raw_dump);
|
|
+ } else if (strcmp(argv[i], "cache") == 0 ||
|
|
strcmp(argv[i], "hwcache") == 0)
|
|
print_hwcache_events(NULL, raw_dump);
|
|
else if (strcmp(argv[i], "pmu") == 0)
|
|
@@ -113,6 +114,7 @@ int cmd_list(int argc, const char **argv)
|
|
event_symbols_hw, PERF_COUNT_HW_MAX, raw_dump);
|
|
print_symbol_events(s, PERF_TYPE_SOFTWARE,
|
|
event_symbols_sw, PERF_COUNT_SW_MAX, raw_dump);
|
|
+ print_tool_events(s, raw_dump);
|
|
print_hwcache_events(s, raw_dump);
|
|
print_pmu_events(s, raw_dump, !desc_flag,
|
|
long_desc_flag,
|
|
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
|
|
index 36d0851c452b..c0a13cf41ef6 100644
|
|
--- a/tools/perf/util/parse-events.c
|
|
+++ b/tools/perf/util/parse-events.c
|
|
@@ -2460,6 +2460,25 @@ int print_hwcache_events(const char *event_glob, bool name_only)
|
|
return evt_num;
|
|
}
|
|
|
|
+static void print_tool_event(const char *name, const char *event_glob,
|
|
+ bool name_only)
|
|
+{
|
|
+ if (event_glob && !strglobmatch(name, event_glob))
|
|
+ return;
|
|
+ if (name_only)
|
|
+ printf("%s ", name);
|
|
+ else
|
|
+ printf(" %-50s [%s]\n", name, "Tool event");
|
|
+
|
|
+}
|
|
+
|
|
+void print_tool_events(const char *event_glob, bool name_only)
|
|
+{
|
|
+ print_tool_event("duration_time", event_glob, name_only);
|
|
+ if (pager_in_use())
|
|
+ printf("\n");
|
|
+}
|
|
+
|
|
void print_symbol_events(const char *event_glob, unsigned type,
|
|
struct event_symbol *syms, unsigned max,
|
|
bool name_only)
|
|
@@ -2543,6 +2562,7 @@ void print_events(const char *event_glob, bool name_only, bool quiet_flag,
|
|
|
|
print_symbol_events(event_glob, PERF_TYPE_SOFTWARE,
|
|
event_symbols_sw, PERF_COUNT_SW_MAX, name_only);
|
|
+ print_tool_events(event_glob, name_only);
|
|
|
|
print_hwcache_events(event_glob, name_only);
|
|
|
|
diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
|
|
index 638e2a0bec35..58c6730526f9 100644
|
|
--- a/tools/perf/util/parse-events.h
|
|
+++ b/tools/perf/util/parse-events.h
|
|
@@ -203,6 +203,7 @@ extern struct event_symbol event_symbols_sw[];
|
|
void print_symbol_events(const char *event_glob, unsigned type,
|
|
struct event_symbol *syms, unsigned max,
|
|
bool name_only);
|
|
+void print_tool_events(const char *event_glob, bool name_only);
|
|
void print_tracepoint_events(const char *subsys_glob, const char *event_glob,
|
|
bool name_only);
|
|
int print_hwcache_events(const char *event_glob, bool name_only);
|
|
--
|
|
2.27.0
|
|
|