linux-kernelorg-stable/tools/perf/util
Jin Yao 61d9fc4449 perf script: Support filtering by hex address
'perf script' supports '-S' or '--symbol' options to only list the
records for these symbols. A symbol is typically a name or hex address.
If it's hex address, it is the start address of one symbol.

While it would be useful if we can filter trace records by any hex
address (not only the start address of symbol). So now we support
filtering trace records by more conditions, such as:

- symbol name
- start address of symbol
- any hexadecimal address
- address range

The comparison order is defined as:

1. symbol name comparison
2. symbol start address comparison.
3. any hexadecimal address comparison.
4. address range comparison.

The idea is if we can get a valid address from -S list, we add the
address to addr_list for address comparison otherwise we still leave
it to sym_list for symbol comparison.

Some examples:

  root@kbl-ppc:~# ./perf script -S ffffffff9a477308
            perf  8562 [000] 347303.578858:          1   cycles:  ffffffff9a477308 native_write_msr+0x8 ([kernel.kallsyms])
            perf  8562 [000] 347303.578860:          1   cycles:  ffffffff9a477308 native_write_msr+0x8 ([kernel.kallsyms])
            perf  8562 [000] 347303.578861:         11   cycles:  ffffffff9a477308 native_write_msr+0x8 ([kernel.kallsyms])
            perf  8562 [001] 347303.578903:          1   cycles:  ffffffff9a477308 native_write_msr+0x8 ([kernel.kallsyms])
            perf  8562 [001] 347303.578905:          1   cycles:  ffffffff9a477308 native_write_msr+0x8 ([kernel.kallsyms])
            perf  8562 [001] 347303.578906:         15   cycles:  ffffffff9a477308 native_write_msr+0x8 ([kernel.kallsyms])
            perf  8562 [002] 347303.578952:          1   cycles:  ffffffff9a477308 native_write_msr+0x8 ([kernel.kallsyms])
            perf  8562 [002] 347303.578953:          1   cycles:  ffffffff9a477308 native_write_msr+0x8 ([kernel.kallsyms])

Filter the traced records by hex address ffffffff9a477308.

  root@kbl-ppc:~# ./perf script -S ffffffff9a4dd4ce,ffffffff9a4d2de9,ffffffff9a6bf9f4
            perf  8562 [001] 347303.578911:     311706   cycles:  ffffffff9a6bf9f4 __kmalloc_node+0x204 ([kernel.kallsyms])
            perf  8562 [002] 347303.578960:     354477   cycles:  ffffffff9a4d2de9 sched_setaffinity+0x49 ([kernel.kallsyms])
            perf  8562 [003] 347303.579015:     450958   cycles:  ffffffff9a4dd4ce dequeue_task_fair+0x1ae ([kernel.kallsyms])

Filter the traced records by hex address ffffffff9a4dd4ce, ffffffff9a4d2de9, ffffffff9a6bf9f4.

  root@kbl-ppc:~# ./perf script -S ffffffff9a477309 --addr-range 16
            perf  8562 [000] 347303.578863:        291   cycles:  ffffffff9a47730a native_write_msr+0xa ([kernel.kallsyms])
            perf  8562 [001] 347303.578907:        411   cycles:  ffffffff9a47730a native_write_msr+0xa ([kernel.kallsyms])
            perf  8562 [002] 347303.578956:        462   cycles:  ffffffff9a47730f native_write_msr+0xf ([kernel.kallsyms])
            perf  8562 [003] 347303.579010:        497   cycles:  ffffffff9a47730f native_write_msr+0xf ([kernel.kallsyms])
            perf  8562 [004] 347303.579059:        429   cycles:  ffffffff9a47730f native_write_msr+0xf ([kernel.kallsyms])
            perf  8562 [005] 347303.579109:        408   cycles:  ffffffff9a47730a native_write_msr+0xa ([kernel.kallsyms])
            perf  8562 [006] 347303.579159:        460   cycles:  ffffffff9a47730f native_write_msr+0xf ([kernel.kallsyms])
            perf  8562 [007] 347303.579213:        436   cycles:  ffffffff9a47730f native_write_msr+0xf ([kernel.kallsyms])

Filter the traced records from address range [ffffffff9a477309, ffffffff9a477309 + 15].

  root@kbl-ppc:~# ./perf script -S "ffffffff9b163046,rcu_nmi_exit"
            perf  8562 [004] 347303.579060:      12013   cycles:  ffffffff9b163046 exc_nmi+0x166 ([kernel.kallsyms])
            perf  8562 [007] 347303.579214:      12138   cycles:  ffffffff9b165944 rcu_nmi_exit+0x34 ([kernel.kallsyms])

Filter by address + symbol

Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jin Yao <yao.jin@intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lore.kernel.org/lkml/20210207080935.31784-2-yao.jin@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-02-08 17:09:11 -03:00
..
arm-spe-decoder perf arm-spe: Add support for ARMv8.3-SPE 2020-11-26 09:31:46 -03:00
bpf_skel perf stat: Enable counting events for BPF programs 2021-01-20 14:25:28 -03:00
c++
cs-etm-decoder perf cs-etm: Update ARM's CoreSight hardware tracing OpenCSD library to v1.0.0 2021-01-20 14:34:20 -03:00
include tools arch: Update arch/x86/lib/mem{cpy,set}_64.S copies used in 'perf bench mem memcpy' 2020-11-12 17:55:41 -03:00
intel-pt-decoder
libunwind
scripting-engines perf scripting python: Avoid declaring function pointers with a visibility attribute 2020-11-03 08:32:43 -03:00
Build perf stat: Enable counting events for BPF programs 2021-01-20 14:25:28 -03:00
PERF-VERSION-GEN
affinity.c
affinity.h
annotate.c perf annotate: Move bpf header inclusion to inside HAVE_LIBBPF_SUPPORT 2020-11-04 09:42:41 -03:00
annotate.h
archinsn.h
arm-spe.c perf arm-spe: Refactor printing string to buffer 2020-11-26 09:31:23 -03:00
arm-spe.h
auxtrace.c perf evlist: Use the right prefix for 'struct evlist' event group methods 2020-11-30 15:00:12 -03:00
auxtrace.h perf auxtrace: Add itrace option '-M' for memory events 2020-11-11 12:24:51 -03:00
block-info.c
block-info.h
block-range.c
block-range.h
bpf-event.c perf evlist: Use the right prefix for 'struct evlist' sideband thread methods 2020-11-30 09:40:10 -03:00
bpf-event.h
bpf-loader.c perf evlist: Use the right prefix for 'struct evlist' 'find' methods 2020-11-30 09:48:07 -03:00
bpf-loader.h perf bpf: Enclose libbpf.h include within HAVE_LIBBPF_SUPPORT 2020-11-04 09:42:40 -03:00
bpf-prologue.c
bpf-prologue.h
bpf_counter.c perf stat: Enable counting events for BPF programs 2021-01-20 14:25:28 -03:00
bpf_counter.h perf stat: Enable counting events for BPF programs 2021-01-20 14:25:28 -03:00
bpf_map.c
bpf_map.h
branch.c
branch.h
build-id.c perf build-id: Add build_id_cache__add function 2020-11-27 08:37:29 -03:00
build-id.h perf build-id: Add build_id_cache__add function 2020-11-27 08:37:29 -03:00
cache.h
cacheline.c
cacheline.h
call-path.c
call-path.h
callchain.c perf streams: Report hot streams 2020-10-14 13:34:26 -03:00
callchain.h perf streams: Report hot streams 2020-10-14 13:34:26 -03:00
cap.c
cap.h
cgroup.c perf stat: Use nftw() instead of ftw() 2021-02-08 16:39:14 -03:00
cgroup.h
clockid.c
clockid.h
cloexec.c
cloexec.h
color.c
color.h
color_config.c
comm.c
comm.h
compress.h
config.c perf config: Make perf_config_global() global 2021-01-20 14:34:21 -03:00
config.h perf config: Make perf_config_global() global 2021-01-20 14:34:21 -03:00
copyfile.c
copyfile.h
counts.c
counts.h
cpu-set-sched.h
cpumap.c perf stat aggregation: Add separate thread member 2020-12-24 10:05:28 -03:00
cpumap.h perf stat aggregation: Add separate thread member 2020-12-24 10:05:28 -03:00
cputopo.c
cputopo.h
cs-etm.c
cs-etm.h
data-convert-bt.c
data-convert-bt.h
data-convert.h
data.c perf data: Add is_perf_data function 2020-11-27 08:37:15 -03:00
data.h perf data: Add is_perf_data function 2020-11-27 08:37:15 -03:00
db-export.c
db-export.h
debug.c perf debug: Add debug_set_display_time function 2021-01-20 14:34:20 -03:00
debug.h perf debug: Add debug_set_display_time function 2021-01-20 14:34:20 -03:00
demangle-java.c
demangle-java.h
demangle-rust.c
demangle-rust.h
dso.c perf tools: Add filename__decompress function 2020-11-27 08:36:53 -03:00
dso.h perf tools: Add filename__decompress function 2020-11-27 08:36:53 -03:00
dsos.c
dsos.h
dump-insn.c
dump-insn.h
dwarf-aux.c perf probe: Change function definition check due to broken DWARF 2020-11-27 14:36:15 -03:00
dwarf-aux.h
dwarf-regs.c
env.c perf env: Conditionally compile BPF support code on having HAVE_LIBBPF_SUPPORT 2020-11-04 09:42:41 -03:00
env.h perf env: Conditionally compile BPF support code on having HAVE_LIBBPF_SUPPORT 2020-11-04 09:42:41 -03:00
event.c perf script: Support filtering by hex address 2021-02-08 17:09:11 -03:00
event.h perf report: Support instruction latency 2021-02-08 16:25:00 -03:00
events_stats.h
evlist.c perf stat: Add Topdown metrics events as default events 2021-02-03 13:10:43 -03:00
evlist.h perf stat: Add Topdown metrics events as default events 2021-02-03 13:10:43 -03:00
evsel.c perf report: Support instruction latency 2021-02-08 16:25:00 -03:00
evsel.h perf tools: Support PERF_SAMPLE_WEIGHT_STRUCT 2021-02-08 16:25:00 -03:00
evsel_config.h
evsel_fprintf.c perf tools: Add 'evlist' control command 2021-01-20 14:34:21 -03:00
evsel_fprintf.h
evswitch.c perf evlist: Use the right prefix for 'struct evlist' 'find' methods 2020-11-30 09:48:07 -03:00
evswitch.h
expr.c perf expr: Force encapsulation on expr_id_data 2020-11-16 14:09:18 -03:00
expr.h perf expr: Force encapsulation on expr_id_data 2020-11-16 14:09:18 -03:00
expr.l
expr.y perf expr: Force encapsulation on expr_id_data 2020-11-16 14:09:18 -03:00
find-map.c
fncache.c
fncache.h
genelf.c
genelf.h
genelf_debug.c
generate-cmdlist.sh
get_current_dir_name.c
get_current_dir_name.h
hashmap.c perf tools: Update copy of libbpf's hashmap.c 2020-11-03 08:26:55 -03:00
hashmap.h perf tools: Update copy of libbpf's hashmap.c 2020-11-27 14:19:33 -03:00
header.c perf inject: Correct event attribute sizes 2021-01-15 17:28:28 -03:00
header.h
help-unknown-cmd.c
help-unknown-cmd.h
hist.c perf report: Support instruction latency 2021-02-08 16:25:00 -03:00
hist.h perf report: Support instruction latency 2021-02-08 16:25:00 -03:00
intel-bts.c
intel-bts.h
intel-pt.c perf report: Support instruction latency 2021-02-08 16:25:00 -03:00
intel-pt.h
intlist.c perf intlist: Change 'struct intlist' int member to 'unsigned long' 2021-02-08 17:02:00 -03:00
intlist.h perf intlist: Change 'struct intlist' int member to 'unsigned long' 2021-02-08 17:02:00 -03:00
jit.h perf inject jit: Add namespaces support 2021-02-03 13:10:44 -03:00
jitdump.c perf inject jit: Add namespaces support 2021-02-03 13:10:44 -03:00
jitdump.h
kvm-stat.h
levenshtein.c
levenshtein.h
llvm-utils.c
llvm-utils.h
lzma.c
machine.c Merge remote-tracking branch 'torvalds/master' into perf/core 2021-01-20 14:35:31 -03:00
machine.h
map.c perf tools: Store build id when available in PERF_RECORD_MMAP2 metadata events 2020-12-28 10:01:55 -03:00
map.h perf tools: Store build id when available in PERF_RECORD_MMAP2 metadata events 2020-12-28 10:01:55 -03:00
map_symbol.h perf sort: Add sort option for data page size 2020-12-19 17:52:24 -03:00
maps.h
mem-events.c perf c2c: Support data block and addr block 2021-02-08 16:25:00 -03:00
mem-events.h perf c2c: Support data block and addr block 2021-02-08 16:25:00 -03:00
mem2node.c perf mem2node: Improve warning if detected no memory nodes 2020-11-04 09:42:40 -03:00
mem2node.h
memswap.c
memswap.h
metricgroup.c perf metricgroup: Fix system PMU metrics 2021-01-21 17:25:33 -03:00
metricgroup.h
mmap.c
mmap.h
namespaces.c perf inject jit: Add namespaces support 2021-02-03 13:10:44 -03:00
namespaces.h perf inject jit: Add namespaces support 2021-02-03 13:10:44 -03:00
ordered-events.c
ordered-events.h
parse-branch-options.c
parse-branch-options.h
parse-events.c perf evlist: Use the right prefix for 'struct evlist' evsel list methods 2020-11-30 14:52:44 -03:00
parse-events.h
parse-events.l perf tools: Support the auxiliary event 2021-02-08 16:25:00 -03:00
parse-events.y
parse-regs-options.c perf record: Fix memory leak when using '--user-regs=?' to list registers 2020-12-17 14:36:16 -03:00
parse-regs-options.h
parse-sublevel-options.c
parse-sublevel-options.h
path.c
path.h
perf-hooks-list.h
perf-hooks.c
perf-hooks.h
perf_api_probe.c perf record: Add --buildid-mmap option to enable PERF_RECORD_MMAP2's build id 2020-12-28 11:35:57 -03:00
perf_api_probe.h perf record: Add --buildid-mmap option to enable PERF_RECORD_MMAP2's build id 2020-12-28 11:35:57 -03:00
perf_event_attr_fprintf.c perf tools: Support PERF_SAMPLE_WEIGHT_STRUCT 2021-02-08 16:25:00 -03:00
perf_regs.c
perf_regs.h
pfm.c
pfm.h
pmu.c perf pmu: Add pmu_add_sys_aliases() 2020-12-17 14:36:17 -03:00
pmu.h perf pmu: Add pmu_add_sys_aliases() 2020-12-17 14:36:17 -03:00
pmu.l
pmu.y
print_binary.c
print_binary.h
probe-event.c perf intlist: Change 'struct intlist' int member to 'unsigned long' 2021-02-08 17:02:00 -03:00
probe-event.h
probe-file.c perf probe: Fixup Arm64 SDT arguments 2020-12-28 09:53:28 -03:00
probe-file.h
probe-finder.c perf probe: Add protection to avoid endless loop 2021-02-08 16:25:00 -03:00
probe-finder.h
pstack.c
pstack.h
python-ext-sources perf tools: Add 'evlist' control command 2021-01-20 14:34:21 -03:00
python.c perf stat: Enable counting events for BPF programs 2021-01-20 14:25:28 -03:00
rb_resort.h
rblist.c
rblist.h
record.c perf tools: Support the auxiliary event 2021-02-08 16:25:00 -03:00
record.h perf record: Add support for PERF_SAMPLE_CODE_PAGE_SIZE 2021-01-20 14:34:20 -03:00
rlimit.c
rlimit.h
rwsem.c
rwsem.h
s390-cpumcf-kernel.h
s390-cpumsf-kernel.h
s390-cpumsf.c perf evlist: Use the right prefix for 'struct evlist' sample id lookup methods 2020-11-30 14:17:57 -03:00
s390-cpumsf.h
s390-sample-raw.c perf evlist: Use the right prefix for 'struct evlist' raw samples methods 2020-11-30 15:15:30 -03:00
sample-raw.c perf evlist: Use the right prefix for 'struct evlist' raw samples methods 2020-11-30 15:15:30 -03:00
sample-raw.h perf evlist: Use the right prefix for 'struct evlist' raw samples methods 2020-11-30 15:15:30 -03:00
session.c perf report: Support instruction latency 2021-02-08 16:25:00 -03:00
session.h
setns.c
setup.py perf tools: Add 'evlist' control command 2021-01-20 14:34:21 -03:00
sideband_evlist.c perf evlist: Use the right prefix for 'struct evlist' create maps methods 2020-11-30 14:56:52 -03:00
smt.c
smt.h
sort.c perf report: Support instruction latency 2021-02-08 16:25:00 -03:00
sort.h perf report: Support instruction latency 2021-02-08 16:25:00 -03:00
spark.c
spark.h
srccode.c
srccode.h
srcline.c
srcline.h
stat-display.c perf stat: Enable counting events for BPF programs 2021-01-20 14:25:28 -03:00
stat-shadow.c perf stat: Support L2 Topdown events 2021-02-08 16:25:00 -03:00
stat.c perf stat: Support L2 Topdown events 2021-02-08 16:25:00 -03:00
stat.h perf stat: Support L2 Topdown events 2021-02-08 16:25:00 -03:00
strbuf.c
strbuf.h
stream.c perf streams: Report hot streams 2020-10-14 13:34:26 -03:00
stream.h perf streams: Report hot streams 2020-10-14 13:34:26 -03:00
strfilter.c
strfilter.h
string.c
string2.h
strlist.c
strlist.h
svghelper.c
svghelper.h
symbol-elf.c perf tools: Add support to read build id from compressed elf 2020-12-17 14:36:17 -03:00
symbol-minimal.c
symbol.c perf script: Support filtering by hex address 2021-02-08 17:09:11 -03:00
symbol.h perf tools: Fix crash with non-jited bpf progs 2020-11-03 08:30:34 -03:00
symbol_conf.h perf script: Support filtering by hex address 2021-02-08 17:09:11 -03:00
symbol_fprintf.c
symsrc.h
synthetic-events.c perf report: Support instruction latency 2021-02-08 16:25:00 -03:00
synthetic-events.h
syscalltbl.c
syscalltbl.h
target.c perf stat: Enable counting events for BPF programs 2021-01-20 14:25:28 -03:00
target.h perf stat: Enable counting events for BPF programs 2021-01-20 14:25:28 -03:00
term.c
term.h
thread-stack.c
thread-stack.h
thread.c
thread.h
thread_map.c
thread_map.h
time-utils.c
time-utils.h
tool.h
top.c
top.h
topdown.c
topdown.h
trace-event-info.c perf trace-event-info: Rename for_each_event. 2021-02-03 13:13:53 -03:00
trace-event-parse.c
trace-event-read.c
trace-event-scripting.c
trace-event.c
trace-event.h
trigger.h
tsc.c
tsc.h
units.c
units.h
unwind-libdw.c perf unwind: Fix separate debug info files when using elfutils' libdw's unwinder 2020-12-17 14:36:16 -03:00
unwind-libdw.h
unwind-libunwind-local.c
unwind-libunwind.c
unwind.h
usage.c
util.c
util.h
values.c
values.h
vdso.c
vdso.h
xyarray.c
zlib.c
zstd.c