2019-02-13 20:32:39 +08:00
|
|
|
perf-y += annotate.o
|
2019-11-07 15:47:14 +08:00
|
|
|
perf-y += block-info.o
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += block-range.o
|
|
|
|
perf-y += build-id.o
|
2019-08-23 03:58:29 +08:00
|
|
|
perf-y += cacheline.o
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += config.o
|
2019-09-25 02:14:12 +08:00
|
|
|
perf-y += copyfile.o
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += ctype.o
|
|
|
|
perf-y += db-export.o
|
|
|
|
perf-y += env.o
|
|
|
|
perf-y += event.o
|
|
|
|
perf-y += evlist.o
|
2020-05-05 23:18:21 +08:00
|
|
|
perf-y += sideband_evlist.o
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += evsel.o
|
|
|
|
perf-y += evsel_fprintf.o
|
2019-09-25 02:41:51 +08:00
|
|
|
perf-y += perf_event_attr_fprintf.o
|
2019-08-15 22:00:11 +08:00
|
|
|
perf-y += evswitch.o
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += find_bit.o
|
|
|
|
perf-y += get_current_dir_name.o
|
|
|
|
perf-y += kallsyms.o
|
|
|
|
perf-y += levenshtein.o
|
|
|
|
perf-y += llvm-utils.o
|
|
|
|
perf-y += mmap.o
|
|
|
|
perf-y += memswap.o
|
|
|
|
perf-y += parse-events.o
|
|
|
|
perf-y += perf_regs.o
|
|
|
|
perf-y += path.o
|
|
|
|
perf-y += print_binary.o
|
2019-07-10 01:49:26 +08:00
|
|
|
perf-y += rlimit.o
|
2019-06-27 02:27:58 +08:00
|
|
|
perf-y += argv_split.o
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += rbtree.o
|
|
|
|
perf-y += libstring.o
|
|
|
|
perf-y += bitmap.o
|
|
|
|
perf-y += hweight.o
|
|
|
|
perf-y += smt.o
|
|
|
|
perf-y += strbuf.o
|
|
|
|
perf-y += string.o
|
|
|
|
perf-y += strlist.o
|
|
|
|
perf-y += strfilter.o
|
|
|
|
perf-y += top.o
|
|
|
|
perf-y += usage.o
|
|
|
|
perf-y += dso.o
|
2019-08-30 22:11:01 +08:00
|
|
|
perf-y += dsos.o
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += symbol.o
|
|
|
|
perf-y += symbol_fprintf.o
|
|
|
|
perf-y += color.o
|
|
|
|
perf-y += color_config.o
|
|
|
|
perf-y += metricgroup.o
|
|
|
|
perf-y += header.o
|
|
|
|
perf-y += callchain.o
|
|
|
|
perf-y += values.o
|
|
|
|
perf-y += debug.o
|
2019-11-21 08:15:11 +08:00
|
|
|
perf-y += fncache.o
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += machine.o
|
|
|
|
perf-y += map.o
|
|
|
|
perf-y += pstack.o
|
|
|
|
perf-y += session.o
|
|
|
|
perf-y += sample-raw.o
|
|
|
|
perf-y += s390-sample-raw.o
|
|
|
|
perf-$(CONFIG_TRACE) += syscalltbl.o
|
|
|
|
perf-y += ordered-events.o
|
|
|
|
perf-y += namespaces.o
|
|
|
|
perf-y += comm.o
|
|
|
|
perf-y += thread.o
|
|
|
|
perf-y += thread_map.o
|
|
|
|
perf-y += trace-event-parse.o
|
|
|
|
perf-y += parse-events-flex.o
|
|
|
|
perf-y += parse-events-bison.o
|
|
|
|
perf-y += pmu.o
|
|
|
|
perf-y += pmu-flex.o
|
|
|
|
perf-y += pmu-bison.o
|
|
|
|
perf-y += trace-event-read.o
|
|
|
|
perf-y += trace-event-info.o
|
|
|
|
perf-y += trace-event-scripting.o
|
|
|
|
perf-y += trace-event.o
|
|
|
|
perf-y += svghelper.o
|
|
|
|
perf-y += sort.o
|
|
|
|
perf-y += hist.o
|
|
|
|
perf-y += util.o
|
|
|
|
perf-y += cpumap.o
|
2019-11-21 08:15:12 +08:00
|
|
|
perf-y += affinity.o
|
2019-02-19 17:58:13 +08:00
|
|
|
perf-y += cputopo.o
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += cgroup.o
|
|
|
|
perf-y += target.o
|
|
|
|
perf-y += rblist.o
|
|
|
|
perf-y += intlist.o
|
|
|
|
perf-y += vdso.o
|
|
|
|
perf-y += counts.o
|
|
|
|
perf-y += stat.o
|
|
|
|
perf-y += stat-shadow.o
|
|
|
|
perf-y += stat-display.o
|
2020-05-05 22:49:08 +08:00
|
|
|
perf-y += perf_api_probe.o
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += record.o
|
|
|
|
perf-y += srcline.o
|
|
|
|
perf-y += srccode.o
|
2019-09-19 03:08:52 +08:00
|
|
|
perf-y += synthetic-events.o
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += data.o
|
|
|
|
perf-y += tsc.o
|
|
|
|
perf-y += cloexec.o
|
|
|
|
perf-y += call-path.o
|
|
|
|
perf-y += rwsem.o
|
|
|
|
perf-y += thread-stack.o
|
2019-09-25 09:14:46 +08:00
|
|
|
perf-y += spark.o
|
2020-09-11 22:48:05 +08:00
|
|
|
perf-y += topdown.o
|
2021-04-19 17:41:44 +08:00
|
|
|
perf-y += iostat.o
|
2020-10-09 10:28:39 +08:00
|
|
|
perf-y += stream.o
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-$(CONFIG_AUXTRACE) += auxtrace.o
|
|
|
|
perf-$(CONFIG_AUXTRACE) += intel-pt-decoder/
|
|
|
|
perf-$(CONFIG_AUXTRACE) += intel-pt.o
|
|
|
|
perf-$(CONFIG_AUXTRACE) += intel-bts.o
|
|
|
|
perf-$(CONFIG_AUXTRACE) += arm-spe.o
|
2020-05-30 20:24:40 +08:00
|
|
|
perf-$(CONFIG_AUXTRACE) += arm-spe-decoder/
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-$(CONFIG_AUXTRACE) += s390-cpumsf.o
|
2018-01-18 01:52:11 +08:00
|
|
|
|
|
|
|
ifdef CONFIG_LIBOPENCSD
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-$(CONFIG_AUXTRACE) += cs-etm.o
|
|
|
|
perf-$(CONFIG_AUXTRACE) += cs-etm-decoder/
|
2018-01-18 01:52:11 +08:00
|
|
|
endif
|
|
|
|
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += parse-branch-options.o
|
|
|
|
perf-y += dump-insn.o
|
|
|
|
perf-y += parse-regs-options.o
|
2020-08-08 10:31:30 +08:00
|
|
|
perf-y += parse-sublevel-options.o
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += term.o
|
|
|
|
perf-y += help-unknown-cmd.o
|
|
|
|
perf-y += mem-events.o
|
|
|
|
perf-y += vsprintf.o
|
|
|
|
perf-y += units.o
|
|
|
|
perf-y += time-utils.o
|
2020-02-28 17:36:13 +08:00
|
|
|
perf-y += expr-flex.o
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += expr-bison.o
|
2020-02-28 17:36:12 +08:00
|
|
|
perf-y += expr.o
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += branch.o
|
|
|
|
perf-y += mem2node.o
|
2020-08-05 17:34:38 +08:00
|
|
|
perf-y += clockid.o
|
2019-02-13 20:32:39 +08:00
|
|
|
|
|
|
|
perf-$(CONFIG_LIBBPF) += bpf-loader.o
|
2019-02-20 03:11:56 +08:00
|
|
|
perf-$(CONFIG_LIBBPF) += bpf_map.o
|
perf stat: Enable counting events for BPF programs
Introduce 'perf stat -b' option, which counts events for BPF programs, like:
[root@localhost ~]# ~/perf stat -e ref-cycles,cycles -b 254 -I 1000
1.487903822 115,200 ref-cycles
1.487903822 86,012 cycles
2.489147029 80,560 ref-cycles
2.489147029 73,784 cycles
3.490341825 60,720 ref-cycles
3.490341825 37,797 cycles
4.491540887 37,120 ref-cycles
4.491540887 31,963 cycles
The example above counts 'cycles' and 'ref-cycles' of BPF program of id
254. This is similar to bpftool-prog-profile command, but more
flexible.
'perf stat -b' creates per-cpu perf_event and loads fentry/fexit BPF
programs (monitor-progs) to the target BPF program (target-prog). The
monitor-progs read perf_event before and after the target-prog, and
aggregate the difference in a BPF map. Then the user space reads data
from these maps.
A new 'struct bpf_counter' is introduced to provide a common interface
that uses BPF programs/maps to count perf events.
Committer notes:
Removed all but bpf_counter.h includes from evsel.h, not needed at all.
Also BPF map lookups for PERCPU_ARRAYs need to have as its value receive
buffer passed to the kernel libbpf_num_possible_cpus() entries, not
evsel__nr_cpus(evsel), as the former uses
/sys/devices/system/cpu/possible while the later uses
/sys/devices/system/cpu/online, which may be less than the 'possible'
number making the bpf map lookup overwrite memory and cause hard to
debug memory corruption.
We need to continue using evsel__nr_cpus(evsel) when accessing the
perf_counts array tho, not to overwrite another are of memory :-)
Signed-off-by: Song Liu <songliubraving@fb.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Link: https://lore.kernel.org/lkml/20210120163031.GU12699@kernel.org/
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: kernel-team@fb.com
Link: http://lore.kernel.org/lkml/20201229214214.3413833-4-songliubraving@fb.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2020-12-30 05:42:14 +08:00
|
|
|
perf-$(CONFIG_PERF_BPF_SKEL) += bpf_counter.o
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-$(CONFIG_BPF_PROLOGUE) += bpf-prologue.o
|
|
|
|
perf-$(CONFIG_LIBELF) += symbol-elf.o
|
|
|
|
perf-$(CONFIG_LIBELF) += probe-file.o
|
|
|
|
perf-$(CONFIG_LIBELF) += probe-event.o
|
2014-12-30 06:52:25 +08:00
|
|
|
|
2020-05-16 06:17:29 +08:00
|
|
|
ifndef CONFIG_LIBBPF
|
|
|
|
perf-y += hashmap.o
|
|
|
|
endif
|
|
|
|
|
2014-12-30 06:52:25 +08:00
|
|
|
ifndef CONFIG_LIBELF
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += symbol-minimal.o
|
2014-12-30 06:52:25 +08:00
|
|
|
endif
|
|
|
|
|
2017-07-19 04:15:29 +08:00
|
|
|
ifndef CONFIG_SETNS
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += setns.o
|
2017-07-19 04:15:29 +08:00
|
|
|
endif
|
|
|
|
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-$(CONFIG_DWARF) += probe-finder.o
|
|
|
|
perf-$(CONFIG_DWARF) += dwarf-aux.o
|
|
|
|
perf-$(CONFIG_DWARF) += dwarf-regs.o
|
2014-12-30 07:06:25 +08:00
|
|
|
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-$(CONFIG_LIBDW_DWARF_UNWIND) += unwind-libdw.o
|
|
|
|
perf-$(CONFIG_LOCAL_LIBUNWIND) += unwind-libunwind-local.o
|
|
|
|
perf-$(CONFIG_LIBUNWIND) += unwind-libunwind.o
|
|
|
|
perf-$(CONFIG_LIBUNWIND_X86) += libunwind/x86_32.o
|
|
|
|
perf-$(CONFIG_LIBUNWIND_AARCH64) += libunwind/arm64.o
|
2014-12-30 07:11:11 +08:00
|
|
|
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-$(CONFIG_LIBBABELTRACE) += data-convert-bt.o
|
perf data: Add JSON export
This adds a feature to export perf data to JSON.
The resolved symbols are exported into the JSON so that external tools
don't need to load the dsos themselves (or even have access to them at
all.) This makes it easy to load and analyze perf data with standalone
tools where direct perf or libbabeltrace integration is impractical.
The exporter uses a minimal inline JSON encoding without any external
dependencies. Currently it only outputs some headers and sample metadata
but it's easily extensible.
Use it like this:
$ perf data convert --to-json out.json
Committer notes:
Fixup a __printf() bug that broke the build:
util/data-convert-json.c:103:11: error: expected ‘)’ before numeric constant
103 | __(printf, 5, 6)
| ^~
| )
util/data-convert-json.c: In function ‘output_sample_callchain_entry’:
util/data-convert-json.c:124:2: error: implicit declaration of function ‘output_json_key_format’; did you mean ‘output_json_format’? [-Werror=implicit-function-declaration]
124 | output_json_key_format(out, false, 5, "ip", "\"0x%" PRIx64 "\"", ip);
| ^~~~~~~~~~~~~~~~~~~~~~
| output_json_format
Also had to add this patch to fix errors reported by various versions of
clang:
- if (al && al->sym && al->sym->name && strlen(al->sym->name) > 0) {
+ if (al && al->sym && al->sym->namelen) {
al->sym->name is a zero sized array, to avoid one extra alloc in the
symbol__new() constructor, sym->namelen carries its strlen.
Committer testing:
$ ls -la out.json
ls: cannot access 'out.json': No such file or directory
$ perf record sleep 0.1
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.001 MB perf.data (8 samples) ]
$ perf report --stats | grep -w SAMPLE
SAMPLE events: 8
$ perf data convert --to-json out.json
[ perf data convert: Converted 'perf.data' into JSON data 'out.json' ]
[ perf data convert: Converted and wrote 0.002 MB (8 samples) ]
$ ls -la out.json
-rw-rw-r--. 1 acme acme 2017 Apr 26 17:29 out.json
$ cat out.json
{
"linux-perf-json-version": 1,
"headers": {
"header-version": 1,
"captured-on": "2021-04-26T20:28:57Z",
"data-offset": 432,
"data-size": 1016,
"feat-offset": 1448,
"hostname": "five",
"os-release": "5.11.14-200.fc33.x86_64",
"arch": "x86_64",
"cpu-desc": "AMD Ryzen 9 3900X 12-Core Processor",
"cpuid": "AuthenticAMD,23,113,0",
"nrcpus-online": 24,
"nrcpus-avail": 24,
"perf-version": "5.12.gee134f3189bd",
"cmdline": [
"/home/acme/bin/perf",
"record",
"sleep",
"0.1"
]
},
"samples": [
{
"timestamp": 170517539043684,
"pid": 375844,
"tid": 375844,
"comm": "sleep",
"callchain": [
{
"ip": "0xffffffffa6268827"
}
]
},
{
"timestamp": 170517539048443,
"pid": 375844,
"tid": 375844,
"comm": "sleep",
"callchain": [
{
"ip": "0xffffffffa661359d"
}
]
},
{
"timestamp": 170517539051018,
"pid": 375844,
"tid": 375844,
"comm": "sleep",
"callchain": [
{
"ip": "0xffffffffa6311e18"
}
]
},
{
"timestamp": 170517539053652,
"pid": 375844,
"tid": 375844,
"comm": "sleep",
"callchain": [
{
"ip": "0x7fdb77b4812b",
"symbol": "_dl_start",
"dso": "ld-2.32.so"
}
]
},
{
"timestamp": 170517539055306,
"pid": 375844,
"tid": 375844,
"comm": "sleep",
"callchain": [
{
"ip": "0xffffffffa6269286"
}
]
},
{
"timestamp": 170517539057590,
"pid": 375844,
"tid": 375844,
"comm": "sleep",
"callchain": [
{
"ip": "0xffffffffa62abd8b"
}
]
},
{
"timestamp": 170517539067559,
"pid": 375844,
"tid": 375844,
"comm": "sleep",
"callchain": [
{
"ip": "0x7fdb77b5e9e9",
"symbol": "__GI___tunables_init",
"dso": "ld-2.32.so"
}
]
},
{
"timestamp": 170517539282452,
"pid": 375844,
"tid": 375844,
"comm": "sleep",
"callchain": [
{
"ip": "0x7fdb779978d2",
"symbol": "getenv",
"dso": "libc-2.32.so"
}
]
}
]
}
$
Signed-off-by: Nicholas Fraser <nfraser@codeweavers.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Changbin Du <changbin.du@intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Jin Yao <yao.jin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Tan Xiaojun <tanxiaojun@huawei.com>
Cc: Ulrich Czekalla <uczekalla@codeweavers.com>
Link: http://lore.kernel.org/lkml/3884969f-804d-2f53-c648-e2b0bd85edff@codeweavers.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-04-26 22:47:16 +08:00
|
|
|
perf-y += data-convert-json.o
|
perf data: Add perf data to CTF conversion support
Adding 'perf data convert' to convert perf data file into different
format. This patch adds support for CTF format conversion.
To convert perf.data into CTF run:
$ perf data convert --to-ctf=./ctf-data/
[ perf data convert: Converted 'perf.data' into CTF data './ctf-data/' ]
[ perf data convert: Converted and wrote 11.268 MB (100230 samples) ]
The command will create CTF metadata out of perf.data file (or one
specified via -i option) and then convert all sample events into single
CTF stream.
Each sample_type bit is translated into separated CTF event field apart
from following exceptions:
PERF_SAMPLE_RAW - added in next patch
PERF_SAMPLE_READ - TODO
PERF_SAMPLE_CALLCHAIN - TODO
PERF_SAMPLE_BRANCH_STACK - TODO
PERF_SAMPLE_REGS_USER - TODO
PERF_SAMPLE_STACK_USER - TODO
$ perf --debug=data-convert=2 data convert ...
The converted CTF data could be analyzed by CTF tools, like babletrace
or tracecompass [1].
$ babeltrace ./ctf-data/
[03:19:13.962125533] (+?.?????????) cycles: { }, { ip = 0xFFFFFFFF8105443A, tid = 20714, pid = 20714, period = 1 }
[03:19:13.962130001] (+0.000004468) cycles: { }, { ip = 0xFFFFFFFF8105443A, tid = 20714, pid = 20714, period = 1 }
[03:19:13.962131936] (+0.000001935) cycles: { }, { ip = 0xFFFFFFFF8105443A, tid = 20714, pid = 20714, period = 8 }
[03:19:13.962133732] (+0.000001796) cycles: { }, { ip = 0xFFFFFFFF8105443A, tid = 20714, pid = 20714, period = 114 }
[03:19:13.962135557] (+0.000001825) cycles: { }, { ip = 0xFFFFFFFF8105443A, tid = 20714, pid = 20714, period = 2087 }
[03:19:13.962137627] (+0.000002070) cycles: { }, { ip = 0xFFFFFFFF81361938, tid = 20714, pid = 20714, period = 37582 }
[03:19:13.962161091] (+0.000023464) cycles: { }, { ip = 0xFFFFFFFF8124218F, tid = 20714, pid = 20714, period = 600246 }
[03:19:13.962517569] (+0.000356478) cycles: { }, { ip = 0xFFFFFFFF811A75DB, tid = 20714, pid = 20714, period = 1325731 }
[03:19:13.969518008] (+0.007000439) cycles: { }, { ip = 0x34080917B2, tid = 20714, pid = 20714, period = 1144298 }
The following members to the ctf-environment were decided to be added to
distinguish and specify perf CTF data:
- domain
It says "kernel" because it contains a kernel trace (not to be
confused with a user space like lttng-ust does)
- tracer_name
It says perf. This can be used to distinguish between lttng and perf
CTF based trace.
- version
The kernel version from stream. In addition to release, this is what
it looks like on a Debian kernel:
release = "3.14-1-amd64";
version = "3.14.0";
[1] http://projects.eclipse.org/projects/tools.tracecompass
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Reviewed-by: David Ahern <dsahern@gmail.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jeremie Galarneau <jgalar@efficios.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: Tom Zanussi <tzanussi@gmail.com>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1424470628-5969-4-git-send-email-jolsa@kernel.org
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-02-21 06:17:00 +08:00
|
|
|
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += scripting-engines/
|
2014-12-30 20:11:32 +08:00
|
|
|
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-$(CONFIG_ZLIB) += zlib.o
|
|
|
|
perf-$(CONFIG_LZMA) += lzma.o
|
2019-03-19 01:42:55 +08:00
|
|
|
perf-$(CONFIG_ZSTD) += zstd.o
|
|
|
|
|
2019-08-07 22:44:14 +08:00
|
|
|
perf-$(CONFIG_LIBCAP) += cap.o
|
|
|
|
|
2021-02-04 05:15:37 +08:00
|
|
|
perf-y += demangle-ocaml.o
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += demangle-java.o
|
|
|
|
perf-y += demangle-rust.o
|
2016-03-08 05:48:45 +08:00
|
|
|
|
2016-03-11 00:41:13 +08:00
|
|
|
ifdef CONFIG_JITDUMP
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-$(CONFIG_LIBELF) += jitdump.o
|
|
|
|
perf-$(CONFIG_LIBELF) += genelf.o
|
|
|
|
perf-$(CONFIG_DWARF) += genelf_debug.o
|
2016-03-08 05:48:45 +08:00
|
|
|
endif
|
2014-12-30 20:30:04 +08:00
|
|
|
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-y += perf-hooks.o
|
2016-11-26 15:03:28 +08:00
|
|
|
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-$(CONFIG_LIBBPF) += bpf-event.o
|
perf tools: Handle PERF_RECORD_BPF_EVENT
This patch adds basic handling of PERF_RECORD_BPF_EVENT. Tracking of
PERF_RECORD_BPF_EVENT is OFF by default. Option --bpf-event is added to
turn it on.
Committer notes:
Add dummy machine__process_bpf_event() variant that returns zero for
systems without HAVE_LIBBPF_SUPPORT, such as Alpine Linux, unbreaking
the build in such systems.
Remove the needless include <machine.h> from bpf->event.h, provide just
forward declarations for the structs and unions in the parameters, to
reduce compilation time and needless rebuilds when machine.h gets
changed.
Committer testing:
When running with:
# perf record --bpf-event
On an older kernel where PERF_RECORD_BPF_EVENT and PERF_RECORD_KSYMBOL
is not present, we fallback to removing those two bits from
perf_event_attr, making the tool to continue to work on older kernels:
perf_event_attr:
size 112
{ sample_period, sample_freq } 4000
sample_type IP|TID|TIME|PERIOD
read_format ID
disabled 1
inherit 1
mmap 1
comm 1
freq 1
enable_on_exec 1
task 1
precise_ip 3
sample_id_all 1
exclude_guest 1
mmap2 1
comm_exec 1
ksymbol 1
bpf_event 1
------------------------------------------------------------
sys_perf_event_open: pid 5779 cpu 0 group_fd -1 flags 0x8
sys_perf_event_open failed, error -22
switching off bpf_event
------------------------------------------------------------
perf_event_attr:
size 112
{ sample_period, sample_freq } 4000
sample_type IP|TID|TIME|PERIOD
read_format ID
disabled 1
inherit 1
mmap 1
comm 1
freq 1
enable_on_exec 1
task 1
precise_ip 3
sample_id_all 1
exclude_guest 1
mmap2 1
comm_exec 1
ksymbol 1
------------------------------------------------------------
sys_perf_event_open: pid 5779 cpu 0 group_fd -1 flags 0x8
sys_perf_event_open failed, error -22
switching off ksymbol
------------------------------------------------------------
perf_event_attr:
size 112
{ sample_period, sample_freq } 4000
sample_type IP|TID|TIME|PERIOD
read_format ID
disabled 1
inherit 1
mmap 1
comm 1
freq 1
enable_on_exec 1
task 1
precise_ip 3
sample_id_all 1
exclude_guest 1
mmap2 1
comm_exec 1
------------------------------------------------------------
And then proceeds to work without those two features.
As passing --bpf-event is an explicit action performed by the user, perhaps we
should emit a warning telling that the kernel has no such feature, but this can
be done on top of this patch.
Now with a kernel that supports these events, start the 'record --bpf-event -a'
and then run 'perf trace sleep 10000' that will use the BPF
augmented_raw_syscalls.o prebuilt (for another kernel version even) and thus
should generate PERF_RECORD_BPF_EVENT events:
[root@quaco ~]# perf record -e dummy -a --bpf-event
^C[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.713 MB perf.data ]
[root@quaco ~]# bpftool prog
13: cgroup_skb tag 7be49e3934a125ba gpl
loaded_at 2019-01-19T09:09:43-0300 uid 0
xlated 296B jited 229B memlock 4096B map_ids 13,14
14: cgroup_skb tag 2a142ef67aaad174 gpl
loaded_at 2019-01-19T09:09:43-0300 uid 0
xlated 296B jited 229B memlock 4096B map_ids 13,14
15: cgroup_skb tag 7be49e3934a125ba gpl
loaded_at 2019-01-19T09:09:43-0300 uid 0
xlated 296B jited 229B memlock 4096B map_ids 15,16
16: cgroup_skb tag 2a142ef67aaad174 gpl
loaded_at 2019-01-19T09:09:43-0300 uid 0
xlated 296B jited 229B memlock 4096B map_ids 15,16
17: cgroup_skb tag 7be49e3934a125ba gpl
loaded_at 2019-01-19T09:09:44-0300 uid 0
xlated 296B jited 229B memlock 4096B map_ids 17,18
18: cgroup_skb tag 2a142ef67aaad174 gpl
loaded_at 2019-01-19T09:09:44-0300 uid 0
xlated 296B jited 229B memlock 4096B map_ids 17,18
21: cgroup_skb tag 7be49e3934a125ba gpl
loaded_at 2019-01-19T09:09:45-0300 uid 0
xlated 296B jited 229B memlock 4096B map_ids 21,22
22: cgroup_skb tag 2a142ef67aaad174 gpl
loaded_at 2019-01-19T09:09:45-0300 uid 0
xlated 296B jited 229B memlock 4096B map_ids 21,22
31: tracepoint name sys_enter tag 12504ba9402f952f gpl
loaded_at 2019-01-19T09:19:56-0300 uid 0
xlated 512B jited 374B memlock 4096B map_ids 30,29,28
32: tracepoint name sys_exit tag c1bd85c092d6e4aa gpl
loaded_at 2019-01-19T09:19:56-0300 uid 0
xlated 256B jited 191B memlock 4096B map_ids 30,29
# perf report -D | grep PERF_RECORD_BPF_EVENT | nl
1 0 55834574849 0x4fc8 [0x18]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 13
2 0 60129542145 0x5118 [0x18]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 14
3 0 64424509441 0x5268 [0x18]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 15
4 0 68719476737 0x53b8 [0x18]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 16
5 0 73014444033 0x5508 [0x18]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 17
6 0 77309411329 0x5658 [0x18]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 18
7 0 90194313217 0x57a8 [0x18]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 21
8 0 94489280513 0x58f8 [0x18]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 22
9 7 620922484360 0xb6390 [0x30]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 29
10 7 620922486018 0xb6410 [0x30]: PERF_RECORD_BPF_EVENT bpf event with type 2, flags 0, id 29
11 7 620922579199 0xb6490 [0x30]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 30
12 7 620922580240 0xb6510 [0x30]: PERF_RECORD_BPF_EVENT bpf event with type 2, flags 0, id 30
13 7 620922765207 0xb6598 [0x30]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 31
14 7 620922874543 0xb6620 [0x30]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 32
#
There, the 31 and 32 tracepoint BPF programs put in place by 'perf trace'.
Signed-off-by: Song Liu <songliubraving@fb.com>
Reviewed-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: kernel-team@fb.com
Cc: netdev@vger.kernel.org
Link: http://lkml.kernel.org/r/20190117161521.1341602-7-songliubraving@fb.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2019-01-18 00:15:18 +08:00
|
|
|
|
2019-02-13 20:32:39 +08:00
|
|
|
perf-$(CONFIG_CXX) += c++/
|
2016-11-26 15:03:34 +08:00
|
|
|
|
2020-05-06 02:29:43 +08:00
|
|
|
perf-$(CONFIG_LIBPFM4) += pfm.o
|
|
|
|
|
2014-12-30 00:42:46 +08:00
|
|
|
CFLAGS_config.o += -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
2018-05-04 21:37:27 +08:00
|
|
|
CFLAGS_llvm-utils.o += -DPERF_INCLUDE_DIR="BUILD_STR($(perf_include_dir_SQ))"
|
|
|
|
|
2015-11-30 17:02:23 +08:00
|
|
|
# avoid compiler warnings in 32-bit mode
|
|
|
|
CFLAGS_genelf_debug.o += -Wno-packed
|
2014-12-30 00:42:46 +08:00
|
|
|
|
2020-06-19 12:33:51 +08:00
|
|
|
$(OUTPUT)util/parse-events-flex.c $(OUTPUT)util/parse-events-flex.h: util/parse-events.l $(OUTPUT)util/parse-events-bison.c
|
2014-12-31 01:44:38 +08:00
|
|
|
$(call rule_mkdir)
|
2020-06-19 12:33:51 +08:00
|
|
|
$(Q)$(call echo-cmd,flex)$(FLEX) -o $(OUTPUT)util/parse-events-flex.c \
|
|
|
|
--header-file=$(OUTPUT)util/parse-events-flex.h $(PARSER_DEBUG_FLEX) $<
|
2014-12-30 00:42:46 +08:00
|
|
|
|
2020-06-19 12:33:52 +08:00
|
|
|
$(OUTPUT)util/parse-events-bison.c $(OUTPUT)util/parse-events-bison.h: util/parse-events.y
|
2014-12-31 01:44:38 +08:00
|
|
|
$(call rule_mkdir)
|
2020-06-19 12:33:52 +08:00
|
|
|
$(Q)$(call echo-cmd,bison)$(BISON) -v $< -d $(PARSER_DEBUG_BISON) \
|
|
|
|
-o $(OUTPUT)util/parse-events-bison.c -p parse_events_
|
2014-12-30 00:42:46 +08:00
|
|
|
|
2020-06-19 12:33:51 +08:00
|
|
|
$(OUTPUT)util/expr-flex.c $(OUTPUT)util/expr-flex.h: util/expr.l $(OUTPUT)util/expr-bison.c
|
2020-02-28 17:36:13 +08:00
|
|
|
$(call rule_mkdir)
|
2020-06-19 12:33:51 +08:00
|
|
|
$(Q)$(call echo-cmd,flex)$(FLEX) -o $(OUTPUT)util/expr-flex.c \
|
|
|
|
--header-file=$(OUTPUT)util/expr-flex.h $(PARSER_DEBUG_FLEX) $<
|
2020-02-28 17:36:13 +08:00
|
|
|
|
2020-06-19 12:33:52 +08:00
|
|
|
$(OUTPUT)util/expr-bison.c $(OUTPUT)util/expr-bison.h: util/expr.y
|
2017-03-21 04:17:05 +08:00
|
|
|
$(call rule_mkdir)
|
2020-06-19 12:33:52 +08:00
|
|
|
$(Q)$(call echo-cmd,bison)$(BISON) -v $< -d $(PARSER_DEBUG_BISON) \
|
|
|
|
-o $(OUTPUT)util/expr-bison.c -p expr_
|
2017-03-21 04:17:05 +08:00
|
|
|
|
2020-06-19 12:33:51 +08:00
|
|
|
$(OUTPUT)util/pmu-flex.c $(OUTPUT)util/pmu-flex.h: util/pmu.l $(OUTPUT)util/pmu-bison.c
|
2014-12-31 01:44:38 +08:00
|
|
|
$(call rule_mkdir)
|
2020-06-19 12:33:51 +08:00
|
|
|
$(Q)$(call echo-cmd,flex)$(FLEX) -o $(OUTPUT)util/pmu-flex.c \
|
|
|
|
--header-file=$(OUTPUT)util/pmu-flex.h $(PARSER_DEBUG_FLEX) $<
|
2014-12-30 00:42:46 +08:00
|
|
|
|
2020-06-19 12:33:52 +08:00
|
|
|
$(OUTPUT)util/pmu-bison.c $(OUTPUT)util/pmu-bison.h: util/pmu.y
|
2014-12-31 01:44:38 +08:00
|
|
|
$(call rule_mkdir)
|
2020-06-19 12:33:52 +08:00
|
|
|
$(Q)$(call echo-cmd,bison)$(BISON) -v $< -d $(PARSER_DEBUG_BISON) \
|
|
|
|
-o $(OUTPUT)util/pmu-bison.c -p perf_pmu_
|
2014-12-30 00:42:46 +08:00
|
|
|
|
2020-06-19 12:33:53 +08:00
|
|
|
FLEX_GE_26 := $(shell expr $(shell $(FLEX) --version | sed -e 's/flex \([0-9]\+\).\([0-9]\+\)/\1\2/g') \>\= 26)
|
|
|
|
ifeq ($(FLEX_GE_26),1)
|
|
|
|
flex_flags := -Wno-switch-enum -Wno-switch-default -Wno-unused-function -Wno-redundant-decls -Wno-sign-compare -Wno-unused-parameter -Wno-missing-prototypes -Wno-missing-declarations
|
|
|
|
CC_HASNT_MISLEADING_INDENTATION := $(shell echo "int main(void) { return 0 }" | $(CC) -Werror -Wno-misleading-indentation -o /dev/null -xc - 2>&1 | grep -q -- -Wno-misleading-indentation ; echo $$?)
|
|
|
|
ifeq ($(CC_HASNT_MISLEADING_INDENTATION), 1)
|
|
|
|
flex_flags += -Wno-misleading-indentation
|
|
|
|
endif
|
|
|
|
else
|
|
|
|
flex_flags := -w
|
|
|
|
endif
|
|
|
|
CFLAGS_parse-events-flex.o += $(flex_flags)
|
|
|
|
CFLAGS_pmu-flex.o += $(flex_flags)
|
|
|
|
CFLAGS_expr-flex.o += $(flex_flags)
|
2020-06-19 12:33:56 +08:00
|
|
|
|
|
|
|
bison_flags := -DYYENABLE_NLS=0
|
|
|
|
BISON_GE_35 := $(shell expr $(shell $(BISON) --version | grep bison | sed -e 's/.\+ \([0-9]\+\).\([0-9]\+\)/\1\2/g') \>\= 35)
|
|
|
|
ifeq ($(BISON_GE_35),1)
|
|
|
|
bison_flags += -Wno-unused-parameter -Wno-nested-externs -Wno-implicit-function-declaration -Wno-switch-enum
|
|
|
|
else
|
|
|
|
bison_flags += -w
|
|
|
|
endif
|
|
|
|
CFLAGS_parse-events-bison.o += $(bison_flags)
|
|
|
|
CFLAGS_pmu-bison.o += -DYYLTYPE_IS_TRIVIAL=0 $(bison_flags)
|
|
|
|
CFLAGS_expr-bison.o += -DYYLTYPE_IS_TRIVIAL=0 $(bison_flags)
|
2014-12-30 00:42:46 +08:00
|
|
|
|
|
|
|
$(OUTPUT)util/parse-events.o: $(OUTPUT)util/parse-events-flex.c $(OUTPUT)util/parse-events-bison.c
|
|
|
|
$(OUTPUT)util/pmu.o: $(OUTPUT)util/pmu-flex.c $(OUTPUT)util/pmu-bison.c
|
2020-02-28 17:36:13 +08:00
|
|
|
$(OUTPUT)util/expr.o: $(OUTPUT)util/expr-flex.c $(OUTPUT)util/expr-bison.c
|
2014-12-30 00:42:46 +08:00
|
|
|
|
2016-01-08 23:33:37 +08:00
|
|
|
CFLAGS_bitmap.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
2016-01-08 21:46:52 +08:00
|
|
|
CFLAGS_find_bit.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
2014-12-30 00:42:46 +08:00
|
|
|
CFLAGS_rbtree.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
2015-11-16 22:36:29 +08:00
|
|
|
CFLAGS_libstring.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
2014-12-30 00:42:46 +08:00
|
|
|
CFLAGS_hweight.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
|
|
|
CFLAGS_parse-events.o += -Wno-redundant-decls
|
2020-02-28 17:36:13 +08:00
|
|
|
CFLAGS_expr.o += -Wno-redundant-decls
|
2017-01-16 23:22:37 +08:00
|
|
|
CFLAGS_header.o += -include $(OUTPUT)PERF-VERSION-FILE
|
2014-12-30 00:42:46 +08:00
|
|
|
|
|
|
|
$(OUTPUT)util/kallsyms.o: ../lib/symbol/kallsyms.c FORCE
|
2014-12-31 01:44:38 +08:00
|
|
|
$(call rule_mkdir)
|
2014-12-30 00:42:46 +08:00
|
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
|
2019-06-27 02:27:58 +08:00
|
|
|
$(OUTPUT)util/argv_split.o: ../lib/argv_split.c FORCE
|
|
|
|
$(call rule_mkdir)
|
|
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
|
2016-01-08 23:33:37 +08:00
|
|
|
$(OUTPUT)util/bitmap.o: ../lib/bitmap.c FORCE
|
|
|
|
$(call rule_mkdir)
|
|
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
|
tools perf: Move from sane_ctype.h obtained from git to the Linux's original
We got the sane_ctype.h headers from git and kept using it so far, but
since that code originally came from the kernel sources to the git
sources, perhaps its better to just use the one in the kernel, so that
we can leverage tools/perf/check_headers.sh to be notified when our copy
gets out of sync, i.e. when fixes or goodies are added to the code we've
copied.
This will help with things like tools/lib/string.c where we want to have
more things in common with the kernel, such as strim(), skip_spaces(),
etc so as to go on removing the things that we have in tools/perf/util/
and instead using the code in the kernel, indirectly and removing things
like EXPORT_SYMBOL(), etc, getting notified when fixes and improvements
are made to the original code.
Hopefully this also should help with reducing the difference of code
hosted in tools/ to the one in the kernel proper.
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lkml.kernel.org/n/tip-7k9868l713wqtgo01xxygn12@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2019-06-26 04:27:31 +08:00
|
|
|
$(OUTPUT)util/ctype.o: ../lib/ctype.c FORCE
|
|
|
|
$(call rule_mkdir)
|
|
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
|
2016-01-08 21:46:52 +08:00
|
|
|
$(OUTPUT)util/find_bit.o: ../lib/find_bit.c FORCE
|
2014-12-31 01:44:38 +08:00
|
|
|
$(call rule_mkdir)
|
2014-12-30 00:42:46 +08:00
|
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
|
2015-07-06 09:48:21 +08:00
|
|
|
$(OUTPUT)util/rbtree.o: ../lib/rbtree.c FORCE
|
2014-12-31 01:44:38 +08:00
|
|
|
$(call rule_mkdir)
|
2014-12-30 00:42:46 +08:00
|
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
|
2015-11-16 22:36:29 +08:00
|
|
|
$(OUTPUT)util/libstring.o: ../lib/string.c FORCE
|
|
|
|
$(call rule_mkdir)
|
|
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
|
2015-07-10 03:27:25 +08:00
|
|
|
$(OUTPUT)util/hweight.o: ../lib/hweight.c FORCE
|
2014-12-31 01:44:38 +08:00
|
|
|
$(call rule_mkdir)
|
2014-12-30 00:42:46 +08:00
|
|
|
$(call if_changed_dep,cc_o_c)
|
2016-07-08 02:42:33 +08:00
|
|
|
|
|
|
|
$(OUTPUT)util/vsprintf.o: ../lib/vsprintf.c FORCE
|
|
|
|
$(call rule_mkdir)
|
|
|
|
$(call if_changed_dep,cc_o_c)
|