diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-01-30 14:15:14 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-01-30 14:15:14 -0500 |
commit | d8b91dde38f4c43bd0bbbf17a90f735b16aaff2c (patch) | |
tree | bd72dabf6e4b23e060fce429c87e60504f69de54 /tools/perf/arch/common.c | |
parent | 5e7481a25e90b661d1dbbba18be3fd3dfe12ec6f (diff) | |
parent | e4c1091cb495d9cbec8956d642644a71a1689958 (diff) |
Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf updates from Ingo Molnar:
"Kernel side changes:
- Clean up the x86 instruction decoder (Masami Hiramatsu)
- Add new uprobes optimization for PUSH instructions on x86 (Yonghong
Song)
- Add MSR_IA32_THERM_STATUS to the MSR events (Stephane Eranian)
- Fix misc bugs, update documentation, plus various cleanups (Jiri
Olsa)
There's a large number of tooling side improvements:
- Intel-PT/BTS improvements (Adrian Hunter)
- Numerous 'perf trace' improvements (Arnaldo Carvalho de Melo)
- Introduce an errno code to string facility (Hendrik Brueckner)
- Various build system improvements (Jiri Olsa)
- Add support for CoreSight trace decoding by making the perf tools
use the external openCSD (Mathieu Poirier, Tor Jeremiassen)
- Add ARM Statistical Profiling Extensions (SPE) support (Kim
Phillips)
- libtraceevent updates (Steven Rostedt)
- Intel vendor event JSON updates (Andi Kleen)
- Introduce 'perf report --mmaps' and 'perf report --tasks' to show
info present in 'perf.data' (Jiri Olsa, Arnaldo Carvalho de Melo)
- Add infrastructure to record first and last sample time to the
perf.data file header, so that when processing all samples in a
'perf record' session, such as when doing build-id processing, or
when specifically requesting that that info be recorded, use that
in 'perf report --time', that also got support for percent slices
in addition to absolute ones.
I.e. now it is possible to ask for the samples in the 10%-20% time
slice of a perf.data file (Jin Yao)
- Allow system wide 'perf stat --per-thread', sorting the result (Jin
Yao)
E.g.:
[root@jouet ~]# perf stat --per-thread --metrics IPC
^C
Performance counter stats for 'system wide':
make-22229 23,012,094,032 inst_retired.any # 0.8 IPC
cc1-22419 692,027,497 inst_retired.any # 0.8 IPC
gcc-22418 328,231,855 inst_retired.any # 0.9 IPC
cc1-22509 220,853,647 inst_retired.any # 0.8 IPC
gcc-22486 199,874,810 inst_retired.any # 1.0 IPC
as-22466 177,896,365 inst_retired.any # 0.9 IPC
cc1-22465 150,732,374 inst_retired.any # 0.8 IPC
gcc-22508 112,555,593 inst_retired.any # 0.9 IPC
cc1-22487 108,964,079 inst_retired.any # 0.7 IPC
qemu-system-x86-2697 21,330,550 inst_retired.any # 0.3 IPC
systemd-journal-551 20,642,951 inst_retired.any # 0.4 IPC
docker-containe-17651 9,552,892 inst_retired.any # 0.5 IPC
dockerd-current-9809 7,528,586 inst_retired.any # 0.5 IPC
make-22153 12,504,194,380 inst_retired.any # 0.8 IPC
python2-22429 12,081,290,954 inst_retired.any # 0.8 IPC
<SNIP>
python2-22429 15,026,328,103 cpu_clk_unhalted.thread
cc1-22419 826,660,193 cpu_clk_unhalted.thread
gcc-22418 365,321,295 cpu_clk_unhalted.thread
cc1-22509 279,169,362 cpu_clk_unhalted.thread
gcc-22486 210,156,950 cpu_clk_unhalted.thread
<SNIP>
5.638075538 seconds time elapsed
[root@jouet ~]#
- Improve shell auto-completion of perf events (Jin Yao)
- 'perf probe' improvements (Masami Hiramatsu)
- Improve PMU infrastructure to support amp64's ThunderX2
implementation defined core events (Ganapatrao Kulkarni)
- Various annotation related improvements and fixes (Thomas Richter)
- Clarify usage of 'overwrite' and 'backward' in the evlist/mmap
code, removing the 'overwrite' parameter from several functions as
it was always used it as 'false' (Wang Nan)
- Fix/improve 'perf record' reverse recording support (Wang Nan)
- Improve command line options documentation (Sihyeon Jang)
- Optimize sample parsing for ordering events, where we don't need to
parse all the PERF_SAMPLE_ bits, just the ones leading to the
timestamp needed to reorder events (Jiri Olsa)
- Generalize the annotation code to support other source information
besides objdump/DWARF obtained ones, starting with python scripts,
that will is slated to be merged soon (Jiri Olsa)
- ... and a lot more that I failed to list, see the shortlog and
changelog for details"
* 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (262 commits)
perf trace beauty flock: Move to separate object file
perf evlist: Remove fcntl.h from evlist.h
perf trace beauty futex: Beautify FUTEX_BITSET_MATCH_ANY
perf trace: Do not print from time delta for interrupted syscall lines
perf trace: Add --print-sample
perf bpf: Remove misplaced __maybe_unused attribute
MAINTAINERS: Adding entry for CoreSight trace decoding
perf tools: Add mechanic to synthesise CoreSight trace packets
perf tools: Add full support for CoreSight trace decoding
pert tools: Add queue management functionality
perf tools: Add functionality to communicate with the openCSD decoder
perf tools: Add support for decoding CoreSight trace data
perf tools: Add decoder mechanic to support dumping trace data
perf tools: Add processing of coresight metadata
perf tools: Add initial entry point for decoder CoreSight traces
perf tools: Integrating the CoreSight decoding library
perf vendor events intel: Update IvyTown files to V20
perf vendor events intel: Update IvyBridge files to V20
perf vendor events intel: Update BroadwellDE events to V7
perf vendor events intel: Update SkylakeX events to V1.06
...
Diffstat (limited to 'tools/perf/arch/common.c')
-rw-r--r-- | tools/perf/arch/common.c | 44 |
1 files changed, 3 insertions, 41 deletions
diff --git a/tools/perf/arch/common.c b/tools/perf/arch/common.c index 8c0cfeb55f8e..c6f373508a4f 100644 --- a/tools/perf/arch/common.c +++ b/tools/perf/arch/common.c | |||
@@ -1,12 +1,10 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0 | 1 | // SPDX-License-Identifier: GPL-2.0 |
2 | #include <stdio.h> | 2 | #include <stdio.h> |
3 | #include <sys/utsname.h> | ||
4 | #include "common.h" | 3 | #include "common.h" |
4 | #include "../util/env.h" | ||
5 | #include "../util/util.h" | 5 | #include "../util/util.h" |
6 | #include "../util/debug.h" | 6 | #include "../util/debug.h" |
7 | 7 | ||
8 | #include "sane_ctype.h" | ||
9 | |||
10 | const char *const arm_triplets[] = { | 8 | const char *const arm_triplets[] = { |
11 | "arm-eabi-", | 9 | "arm-eabi-", |
12 | "arm-linux-androideabi-", | 10 | "arm-linux-androideabi-", |
@@ -120,55 +118,19 @@ static int lookup_triplets(const char *const *triplets, const char *name) | |||
120 | return -1; | 118 | return -1; |
121 | } | 119 | } |
122 | 120 | ||
123 | /* | ||
124 | * Return architecture name in a normalized form. | ||
125 | * The conversion logic comes from the Makefile. | ||
126 | */ | ||
127 | const char *normalize_arch(char *arch) | ||
128 | { | ||
129 | if (!strcmp(arch, "x86_64")) | ||
130 | return "x86"; | ||
131 | if (arch[0] == 'i' && arch[2] == '8' && arch[3] == '6') | ||
132 | return "x86"; | ||
133 | if (!strcmp(arch, "sun4u") || !strncmp(arch, "sparc", 5)) | ||
134 | return "sparc"; | ||
135 | if (!strcmp(arch, "aarch64") || !strcmp(arch, "arm64")) | ||
136 | return "arm64"; | ||
137 | if (!strncmp(arch, "arm", 3) || !strcmp(arch, "sa110")) | ||
138 | return "arm"; | ||
139 | if (!strncmp(arch, "s390", 4)) | ||
140 | return "s390"; | ||
141 | if (!strncmp(arch, "parisc", 6)) | ||
142 | return "parisc"; | ||
143 | if (!strncmp(arch, "powerpc", 7) || !strncmp(arch, "ppc", 3)) | ||
144 | return "powerpc"; | ||
145 | if (!strncmp(arch, "mips", 4)) | ||
146 | return "mips"; | ||
147 | if (!strncmp(arch, "sh", 2) && isdigit(arch[2])) | ||
148 | return "sh"; | ||
149 | |||
150 | return arch; | ||
151 | } | ||
152 | |||
153 | static int perf_env__lookup_binutils_path(struct perf_env *env, | 121 | static int perf_env__lookup_binutils_path(struct perf_env *env, |
154 | const char *name, const char **path) | 122 | const char *name, const char **path) |
155 | { | 123 | { |
156 | int idx; | 124 | int idx; |
157 | const char *arch, *cross_env; | 125 | const char *arch = perf_env__arch(env), *cross_env; |
158 | struct utsname uts; | ||
159 | const char *const *path_list; | 126 | const char *const *path_list; |
160 | char *buf = NULL; | 127 | char *buf = NULL; |
161 | 128 | ||
162 | arch = normalize_arch(env->arch); | ||
163 | |||
164 | if (uname(&uts) < 0) | ||
165 | goto out; | ||
166 | |||
167 | /* | 129 | /* |
168 | * We don't need to try to find objdump path for native system. | 130 | * We don't need to try to find objdump path for native system. |
169 | * Just use default binutils path (e.g.: "objdump"). | 131 | * Just use default binutils path (e.g.: "objdump"). |
170 | */ | 132 | */ |
171 | if (!strcmp(normalize_arch(uts.machine), arch)) | 133 | if (!strcmp(perf_env__arch(NULL), arch)) |
172 | goto out; | 134 | goto out; |
173 | 135 | ||
174 | cross_env = getenv("CROSS_COMPILE"); | 136 | cross_env = getenv("CROSS_COMPILE"); |