perf/core improvements and fixes
Arnaldo Carvalho de Melo
maintainerHi Ingo,
Please consider pulling,
- Arnaldo
Test results at the end of this message, as usual.
The following changes since commit 1159e09476536250c2a0173d4298d15114df7a89:
perf/x86/intel: Enable C-state residency events for Cannon Lake (2018-03-31 11:28:36 +0200)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-4.17-20180403
for you to fetch changes up to 51125a29a395048fdb3429b8c4ca0ada57097744:
perf trace: Remove redundant ')' (2018-04-03 16:16:41 -0300)
----------------------------------------------------------------
perf/core improvements and fixes:
- Show only failing syscalls with 'perf trace --failure' (Arnaldo Carvalho de Melo)
e.g: See what 'openat' syscalls are failing:
# perf trace --failure -e openat 762.323 ( 0.007 ms): VideoCapture/4566 openat(dfd: CWD, filename: /dev/video2) = -1 ENOENT No such file or directory <SNIP N /dev/videoN open attempts... sigh, where is that improvised camera lid?!? 8-) > 790.228 ( 0.008 ms): VideoCapture/4566 openat(dfd: CWD, filename: /dev/video63) = -1 ENOENT No such file or directory ^C#
- Show information about the event (freq, nr_samples, total period/nr_events) in the annotate --tui and --stdio2 'perf annotate' output, similar to the first line in the 'perf report --tui', but just for the samples for the annotated symbol (Arnaldo Carvalho de Melo)
- Introduce 'perf version --build-options' to show what features were linked, aliased as well as a shorter 'perf -vv' (Jin Yao)
- Add a "dso_size" sort order (Kim Phillips)
- Remove redundant ')' in the tracepoint output in 'perf trace' (Changbin Du)
- Synchronize x86's cpufeatures.h, no effect on tools (Arnaldo Carvalho de Melo)
----------------------------------------------------------------
Arnaldo Carvalho de Melo (9):
tools headers: Synchronize x86's cpufeatures.h
perf trace: Show only failing syscalls
perf hists browser: Rename perf_evsel_browser_title to a more descriptive name perf hists: Introduce hists__scnprint_title()
perf hists: Move hists__scnprintf_title() away from the TUI code perf ui browser: Move the extra title lines from the hists browser perf annotate: Introduce annotation__scnprintf_samples_period() method perf annotate browser: Show extra title line with event information perf annotate stdio2: Print more descriptive event information header
Changbin Du (1):
perf trace: Remove redundant ')'
Jin Yao (5):
perf config: Add some new -DHAVE_XXX to CFLAGS
perf config: Rename to HAVE_DWARF_GETLOCATIONS_SUPPORT
perf version: Print the compiled-in status of libraries perf tools: Add 'perf -vv' as an alias to 'perf version --build-options' perf version: Add man page
Jiri Olsa (1):
tools include: Add config.h header file
Kim Phillips (1):
perf tools: Add a "dso_size" sort order
tools/arch/x86/include/asm/cpufeatures.h | 2 + tools/include/tools/config.h | 34 ++++++++ tools/perf/Documentation/perf-report.txt | 1 + tools/perf/Documentation/perf-trace.txt | 3 + tools/perf/Documentation/perf-version.txt | 24 ++++++ tools/perf/Makefile.config | 8 +- tools/perf/builtin-trace.c | 11 ++- tools/perf/builtin-version.c | 82 +++++++++++++++++++- tools/perf/perf.c | 6 ++ tools/perf/perf.h | 1 + tools/perf/ui/browser.c | 8 +- tools/perf/ui/browser.h | 2 + tools/perf/ui/browsers/annotate.c | 31 +++++++- tools/perf/ui/browsers/hists.c | 125 +++++++----------------------- tools/perf/util/annotate.c | 48 ++++++++++-- tools/perf/util/annotate.h | 12 +++ tools/perf/util/dwarf-aux.c | 2 +- tools/perf/util/hist.c | 81 +++++++++++++++++++ tools/perf/util/hist.h | 7 ++ tools/perf/util/map.h | 4 + tools/perf/util/sort.c | 41 ++++++++++ tools/perf/util/sort.h | 1 + 22 files changed, 418 insertions(+), 116 deletions(-) create mode 100644 tools/include/tools/config.h create mode 100644 tools/perf/Documentation/perf-version.txt
Test results:
The first ones are container (docker) based builds of tools/perf with and without libelf support. Where clang is available, it is also used to build perf with/without libelf.
The objtool and samples/bpf/ builds are disabled now that I'm switching from using the sources in a local volume to fetching them from a http server to build it inside the container, to make it easier to build in a container cluster. Those will come back later.
Several are cross builds, the ones with -x-ARCH and the android one, and those may not have all the features built, due to lack of multi-arch devel packages, available and being used so far on just a few, like debian:experimental-x-{arm64,mipsel}.
The 'perf test' one will perform a variety of tests exercising tools/perf/util/, tools/lib/{bpf,traceevent,etc}, as well as run perf commands with a variety of command line event specifications to then intercept the sys_perf_event syscall to check that the perf_event_attr fields are set up as expected, among a variety of other unit tests.
Then there is the 'make -C tools/perf build-test' ones, that build tools/perf/ with a variety of feature sets, exercising the build with an incomplete set of features as well as with a complete one. It is planned to have it run on each of the containers mentioned above, using some container orchestration infrastructure. Get in contact if interested in helping having this in place.
# dm 1 alpine:3.4 : Ok gcc (Alpine 5.3.0) 5.3.0 2 alpine:3.5 : Ok gcc (Alpine 6.2.1) 6.2.1 20160822 3 alpine:3.6 : Ok gcc (Alpine 6.3.0) 6.3.0 4 alpine:3.7 : Ok gcc (Alpine 6.4.0) 6.4.0 5 alpine:edge : Ok gcc (Alpine 6.4.0) 6.4.0 6 amazonlinux:1 : Ok gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11) 7 amazonlinux:2 : Ok gcc (GCC) 7.2.1 20170915 (Red Hat 7.2.1-2) 8 android-ndk:r12b-arm : Ok arm-linux-androideabi-gcc (GCC) 4.9.x 20150123 (prerelease) 9 android-ndk:r15c-arm : Ok arm-linux-androideabi-gcc (GCC) 4.9.x 20150123 (prerelease) 10 centos:5 : Ok gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-55) 11 centos:6 : Ok gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18) 12 centos:7 : Ok gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16) 13 debian:7 : Ok gcc (Debian 4.7.2-5) 4.7.2 14 debian:8 : Ok gcc (Debian 4.9.2-10+deb8u1) 4.9.2 15 debian:9 : Ok gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516 16 debian:experimental : Ok gcc (Debian 7.3.0-14) 7.3.0 17 debian:experimental-x-arm64 : Ok aarch64-linux-gnu-gcc (Debian 7.3.0-12) 7.3.0 18 debian:experimental-x-mips : Ok mips-linux-gnu-gcc (Debian 7.3.0-12) 7.3.0 19 debian:experimental-x-mips64 : Ok mips64-linux-gnuabi64-gcc (Debian 7.3.0-12) 7.3.0 20 debian:experimental-x-mipsel : Ok mipsel-linux-gnu-gcc (Debian 7.3.0-12) 7.3.0 21 fedora:20 : Ok gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-7) 22 fedora:21 : Ok gcc (GCC) 4.9.2 20150212 (Red Hat 4.9.2-6) 23 fedora:22 : Ok gcc (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6) 24 fedora:23 : Ok gcc (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6) 25 fedora:24 : Ok gcc (GCC) 6.3.1 20161221 (Red Hat 6.3.1-1) 26 fedora:24-x-ARC-uClibc : Ok arc-linux-gcc (ARCompact ISA Linux uClibc toolchain 2017.09-rc2) 7.1.1 20170710 27 fedora:25 : Ok gcc (GCC) 6.4.1 20170727 (Red Hat 6.4.1-1) 28 fedora:26 : Ok gcc (GCC) 7.3.1 20180130 (Red Hat 7.3.1-2) 29 fedora:27 : Ok gcc (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5) 30 fedora:28 : Ok gcc (GCC) 8.0.1 20180324 (Red Hat 8.0.1-0.20) 31 fedora:rawhide : Ok gcc (GCC) 8.0.1 20180222 (Red Hat 8.0.1-0.16) 32 gentoo-stage3-amd64:latest : Ok gcc (Gentoo 6.4.0-r1 p1.3) 6.4.0 33 mageia:5 : Ok gcc (GCC) 4.9.2 34 mageia:6 : Ok gcc (Mageia 5.5.0-1.mga6) 5.5.0 35 opensuse:42.1 : Ok gcc (SUSE Linux) 4.8.5 36 opensuse:42.2 : Ok gcc (SUSE Linux) 4.8.5 37 opensuse:42.3 : Ok gcc (SUSE Linux) 4.8.5 38 opensuse:tumbleweed : Ok gcc (SUSE Linux) 7.3.0 39 oraclelinux:6 : Ok gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18) 40 oraclelinux:7 : Ok gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16.0.3) 41 ubuntu:12.04.5 : Ok gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 42 ubuntu:14.04.4 : Ok gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4 43 ubuntu:14.04.4-x-linaro-arm64 : Ok aarch64-linux-gnu-gcc (Linaro GCC 5.4-2017.05) 5.4.1 20170404 44 ubuntu:15.04 : Ok gcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2 45 ubuntu:16.04 : Ok gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 46 ubuntu:16.04-x-arm : Ok arm-linux-gnueabihf-gcc (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 47 ubuntu:16.04-x-arm64 : Ok aarch64-linux-gnu-gcc (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 48 ubuntu:16.04-x-powerpc : Ok powerpc-linux-gnu-gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 49 ubuntu:16.04-x-powerpc64 : Ok powerpc64-linux-gnu-gcc (Ubuntu/IBM 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 50 ubuntu:16.04-x-powerpc64el : Ok powerpc64le-linux-gnu-gcc (Ubuntu/IBM 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 51 ubuntu:16.04-x-s390 : Ok s390x-linux-gnu-gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 52 ubuntu:16.10 : Ok gcc (Ubuntu 6.2.0-5ubuntu12) 6.2.0 20161005 53 ubuntu:17.04 : Ok gcc (Ubuntu 6.3.0-12ubuntu2) 6.3.0 20170406 53 ubuntu:17.10 : Ok gcc (Ubuntu 7.2.0-8ubuntu3) 7.2.0 54 ubuntu:18.04 : Ok gcc (Ubuntu 7.2.0-16ubuntu1) 7.2.0
# uname -a Linux jouet 4.16.0-rc7 #3 SMP Mon Mar 26 14:35:30 -03 2018 x86_64 x86_64 x86_64 GNU/Linux # perf test 1: vmlinux symtab matches kallsyms : Ok 2: Detect openat syscall event : Ok 3: Detect openat syscall event on all cpus : Ok 4: Read samples using the mmap interface : Ok 5: Test data source output : Ok 6: Parse event definition strings : Ok 7: Simple expression parser : Ok 8: PERF_RECORD_* events & perf_sample fields : Ok 9: Parse perf pmu format : Ok 10: DSO data read : Ok 11: DSO data cache : Ok 12: DSO data reopen : Ok 13: Roundtrip evsel->name : Ok 14: Parse sched tracepoints fields : Ok 15: syscalls:sys_enter_openat event fields : Ok 16: Setup struct perf_event_attr : Ok 17: Match and link multiple hists : Ok 18: 'import perf' in python : Ok 19: Breakpoint overflow signal handler : Ok 20: Breakpoint overflow sampling : Ok 21: Breakpoint accounting : Skip 22: Number of exit events of a simple workload : Ok 23: Software clock events period values : Ok 24: Object code reading : Ok 25: Sample parsing : Ok 26: Use a dummy software event to keep tracking : Ok 27: Parse with no sample_id_all bit set : Ok 28: Filter hist entries : Ok 29: Lookup mmap thread : Ok 30: Share thread mg : Ok 31: Sort output of hist entries : Ok 32: Cumulate child hist entries : Ok 33: Track with sched_switch : Ok 34: Filter fds with revents mask in a fdarray : Ok 35: Add fd to a fdarray, making it autogrow : Ok 36: kmod_path__parse : Ok 37: Thread map : Ok 38: LLVM search and compile : 38.1: Basic BPF llvm compile : Ok 38.2: kbuild searching : Ok 38.3: Compile source for BPF prologue generation : Ok 38.4: Compile source for BPF relocation : Ok 39: Session topology : Ok 40: BPF filter : 40.1: Basic BPF filtering : Ok 40.2: BPF pinning : Ok 40.3: BPF prologue generation : Ok 40.4: BPF relocation checker : Ok 41: Synthesize thread map : Ok 42: Remove thread map : Ok 43: Synthesize cpu map : Ok 44: Synthesize stat config : Ok 45: Synthesize stat : Ok 46: Synthesize stat round : Ok 47: Synthesize attr update : Ok 48: Event times : Ok 49: Read backward ring buffer : Ok 50: Print cpu map : Ok 51: Probe SDT events : Ok 52: is_printable_array : Ok 53: Print bitmap : Ok 54: perf hooks : Ok 55: builtin clang support : Skip (not compiled in) 56: unit_number__scnprintf : Ok 57: mem2node : Ok 58: x86 rdpmc : Ok 59: Convert perf time to TSC : Ok 60: DWARF unwind : Ok 61: x86 instruction decoder - new instructions : Ok 62: Use vfs_getname probe to get syscall args filenames : Ok 63: probe libc's inet_pton & backtrace it with ping : Ok 64: Check open filename arg using perf trace + vfs_getname: Ok 65: probe libc's inet_pton & backtrace it with ping : Ok 66: Add vfs_getname probe to get syscall args filenames : Ok #
$ make -C tools/perf build-test
make: Entering directory '/home/acme/git/perf/tools/perf'
- tarpkg: ./tests/perf-targz-src-pkg .
make_install_O: make install
make_install_bin_O: make install-bin
make_pure_O: make
make_clean_all_O: make clean all
make_help_O: make help
make_no_ui_O: make NO_NEWT=1 NO_SLANG=1 NO_GTK2=1
make_no_slang_O: make NO_SLANG=1
make_no_auxtrace_O: make NO_AUXTRACE=1
make_no_libpython_O: make NO_LIBPYTHON=1
make_no_libbionic_O: make NO_LIBBIONIC=1
make_no_libbpf_O: make NO_LIBBPF=1
make_no_backtrace_O: make NO_BACKTRACE=1
make_minimal_O: make NO_LIBPERL=1 NO_LIBPYTHON=1 NO_NEWT=1 NO_GTK2=1 NO_DEMANGLE=1 NO_LIBELF=1 NO_LIBUNWIND=1 NO_BACKTRACE=1 NO_LIBNUMA=1 NO_LIBAUDIT=1 NO_LIBBIONIC=1 NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1 NO_LIBBPF=1 NO_LIBCRYPTO=1 NO_SDT=1 NO_JVMTI=1
make_no_libnuma_O: make NO_LIBNUMA=1
make_no_libperl_O: make NO_LIBPERL=1
make_util_pmu_bison_o_O: make util/pmu-bison.o
make_no_libdw_dwarf_unwind_O: make NO_LIBDW_DWARF_UNWIND=1
make_static_O: make LDFLAGS=-static
make_doc_O: make doc
make_no_libaudit_O: make NO_LIBAUDIT=1
make_no_libelf_O: make NO_LIBELF=1
make_tags_O: make tags
make_no_demangle_O: make NO_DEMANGLE=1
make_no_libunwind_O: make NO_LIBUNWIND=1
make_no_newt_O: make NO_NEWT=1
make_with_babeltrace_O: make LIBBABELTRACE=1
make_util_map_o_O: make util/map.o
make_debug_O: make DEBUG=1
make_with_clangllvm_O: make LIBCLANGLLVM=1
make_perf_o_O: make perf.o
make_install_prefix_slash_O: make install prefix=/tmp/krava/
make_no_scripts_O: make NO_LIBPYTHON=1 NO_LIBPERL=1
make_no_gtk2_O: make NO_GTK2=1
make_install_prefix_O: make install prefix=/tmp/krava
OK
make: Leaving directory '/home/acme/git/perf/tools/perf'
$Arnaldo Carvalho de Melo
maintainerPATCH 1/17 perf tools: Add a "dso_size" sort order
From: Kim Phillips <[email protected]>
Add DSO size to perf report/top sort output list.
This includes adding a map__size fn to map.h, which is approximately equal to the DSO data file_size:
DSO file size map (end-start) file / (end-start)
libwebkit2gtk-4.0.so.37.24.9 43260072 41295872 95%
libglib-2.0.so.0.5400.1 1125680 1118208 99%
libc-2.26.so 1960656 1925120 101%
libdbus-1.so.3.14.13 309456 303104 102%
Sample output:
$ ./perf report -s dso_size,dso
Samples: 2K of event 'cycles:uppp', Event count (approx.): 128373340
Overhead DSO size Shared Object
90.62% unknown [unknown]
2.87% 1118208 libglib-2.0.so.0.5400.1
1.92% 303104 libdbus-1.so.3.14.13
1.42% 1925120 libc-2.26.so
0.77% 41295872 libwebkit2gtk-4.0.so.37.24.9
0.61% 335872 libgobject-2.0.so.0.5400.1
0.41% 1052672 libgdk-3.so.0.2200.25
0.36% 106496 libpthread-2.26.so
0.29% 221184 dbus-daemon
0.17% 159744 ld-2.26.so
0.13% 49152 libwayland-client.so.0.3.0
0.12% 1642496 libgio-2.0.so.0.5400.1
0.09% 7327744 libgtk-3.so.0.2200.25
0.09% 12324864 libmozjs-52.so.0.0.0
0.05% 4796416 perf
0.04% 843776 libgjs.so.0.0.0
0.03% 1409024 libmutter-clutter-1.soCommitter testing:
To sort by DSO size, use:
# perf report -F dso_size,dso,overhead -s dso_size
<SNIP>
3465216 libdns-export.so.174.0.1 0.00%
3522560 libgc.so.1.0.3 0.00%
3538944 libbfd-2.29-13.fc27.so 0.59%
3670016 libunistring.so.2.1.0 0.00%
3723264 libguile-2.0.so.22.8.1 0.00%
3776512 libgio-2.0.so.0.5400.3 0.00%
3891200 libc-2.26.so 0.96%
3944448 libmozjs-17.0.so 0.00%
4218880 libperl.so.5.26.1 0.18%
4452352 libpython2.7.so.1.0 0.02%
4472832 perf 0.02%
4603904 git 0.01%
4751360 libcrypto.so.1.1.0g 0.00%
5005312 libslang.so.2.3.1 0.00%
7315456 libgtk-3.so.0.2200.26 0.09%
8818688 i965_dri.so 2.46%
8818688 i965_dri.so (deleted) 1.26%
12414976 libmozjs-52.so.0.0.0 0.03%
23642112 cc1 2.02%
27889664 [kernel.kallsyms] 25.41%
80834560 libxul.so (deleted) 15.68%
98078720 chrome 32.03%
1056964608 [kernel.kallsyms] 1.59%
#--- tools/perf/Documentation/perf-report.txt | 1 + tools/perf/util/hist.h | 1 + tools/perf/util/map.h | 4 ++++ tools/perf/util/sort.c | 41 ++++++++++++++++++++++++++++++++ tools/perf/util/sort.h | 1 + 5 files changed, 48 insertions(+)
tools/perf/Documentation/perf-report.txt +1 -0
@@ -80,6 +80,7 @@ OPTIONS - comm: command (name) of the task which can be read via /proc/<pid>/comm - pid: command and tid of the task - dso: name of library or module executed at the time of sample + - dso_size: size of library or module executed at the time of sample - symbol: name of function executed at the time of sample - symbol_size: size of function executed at the time of sample - parent: name of function matched to the parent regex filter. Unmatched
tools/perf/util/hist.h +1 -0
@@ -61,6 +61,7 @@ enum hist_column {HISTC_SRCLINE_TO ,HISTC_TRACE ,HISTC_SYM_SIZE , +HISTC_DSO_SIZE , HISTC_NR_COLS, /* Last entry */ };
tools/perf/util/map.h +4 -0
@@ -103,6 +103,10 @@ static inline u64 identity__map_ip(struct map *map __maybe_unused, u64 ip)return ip; } +static inline size_t map__size (const struct map *map) +{ +return map->end - map->start; +}/* rip/ip <-> addr suitable for passing to `objdump --start-address=` */ u64 map__rip_2objdump (struct map *map,u64 rip);
tools/perf/util/sort.c +41 -0
53 lines not on this page · raw message
tools/perf/util/sort.h +1 -0
@@ -220,6 +220,7 @@ enum sort_type {SORT_TRANSACTION ,SORT_TRACE ,SORT_SYM_SIZE , +SORT_DSO_SIZE , SORT_CGROUP_ID,/* branch stack specific sort keys */
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 2/17 tools headers: Synchronize x86's cpufeatures.h
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
Due to these commits:
1da961d72ab0 ("x86/cpufeatures: Add Intel Total Memory Encryption cpufeature") 7958b2246fad ("x86/cpufeatures: Add Intel PCONFIG cpufeature")
To silence this perf build warning:
Warning: Kernel ABI header at 'tools/arch/x86/include/asm/cpufeatures.h' differs from latest version at 'arch/x86/include/asm/cpufeatures.h'
Nothing in those csets requires changes in tools/perf/, so just sync it to silence the build.
--- tools/arch/x86/include/asm/cpufeatures.h | 2 ++ 1 file changed, 2 insertions(+)
tools/arch/x86/include/asm/cpufeatures.h +2 -0
@@ -316,6 +316,7 @@#define X86_FEATURE_VPCLMULQDQ (16*32+10)/* Carry-Less Multiplication Double Quadword */ #define X86_FEATURE_AVX512_VNNI (16*32+11)/* Vector Neural Network Instructions */ #define X86_FEATURE_AVX512_BITALG (16*32+12)/* Support for VPOPCNT[B,W] and VPSHUF-BITQMB instructions */ +#define X86_FEATURE_TME (16*32+13)/* Intel Total Memory Encryption */ #define X86_FEATURE_AVX512_VPOPCNTDQ (16*32+14)/* POPCNT for vectors of DW/QW */ #define X86_FEATURE_LA57 (16*32+16)/* 5-level page tables */ #define X86_FEATURE_RDPID (16*32+22)/* RDPID instruction */
@@ -328,6 +329,7 @@/* Intel-defined CPU features, CPUID level 0x00000007:0 (EDX), word 18 */ #define X86_FEATURE_AVX512_4VNNIW (18*32+ 2)/* AVX-512 Neural Network Instructions */ #define X86_FEATURE_AVX512_4FMAPS (18*32+ 3)/* AVX-512 Multiply Accumulation Single precision */ +#define X86_FEATURE_PCONFIG (18*32+18)/* Intel PCONFIG */ #define X86_FEATURE_SPEC_CTRL (18*32+26)/* "" Speculation Control (IBRS + IBPB) */ #define X86_FEATURE_INTEL_STIBP (18*32+27)/* "" Single Thread Indirect Branch Predictors */ #define X86_FEATURE_ARCH_CAPABILITIES (18*32+29)/* IA32_ARCH_CAPABILITIES MSR (Intel) */
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 3/17 perf trace: Show only failing syscalls
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
For instance:
# perf probe "vfs_getname=getname_flags:72 pathname=result->name:string"
Added new event:
probe:vfs_getname (on getname_flags:72 with pathname=result->name:string)You can now use it in all perf tools, such as:
perf record -e probe:vfs_getname -aR sleep 1
# perf trace --failure sleep 1
0.043 ( 0.010 ms): sleep/10978 access(filename: /etc/ld.so.preload, mode: R) = -1 ENOENT No such file or directoryFor reference, here are all the syscalls in this case:
# perf trace sleep 1
? ( ): sleep/10976 ... [continued]: execve()) = 0
0.027 ( 0.001 ms): sleep/10976 brk() = 0x55bdc2d04000
0.044 ( 0.010 ms): sleep/10976 access(filename: /etc/ld.so.preload, mode: R) = -1 ENOENT No such file or directory
0.057 ( 0.006 ms): sleep/10976 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC) = 3
0.064 ( 0.002 ms): sleep/10976 fstat(fd: 3, statbuf: 0x7fffac22b370) = 0
0.067 ( 0.003 ms): sleep/10976 mmap(len: 111457, prot: READ, flags: PRIVATE, fd: 3) = 0x7feec8615000
0.071 ( 0.001 ms): sleep/10976 close(fd: 3) = 0
0.080 ( 0.007 ms): sleep/10976 openat(dfd: CWD, filename: /lib64/libc.so.6, flags: CLOEXEC) = 3
0.088 ( 0.002 ms): sleep/10976 read(fd: 3, buf: 0x7fffac22b538, count: 832) = 832
0.092 ( 0.001 ms): sleep/10976 fstat(fd: 3, statbuf: 0x7fffac22b3d0) = 0
0.094 ( 0.002 ms): sleep/10976 mmap(len: 8192, prot: READ|WRITE, flags: PRIVATE|ANONYMOUS) = 0x7feec8613000
0.099 ( 0.004 ms): sleep/10976 mmap(len: 3889792, prot: EXEC|READ, flags: PRIVATE|DENYWRITE, fd: 3) = 0x7feec8057000
0.104 ( 0.007 ms): sleep/10976 mprotect(start: 0x7feec8203000, len: 2097152) = 0
0.112 ( 0.005 ms): sleep/10976 mmap(addr: 0x7feec8403000, len: 24576, prot: READ|WRITE, flags: PRIVATE|DENYWRITE|FIXED, fd: 3, off: 1753088) = 0x7feec8403000
0.120 ( 0.003 ms): sleep/10976 mmap(addr: 0x7feec8409000, len: 14976, prot: READ|WRITE, flags: PRIVATE|ANONYMOUS|FIXED) = 0x7feec8409000
0.128 ( 0.001 ms): sleep/10976 close(fd: 3) = 0
0.139 ( 0.001 ms): sleep/10976 arch_prctl(option: 4098, arg2: 140663540761856) = 0
0.186 ( 0.004 ms): sleep/10976 mprotect(start: 0x7feec8403000, len: 16384, prot: READ) = 0
0.204 ( 0.003 ms): sleep/10976 mprotect(start: 0x55bdc0ec3000, len: 4096, prot: READ) = 0
0.209 ( 0.004 ms): sleep/10976 mprotect(start: 0x7feec8631000, len: 4096, prot: READ) = 0
0.214 ( 0.010 ms): sleep/10976 munmap(addr: 0x7feec8615000, len: 111457) = 0
0.269 ( 0.001 ms): sleep/10976 brk() = 0x55bdc2d04000
0.271 ( 0.002 ms): sleep/10976 brk(brk: 0x55bdc2d25000) = 0x55bdc2d25000
0.274 ( 0.001 ms): sleep/10976 brk() = 0x55bdc2d25000
0.278 ( 0.007 ms): sleep/10976 open(filename: /usr/lib/locale/locale-archive, flags: CLOEXEC) = 3
0.288 ( 0.001 ms): sleep/10976 fstat(fd: 3</usr/lib/locale/locale-archive>, statbuf: 0x7feec8408aa0) = 0
0.290 ( 0.003 ms): sleep/10976 mmap(len: 113045344, prot: READ, flags: PRIVATE, fd: 3) = 0x7feec1488000
0.297 ( 0.001 ms): sleep/10976 close(fd: 3</usr/lib/locale/locale-archive>) = 0
0.325 (1000.193 ms): sleep/10976 nanosleep(rqtp: 0x7fffac22c0b0) = 0
1000.560 ( 0.006 ms): sleep/10976 close(fd: 1) = 0
1000.573 ( 0.005 ms): sleep/10976 close(fd: 2) = 0
1000.596 ( ): sleep/10976 exit_group()
#And can be done systemwide, etc, with backtraces:
# perf trace --max-stack=16 --failure sleep 1
0.048 ( 0.015 ms): sleep/11092 access(filename: /etc/ld.so.preload, mode: R) = -1 ENOENT No such file or directory
__access (inlined)
dl_main (/usr/lib64/ld-2.26.so)
#Or for some specific syscalls:
# perf trace --max-stack=16 -e openat --failure cat /tmp/rien
cat: /tmp/rien: No such file or directory
0.251 ( 0.012 ms): cat/11106 openat(dfd: CWD, filename: /tmp/rien) = -1 ENOENT No such file or directory
__libc_open64 (inlined)
main (/usr/bin/cat)
__libc_start_main (/usr/lib64/libc-2.26.so)
_start (/usr/bin/cat)
#Look for inotify* syscalls that fail, system wide, for 2 seconds, with backtraces:
# perf trace -a --max-stack=16 --failure -e inotify* sleep 2
819.165 ( 0.058 ms): gmain/1724 inotify_add_watch(fd: 8<anon_inode:inotify>, pathname: /home/acme/~, mask: 16789454) = -1 ENOENT No such file or directory
__GI_inotify_add_watch (inlined)
_ik_watch (/usr/lib64/libgio-2.0.so.0.5400.3)
_ip_start_watching (/usr/lib64/libgio-2.0.so.0.5400.3)
im_scan_missing (/usr/lib64/libgio-2.0.so.0.5400.3)
g_timeout_dispatch (/usr/lib64/libglib-2.0.so.0.5400.3)
g_main_context_dispatch (/usr/lib64/libglib-2.0.so.0.5400.3)
g_main_context_iterate.isra.23 (/usr/lib64/libglib-2.0.so.0.5400.3)
g_main_context_iteration (/usr/lib64/libglib-2.0.so.0.5400.3)
glib_worker_main (/usr/lib64/libglib-2.0.so.0.5400.3)
g_thread_proxy (/usr/lib64/libglib-2.0.so.0.5400.3)
start_thread (/usr/lib64/libpthread-2.26.so)
__GI___clone (inlined)
#--- tools/perf/Documentation/perf-trace.txt | 3 +++ tools/perf/builtin-trace.c | 9 ++++++--- 2 files changed, 9 insertions(+), 3 deletions(-)
tools/perf/Documentation/perf-trace.txt +3 -0
@@ -117,6 +117,9 @@ the thread executes on the designated CPUs. Default is to monitor all CPUs. --sched:: Accrue thread runtime and provide a summary at the end of the session. +--failure:: + Show only syscalls that failed, i.e. that returned < 0. + -i:: --input:: Process events from a given perf data file.
tools/perf/builtin-trace.c +6 -3
@@ -112,6 +112,7 @@ struct trace {bool multiple_threads;bool summary;bool summary_only; +bool failure_only;bool show_comm;bool print_sample;bool show_tool_stats;
@@ -1565,7 +1566,7 @@ static int trace__printf_interrupted_entry(struct trace *trace)struct thread_trace *ttrace;size_t printed; -if (trace->current ==NULL ) +if (trace->failure_only || trace->current ==NULL )return 0 ; ttrace =thread__priv (trace->current);
@@ -1638,7 +1639,7 @@ static int trace__sys_enter(struct trace *trace, struct perf_evsel *evsel, args, trace, thread);if (sc->is_exit) { -if (!(trace->duration_filter || trace->summary_only || trace->min_stack)) { +if (!(trace->duration_filter || trace->summary_only || trace->failure_only || trace->min_stack)) {trace__fprintf_entry_head (trace, thread,0 , false, ttrace->entry_time, trace->output);fprintf (trace->output,"%-70s)\n" , ttrace->entry_str); }
@@ -1742,7 +1743,7 @@ static int trace__sys_exit(struct trace *trace, struct perf_evsel *evsel, } } -if (trace->summary_only) +if (trace->summary_only || (ret >=0 && trace->failure_only)) goto out;trace__fprintf_entry_head (trace, thread, duration, duration_calculated, ttrace->entry_time, trace->output);
@@ -3087,6 +3088,8 @@ int cmd_trace(int argc, const char **argv)OPT_INCR ('v' ,"verbose" , &verbose,"be more verbose" ),OPT_BOOLEAN ('T' ,"time" , &trace.full_time,"Show full timestamp, not time relative to first start" ), +OPT_BOOLEAN (0 ,"failure" , &trace.failure_only, +"Show only syscalls that failed" ),OPT_BOOLEAN ('s' ,"summary" , &trace.summary_only,"Show only syscall summary with statistics" ), OPT_BOOLEAN('S', "with-summary", &trace.summary,
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 4/17 tools include: Add config.h header file
In reply to Arnaldo Carvalho de MeloFrom: Jiri Olsa <[email protected]>
Adding IS_BUILTIN macro and its dependencies into tools world.
It's taken from kernel's include/linux/kconfig.h, which can't be taken completely due to its kconfig dependencies.
--- tools/include/tools/config.h | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 tools/include/tools/config.h
tools/include/tools/config.h new file +34 -0
@@ -0,0 +1,34 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _TOOLS_CONFIG_H +#define _TOOLS_CONFIG_H + +/* Subset of include/linux/kconfig.h */ + +#define __ARG_PLACEHOLDER_1 0, +#define __take_second_arg (__ignored, val, ...) val + +/* +* Helper macros to use CONFIG_ options in C/CPP expressions. Note that +* these only work with boolean and tristate options. +*/ + +/* +* Getting something that works in C and CPP for an arg that may or may +* not be defined is tricky. Here, if we have "#define CONFIG_BOOGER 1" +* we match on the placeholder define, insert the "0," for arg1 and generate +* the triplet (0, 1, 0). Then the last step cherry picks the 2nd arg (a one). +* When CONFIG_BOOGER is not defined, we generate a (... 1, 0) pair, and when +* the last step cherry picks the 2nd arg, we get a zero. +*/ +#define __is_defined (x) ___is_defined(x) +#define ___is_defined (val) ____is_defined(__ARG_PLACEHOLDER_##val) +#define ____is_defined (arg1_or_junk) __take_second_arg(arg1_or_junk 1, 0) + +/* +* IS_BUILTIN(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y', 0 +* otherwise. For boolean options, this is equivalent to +* IS_ENABLED(CONFIG_FOO). +*/ +#define IS_BUILTIN (option) __is_defined(option) + +#endif /* _TOOLS_CONFIG_H */
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 6/17 perf config: Rename to HAVE_DWARF_GETLOCATIONS_SUPPORT
In reply to Arnaldo Carvalho de MeloFrom: Jin Yao <[email protected]>
In Makefile.config, to make all libraries flags have _SUPPORT suffix, rename HAVE_DWARF_GETLOCATIONS to HAVE_DWARF_GETLOCATIONS_SUPPORT
--- tools/perf/Makefile.config | 2 +- tools/perf/util/dwarf-aux.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
tools/perf/Makefile.config +1 -1
@@ -346,7 +346,7 @@ else ifneq ($(feature-dwarf_getlocations), 1) msg := $(warning Old libdw.h, finding variables at given 'perf probe' point will not work, install elfutils-devel/libdw-dev >= 0.157); else - CFLAGS += -DHAVE_DWARF_GETLOCATIONS + CFLAGS += -DHAVE_DWARF_GETLOCATIONS_SUPPORT endif # dwarf_getlocations endif # Dwarf support endif # libelf support
tools/perf/util/dwarf-aux.c +1 -1
@@ -979,7 +979,7 @@ int die_get_varname(Dwarf_Die *vr_die, struct strbuf *buf)return ret <0 ? ret :strbuf_addf (buf,"\t%s" ,dwarf_diename (vr_die)); } -#ifdef HAVE_DWARF_GETLOCATIONS +#ifdef HAVE_DWARF_GETLOCATIONS_SUPPORT /** * die_get_var_innermost_scope - Get innermost scope range of given variable DIE * @sp_die: a subprogram DIE
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 7/17 perf version: Print the compiled-in status of libraries
In reply to Arnaldo Carvalho de MeloFrom: Jin Yao <[email protected]>
This patch checks the values passed by CFLAGS (-DHAVE_XXX) and then print the status of libraries.
For example, if HAVE_DWARF_SUPPORT is defined, that means the library "dwarf" is compiled-in. The patch will print the status "on" for this library otherwise it print the status "OFF".
A new option '--build-options' created for 'perf version' supports the printing of library status.
For example:
$ ./perf version --build-options
or
./perf --version --build-options
or
./perf -v --build-optionsperf version 4.13.rc5.g6727c5
dwarf: [ on ] # HAVE_DWARF_SUPPORT
dwarf_getlocations: [ on ] # HAVE_DWARF_GETLOCATIONS_SUPPORT
glibc: [ on ] # HAVE_GLIBC_SUPPORT
gtk2: [ on ] # HAVE_GTK2_SUPPORT
libaudit: [ OFF ] # HAVE_LIBAUDIT_SUPPORT
libbfd: [ on ] # HAVE_LIBBFD_SUPPORT
libelf: [ on ] # HAVE_LIBELF_SUPPORT
libnuma: [ on ] # HAVE_LIBNUMA_SUPPORT
numa_num_possible_cpus: [ on ] # HAVE_LIBNUMA_SUPPORT
libperl: [ on ] # HAVE_LIBPERL_SUPPORT
libpython: [ on ] # HAVE_LIBPYTHON_SUPPORT
libslang: [ on ] # HAVE_SLANG_SUPPORT
libcrypto: [ on ] # HAVE_LIBCRYPTO_SUPPORT
libunwind: [ on ] # HAVE_LIBUNWIND_SUPPORT
libdw-dwarf-unwind: [ on ] # HAVE_DWARF_SUPPORT
zlib: [ on ] # HAVE_ZLIB_SUPPORT
lzma: [ on ] # HAVE_LZMA_SUPPORT
get_cpuid: [ on ] # HAVE_AUXTRACE_SUPPORT
bpf: [ on ] # HAVE_LIBBPF_SUPPORTv4:
1. Also print the macro name. That would make it easier to grep around in the source looking for where code related a particular features is located.
2. Update since HAVE_DWARF_GETLOCATIONS is renamed to HAVE_DWARF_GETLOCATIONS_SUPPORT
v3:
Remove following unnecessary help message.
1. [ on ]: library is compiled-in
[ OFF ]: library is disabled in make configuration
OR library is not installed in build environment
2. Create '--build-options' option.
3. Use standard option parsing API 'parse_options'.
v2:
1. Use IS_BUILTIN macro to replace #ifdef/#endif block.
2. Print color for on/OFF.
--- tools/perf/builtin-version.c | 82 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-)
tools/perf/builtin-version.c +81 -1
@@ -1,11 +1,91 @@// SPDX-License-Identifier: GPL-2.0 #include "builtin.h" #include "perf.h" +#include "color.h" #include <linux/compiler.h> +#include <tools/config.h> #include <stdio.h> +#include <string.h> +#include <subcmd/parse-options.h> -int cmd_version (int argc__maybe_unused ,const char **argv__maybe_unused ) +int version_verbose; + +struct version { +bool build_options; +}; + +static struct version version; + +static struct option version_options[] = { +OPT_BOOLEAN (0 ,"build-options" , &version.build_options, +"display the build options" ), +}; + +static const char *const version_usage[] = { +"perf version [<options>]" , +NULL +}; + +static void on_off_print (const char *status) +{ +printf ("[ " ); + +if (!strcmp (status,"OFF" )) +color_fprintf (stdout,PERF_COLOR_RED ,"%-3s" , status); +else +color_fprintf (stdout,PERF_COLOR_GREEN ,"%-3s" , status); + +printf (" ]" ); +} + +static void status_print (const char *name,const char *macro, +const char *status) { +printf ("%22s: " , name); +on_off_print (status); +printf (" # %s\n" , macro); +} + +#define STATUS (__d, __m) \ +do { \ + if (IS_BUILTIN(__d)) \ + status_print(#__m, #__d, "on"); \ + else \ + status_print(#__m, #__d, "OFF"); \ +} while (0) + +static void library_status (void ) +{ +STATUS (HAVE_DWARF_SUPPORT , dwarf); +STATUS (HAVE_DWARF_GETLOCATIONS_SUPPORT , dwarf_getlocations); +STATUS (HAVE_GLIBC_SUPPORT , glibc); +STATUS (HAVE_GTK2_SUPPORT , gtk2); +STATUS (HAVE_LIBAUDIT_SUPPORT , libaudit); +STATUS (HAVE_LIBBFD_SUPPORT , libbfd); +STATUS (HAVE_LIBELF_SUPPORT , libelf); +STATUS (HAVE_LIBNUMA_SUPPORT , libnuma); +STATUS (HAVE_LIBNUMA_SUPPORT , numa_num_possible_cpus); +STATUS (HAVE_LIBPERL_SUPPORT , libperl); +STATUS (HAVE_LIBPYTHON_SUPPORT , libpython); +STATUS (HAVE_SLANG_SUPPORT , libslang); +STATUS (HAVE_LIBCRYPTO_SUPPORT , libcrypto); +STATUS (HAVE_LIBUNWIND_SUPPORT , libunwind); +STATUS (HAVE_DWARF_SUPPORT , libdw-dwarf-unwind); +STATUS (HAVE_ZLIB_SUPPORT , zlib); +STATUS (HAVE_LZMA_SUPPORT , lzma); +STATUS (HAVE_AUXTRACE_SUPPORT , get_cpuid); +STATUS (HAVE_LIBBPF_SUPPORT , bpf); +} + +int cmd_version (int argc,const char **argv) +{ + argc =parse_options (argc, argv, version_options, version_usage, +PARSE_OPT_STOP_AT_NON_OPTION ); +printf ("perf version %s\n" , perf_version_string); + +if (version.build_options || version_verbose ==1 ) +library_status (); +return 0 ; }
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 8/17 perf tools: Add 'perf -vv' as an alias to 'perf version --build-options'
In reply to Arnaldo Carvalho de MeloFrom: Jin Yao <[email protected]>
We keep having bug reports that when users build perf on their own, but they don't install some needed libraries such as libelf, libbfd/libibery.
The perf can build, but it is missing important functionality.
This patch provides a new option '-vv' for perf which will print the compiled-in status of libraries.
The 'perf -vv' is mapped to 'perf version --build-options'.
For example:
$ ./perf -vv
perf version 4.13.rc5.g6727c5
dwarf: [ on ] # HAVE_DWARF_SUPPORT
dwarf_getlocations: [ on ] # HAVE_DWARF_GETLOCATIONS_SUPPORT
glibc: [ on ] # HAVE_GLIBC_SUPPORT
gtk2: [ on ] # HAVE_GTK2_SUPPORT
libaudit: [ OFF ] # HAVE_LIBAUDIT_SUPPORT
libbfd: [ on ] # HAVE_LIBBFD_SUPPORT
libelf: [ on ] # HAVE_LIBELF_SUPPORT
libnuma: [ on ] # HAVE_LIBNUMA_SUPPORT
numa_num_possible_cpus: [ on ] # HAVE_LIBNUMA_SUPPORT
libperl: [ on ] # HAVE_LIBPERL_SUPPORT
libpython: [ on ] # HAVE_LIBPYTHON_SUPPORT
libslang: [ on ] # HAVE_SLANG_SUPPORT
libcrypto: [ on ] # HAVE_LIBCRYPTO_SUPPORT
libunwind: [ on ] # HAVE_LIBUNWIND_SUPPORT
libdw-dwarf-unwind: [ on ] # HAVE_DWARF_SUPPORT
zlib: [ on ] # HAVE_ZLIB_SUPPORT
lzma: [ on ] # HAVE_LZMA_SUPPORT
get_cpuid: [ on ] # HAVE_AUXTRACE_SUPPORT
bpf: [ on ] # HAVE_LIBBPF_SUPPORTv3:
One bug is found in v2. It didn't process the option like '-vabc' correctly. Fix this bug.
v2:
Use a global variable version_verbose to record the number of 'v'.
--- tools/perf/perf.c | 6 ++++++ tools/perf/perf.h | 1 + 2 files changed, 7 insertions(+)
tools/perf/perf.c +6 -0
@@ -190,6 +190,12 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)break ; } +if (!strcmp (cmd,"-vv" )) { + (*argv)[0 ] ="version" ; + version_verbose =1 ; +break ; + } +/* * Check remaining flags. */
tools/perf/perf.h +1 -0
@@ -84,6 +84,7 @@ struct record_opts {struct option ;extern const char *const *record_usage;extern struct option *record_options; +extern int version_verbose;int record__parse_freq (const struct option *opt,const char *str,int unset);#endif
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 9/17 perf version: Add man page
In reply to Arnaldo Carvalho de MeloFrom: Jin Yao <[email protected]>
Since a new option '--build-options' is created for 'perf version', so we need to document it.
--- tools/perf/Documentation/perf-version.txt | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 tools/perf/Documentation/perf-version.txt
tools/perf/Documentation/perf-version.txt new file +24 -0
@@ -0,0 +1,24 @@ +perf-version(1) +=============== + +NAME +---- +perf-version - display the version of perf binary + +SYNOPSIS +-------- +'perf version' [--build-options] + +DESCRIPTION +----------- +With no options given, the 'perf version' prints the perf version +on the standard output. + +If the option '--build-options' is given, then the status of +compiled-in libraries are printed on the standard output. + +OPTIONS +------- +--build-options:: + Prints the status of compiled-in libraries on the + standard output.
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 10/17 perf hists browser: Rename perf_evsel_browser_title to a more descriptive name
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
Rename it to hists_browser__scnprintf_title() to better reflect that it provides a scnprintf-like function operating on a hists_browser instance.
This paves the way to have a non-hists_browser specific function to scnprintf format a title with per evsel information to use in other tools or UIs.
Cc: Adrian Hunter <[email protected]>
Cc: David Ahern <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Martin Liška <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Wang Nan <[email protected]>
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=196935
--- tools/perf/ui/browsers/hists.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)
tools/perf/ui/browsers/hists.c +3 -5
@@ -32,8 +32,7 @@extern void hist_browser__init_hpp (void ); -static int perf_evsel_browser_title (struct hist_browser *browser, -char *bf,size_t size); +static int hists_browser__scnprintf_title (struct hist_browser *browser,char *bf,size_t size);static void hist_browser__update_nr_entries (struct hist_browser *hb); static struct rb_node *hists__filter_entries(struct rb_node *nd,
@@ -2183,7 +2182,7 @@ perf_evsel_browser__new(struct perf_evsel *evsel,if (browser) { browser->hbt = hbt; browser->env = env; - browser->title = perf_evsel_browser_title; + browser->title = hists_browser__scnprintf_title; }return browser; }
@@ -2209,8 +2208,7 @@ static inline bool is_report_browser(void *timer)return timer ==NULL ; } -static int perf_evsel_browser_title (struct hist_browser *browser, -char *bf,size_t size) +static int hists_browser__scnprintf_title (struct hist_browser *browser,char *bf,size_t size) {struct hist_browser_timer *hbt = browser->hbt;struct hists *hists = browser->hists;
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 11/17 perf hists: Introduce hists__scnprint_title()
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
That is not use any struct hists_browser internals, so that it can be shared with the other UIs and tools.
Cc: Adrian Hunter <[email protected]>
Cc: David Ahern <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Martin Liška <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Wang Nan <[email protected]>
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=196935
--- tools/perf/ui/browsers/hists.c | 15 +++++++++++---- tools/perf/util/hist.h | 6 ++++++ 2 files changed, 17 insertions(+), 4 deletions(-)
tools/perf/ui/browsers/hists.c +11 -4
@@ -2208,10 +2208,8 @@ static inline bool is_report_browser(void *timer)return timer ==NULL ; } -static int hists_browser__scnprintf_title (struct hist_browser *browser,char *bf,size_t size) +int __hists__scnprintf_title (struct hists *hists,char *bf,size_t size,bool show_freq) { -struct hist_browser_timer *hbt = browser->hbt; -struct hists *hists = browser->hists;char unit;int printed;const struct dso *dso = hists->dso_filter;
@@ -2254,7 +2252,7 @@ static int hists_browser__scnprintf_title(struct hist_browser *browser, char *bf strstr(ev_name, "call-graph=no")) enable_ref = true; -if (!is_report_browser (hbt)) +if (show_freq)scnprintf (sample_freq_str,sizeof (sample_freq_str)," %d Hz," , evsel->attr.sample_freq); nr_samples =convert_unit (nr_samples, &unit);
@@ -2285,6 +2283,15 @@ static int hists_browser__scnprintf_title(struct hist_browser *browser, char *bfif (socket_id >-1 ) printed +=scnprintf (bf + printed, size - printed,", Processor Socket: %d" , socket_id); + +return printed; +} + +static int hists_browser__scnprintf_title (struct hist_browser *browser,char *bf,size_t size) +{ +struct hist_browser_timer *hbt = browser->hbt; +int printed =__hists__scnprintf_title (browser->hists, bf, size, !is_report_browser (hbt)); +if (!is_report_browser (hbt)) {struct perf_top *top = hbt->arg;
tools/perf/util/hist.h +6 -0
@@ -504,5 +504,11 @@ int __hpp__slsmg_color_printf(struct perf_hpp *hpp, const char *fmt, ...);int __hist_entry__snprintf (struct hist_entry *he,struct perf_hpp *hpp,struct perf_hpp_list *hpp_list);int hists__fprintf_headers (struct hists *hists,FILE *fp); +int __hists__scnprintf_title (struct hists *hists,char *bf,size_t size,bool show_freq); + +static inline int hists__scnprintf_title (struct hists *hists,char *bf,size_t size) +{ +return __hists__scnprintf_title (hists, bf, size, true); +}#endif /* __PERF_HIST_H */
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 12/17 perf hists: Move hists__scnprintf_title() away from the TUI code
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
The previous patch made this function useful to non-TUI parts of the tools, but left it where the function from what it was carved, so that the patch showed more clearly the process.
Now just move it outside the TUI parts so that we can finally use it, even when the TUI code doesn't get built/linked.
Cc: Adrian Hunter <[email protected]>
Cc: David Ahern <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Martin Liška <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Wang Nan <[email protected]>
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=196935
--- tools/perf/ui/browsers/hists.c | 79 ---------------------------------------- tools/perf/util/hist.c | 81 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 79 deletions(-)
tools/perf/ui/browsers/hists.c +0 -79
@@ -2208,85 +2208,6 @@ static inline bool is_report_browser(void *timer)return timer ==NULL ; } -int __hists__scnprintf_title (struct hists *hists,char *bf,size_t size,bool show_freq) -{ -char unit; -int printed; -const struct dso *dso = hists->dso_filter; -const struct thread *thread = hists->thread_filter; -int socket_id = hists->socket_filter; -unsigned long nr_samples = hists->stats.nr_events[PERF_RECORD_SAMPLE ]; -u64 nr_events = hists->stats.total_period; -struct perf_evsel *evsel =hists_to_evsel (hists); -const char *ev_name =perf_evsel__name (evsel); -char buf[512 ], sample_freq_str[64 ] ="" ; -size_t buflen =sizeof (buf); -char ref[30 ] =" show reference callgraph, " ; -bool enable_ref = false; - -if (symbol_conf.filter_relative) { - nr_samples = hists->stats.nr_non_filtered_samples; - nr_events = hists->stats.total_non_filtered_period; - } - -if (perf_evsel__is_group_event (evsel)) { -struct perf_evsel *pos; - -perf_evsel__group_desc (evsel, buf, buflen); - ev_name = buf; - -for_each_group_member (pos, evsel) { -struct hists *pos_hists =evsel__hists (pos); - -if (symbol_conf.filter_relative) { - nr_samples += pos_hists->stats.nr_non_filtered_samples; - nr_events += pos_hists->stats.total_non_filtered_period; - }else { - nr_samples += pos_hists->stats.nr_events[PERF_RECORD_SAMPLE ]; - nr_events += pos_hists->stats.total_period; - } - } - } - -if (symbol_conf.show_ref_callgraph && -strstr (ev_name,"call-graph=no" )) - enable_ref = true; - -if (show_freq) -scnprintf (sample_freq_str,sizeof (sample_freq_str)," %d Hz," , evsel->attr.sample_freq); - - nr_samples =convert_unit (nr_samples, &unit); - printed =scnprintf (bf, size, -"Samples: %lu%c of event%s '%s',%s%sEvent count (approx.): %" PRIu64, - nr_samples, unit, evsel->nr_members >1 ?"s" :"" , - ev_name, sample_freq_str, enable_ref ? ref :" " , nr_events); - - -if (hists->uid_filter_str) - printed +=snprintf (bf + printed, size - printed, -", UID: %s" , hists->uid_filter_str); -if (thread) { -if (hists__has (hists, thread)) { - printed +=scnprintf (bf + printed, size - printed, -", Thread: %s(%d)" , - (thread->comm_set ?thread__comm_str (thread) :"" ), - thread->tid); - }else { - printed +=scnprintf (bf + printed, size - printed, -", Thread: %s" , - (thread->comm_set ?thread__comm_str (thread) :"" )); - } - } -if (dso) - printed +=scnprintf (bf + printed, size - printed, -", DSO: %s" , dso->short_name); -if (socket_id >-1 ) - printed +=scnprintf (bf + printed, size - printed, -", Processor Socket: %d" , socket_id); - -return printed; -} -static int hists_browser__scnprintf_title (struct hist_browser *browser,char *bf,size_t size) {struct hist_browser_timer *hbt = browser->hbt;
tools/perf/util/hist.c +81 -0
99 lines not on this page · raw message
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 13/17 perf ui browser: Move the extra title lines from the hists browser
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
This will be useful for the annotate browser as well, that wants to have extra title lines, i.e. the current ui_browser unconditionally reserves the first line for a browser title and the last one for status messages.
But some browsers, like the buckets one (hists browser) needs extra lines to show headers, allowing it to be shown or not, press 'H' in 'perf top' or 'perf report' to see this feature.
So move that logic to the core ui_browser used by the hists_browser ('perf top' and 'perf report' main interface) so that it can be used by the annotate browser too.
Cc: Adrian Hunter <[email protected]>
Cc: David Ahern <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Martin Liška <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Wang Nan <[email protected]>
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=196935
--- tools/perf/ui/browser.c | 8 +++++++- tools/perf/ui/browser.h | 2 ++ tools/perf/ui/browsers/hists.c | 43 +++++++++++++++++++++++------------------- 3 files changed, 33 insertions(+), 20 deletions(-)
tools/perf/ui/browser.c +7 -1
@@ -45,11 +45,16 @@ void ui_browser__set_percent_color(struct ui_browser *browser,ui_browser__set_color (browser, color); } -void ui_browser__gotorc (struct ui_browser *browser,int y,int x) +void ui_browser__gotorc_title (struct ui_browser *browser,int y,int x) {SLsmg_gotorc (browser->y + y, browser->x + x); } +void ui_browser__gotorc (struct ui_browser *browser,int y,int x) +{ +SLsmg_gotorc (browser->y + y + browser->extra_title_lines, browser->x + x); +} +void ui_browser__write_nstring (struct ui_browser *browser__maybe_unused ,const char *msg,unsigned int width) {
@@ -191,6 +196,7 @@ void ui_browser__refresh_dimensions(struct ui_browser *browser) { browser->width = SLtt_Screen_Cols -1 ; browser->height = browser->rows = SLtt_Screen_Rows -2 ; + browser->rows -= browser->extra_title_lines; browser->y =1 ; browser->x =0 ; }
tools/perf/ui/browser.h +2 -0
@@ -17,6 +17,7 @@ struct ui_browser {u64 index, top_idx;void *top, *entries;u16 y, x, width, height, rows, columns, horiz_scroll; +u8 extra_title_lines;int current_color;void *priv;const char *title;
@@ -38,6 +39,7 @@ bool ui_browser__is_current_entry(struct ui_browser *browser, unsigned row);void ui_browser__refresh_dimensions (struct ui_browser *browser);void ui_browser__reset_index (struct ui_browser *browser); +void ui_browser__gotorc_title (struct ui_browser *browser,int y,int x);void ui_browser__gotorc (struct ui_browser *browser,int y,int x);void ui_browser__write_nstring (struct ui_browser *browser,const char *msg,unsigned int width);
tools/perf/ui/browsers/hists.c +24 -19
98 lines not on this page · raw message
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 14/17 perf annotate: Introduce annotation__scnprintf_samples_period() method
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To print a string using the total period (nr_events) and the number of samples for a given annotation, i.e. for a given symbol, the counterpart to hists__scnprintf_samples_period(), that is for all the samples in a session (be it a live session, think 'perf top' or a perf.data file, think 'perf report').
Cc: Adrian Hunter <[email protected]>
Cc: David Ahern <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Martin Liška <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Wang Nan <[email protected]>
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=196935
--- tools/perf/util/annotate.c | 38 ++++++++++++++++++++++++++++++++++++++ tools/perf/util/annotate.h | 12 ++++++++++++ 2 files changed, 50 insertions(+)
tools/perf/util/annotate.c +38 -0
@@ -17,6 +17,7 @@#include "config.h" #include "cache.h" #include "symbol.h" +#include "units.h" #include "debug.h" #include "annotate.h" #include "evsel.h"
@@ -2597,6 +2598,43 @@ int symbol__annotate2(struct symbol *sym, struct map *map, struct perf_evsel *evreturn -1 ; } +int __annotation__scnprintf_samples_period (struct annotation *notes, +char *bf,size_t size, +struct perf_evsel *evsel, +bool show_freq) +{ +const char *ev_name =perf_evsel__name (evsel); +char ref[30 ] =" show reference callgraph, " ; +char sample_freq_str[64 ] ="" ; +unsigned long nr_samples =0 ; +int nr_members =1 ; +bool enable_ref = false; +u64 nr_events =0 ; +char unit; +int i; + +if (perf_evsel__is_group_event (evsel)) + nr_members = evsel->nr_members; + +for (i =0 ; i < nr_members; i++) { +struct sym_hist *ah =annotation__histogram (notes, evsel->idx + i); + + nr_samples += ah->nr_samples; + nr_events += ah->period; + } + +if (symbol_conf.show_ref_callgraph &&strstr (ev_name,"call-graph=no" )) + enable_ref = true; + +if (show_freq) +scnprintf (sample_freq_str,sizeof (sample_freq_str)," %d Hz," , evsel->attr.sample_freq); + + nr_samples =convert_unit (nr_samples, &unit); +return scnprintf (bf, size,"Samples: %lu%c of event%s '%s',%s%sEvent count (approx.): %" PRIu64, + nr_samples, unit, evsel->nr_members >1 ?"s" :"" , + ev_name, sample_freq_str, enable_ref ? ref :" " , nr_events); +} +#define ANNOTATION__CFG (n) \ { .name = #n, .value = &annotation__default_options.n, }
tools/perf/util/annotate.h +12 -0
@@ -151,6 +151,18 @@ double annotation_line__max_percent(struct annotation_line *al, struct annotatiovoid annotation_line__write (struct annotation_line *al,struct annotation *notes,struct annotation_write_ops *ops); +int __annotation__scnprintf_samples_period (struct annotation *notes, +char *bf,size_t size, +struct perf_evsel *evsel, +bool show_freq); + +static inline int annotation__scnprintf_samples_period (struct annotation *notes, +char *bf,size_t size, +struct perf_evsel *evsel) +{ +return __annotation__scnprintf_samples_period (notes, bf, size, evsel, true); +} +int disasm_line__scnprintf (struct disasm_line *dl,char *bf,size_t size,bool raw);size_t disasm__fprintf (struct list_head *head,FILE *fp);void symbol__calc_percent (struct symbol *sym,struct perf_evsel *evsel);
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 15/17 perf annotate browser: Show extra title line with event information
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
So at the top we'll have two lines, like this, from 'perf report':
# perf report --group --ignore-vmlinux
=====================================================================================================
Samples: 46 of events 'cycles', 4000 Hz, Event count (approx.): 5154895
_raw_spin_lock_irqsave /proc/kcore
Percent │ nop
│ push %rbx
0.00 14.29 0.00 │ pushfq
9.09 0.00 0.00 │ pop %rax
9.09 0.00 20.00 │ nop
│ mov %rax,%rbx
│ cli
4.55 7.14 0.00 │ nop
│ xor %eax,%eax
│ mov $0x1,%edx
│ lock cmpxchg %edx,(%rdi)
77.27 78.57 70.00 │ test %eax,%eax
│ ↓ jne 2b
│ mov %rbx,%rax
0.00 0.00 10.00 │ pop %rbx
│ ← retq
│2b: mov %eax,%esi
│ → callq queued_spin_lock_slowpath
│ mov %rbx,%rax
│ pop %rbx
Press 'h' for help on│key bindings
===================================================================================================== 9.09 + 9.09 + 4.55 + 77.27 = 100
14.29 + 7.14 + 78.57 = 100
20 + 70 + 10 = 100
We can do the math by using 't' to toggle from 'percent' to nr
=====================================================================================================
Samples: 46 of events 'cycles', 4000 Hz, Event count (approx.): 5154895 _raw_spin_lock_irqsave /proc/kcore
Period │ nop
│ push %rbx
0 79273 0 │ pushfq
190455 0 0 │ pop %rax
198038 0 3045 │ nop
│ mov %rax,%rbx
│ cli
217233 32562 0 │ nop
│ xor %eax,%eax
│ mov $0x1,%edx
│ lock cmpxchg %edx,(%rdi)
3421649 979174 28273 │ test %eax,%eax
│ ↓ jne 2b
│ mov %rbx,%rax
0 0 5193 │ pop %rbx
│ ← retq
│2b: mov %eax,%esi
│ → callq queued_spin_lock_slowpath
│ mov %rbx,%rax
│ pop %rbx
Press 'h' for help on│key bindings=====================================================================================================
79273 + 190455 + 198038 + 3045 + 217233 + 32562 + 3421649 + 979174 + 28273 + 5193 = 5154895
Or number of samples:
=====================================================================================================
ooSamples: 46 of events 'cycles', 4000 Hz, Event count (approx.): 5154895 _raw_spin_lock_irqsave /proc/kcore
Samples │ nop
│ push %rbx
0 2 0 │ pushfq
2 0 0 │ pop %rax
2 0 2 │ nop
│ mov %rax,%rbx
│ cli
1 1 0 │ nop
│ xor %eax,%eax
│ mov $0x1,%edx
│ lock cmpxchg %edx,(%rdi)
17 11 7 │ test %eax,%eax
│ ↓ jne 2b
│ mov %rbx,%rax
0 0 1 │ pop %rbx
│ ← retq
│2b: mov %eax,%esi
│ → callq queued_spin_lock_slowpath
│ mov %rbx,%rax
│ pop %rbxPress 'h' for help on key bindings
=====================================================================================================
2 + 2 + 2 + 2 + 1 + 1 + 17 + 11 + 7 + 1 = 46
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=196935
--- tools/perf/ui/browsers/annotate.c | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-)
tools/perf/ui/browsers/annotate.c +27 -4
@@ -592,21 +592,40 @@ bool annotate_browser__continue_search_reverse(struct annotate_browser *browser,return __annotate_browser__search_reverse (browser); } +static int annotate_browser__show (struct ui_browser *browser,char *title,const char *help) +{ +struct map_symbol *ms = browser->priv; +struct symbol *sym = ms->sym; +char symbol_dso[SYM_TITLE_MAX_SIZE ]; + +if (ui_browser__show (browser, title, help) <0 ) +return -1 ; + +sym_title (sym, ms->map, symbol_dso,sizeof (symbol_dso)); + +ui_browser__gotorc_title (browser,0 ,0 ); +ui_browser__set_color (browser,HE_COLORSET_ROOT ); +ui_browser__write_nstring (browser, symbol_dso, browser->width +1 ); +return 0 ; +} +static int annotate_browser__run (struct annotate_browser *browser,struct perf_evsel *evsel,struct hist_browser_timer *hbt) {struct rb_node *nd =NULL ; +struct hists *hists =evsel__hists (evsel);struct map_symbol *ms = browser->b.priv;struct symbol *sym = ms->sym;struct annotation *notes =symbol__annotation (ms->sym);const char *help ="Press 'h' for help on key bindings" ;int delay_secs = hbt ? hbt->refresh :0 ; +char title[256 ];int key; -char title[SYM_TITLE_MAX_SIZE ]; -sym_title (sym, ms->map, title,sizeof (title)); -if (ui_browser__show (&browser->b, title, help) <0 ) +annotation__scnprintf_samples_period (notes, title,sizeof (title), evsel); + +if (annotate_browser__show (&browser->b, title, help) <0 )return -1 ;annotate_browser__calc_percent (browser, evsel);
@@ -637,8 +656,11 @@ static int annotate_browser__run(struct annotate_browser *browser,if (hbt) hbt->timer (hbt->arg); -if (delay_secs !=0 ) +if (delay_secs !=0 ) {symbol__annotate_decay_histogram (sym, evsel->idx); +hists__scnprintf_title (hists, title,sizeof (title)); +annotate_browser__show (&browser->b, title, help); + }continue ;case K_TAB :if (nd !=NULL ) {
@@ -812,6 +834,7 @@ int symbol__tui_annotate(struct symbol *sym, struct map *map, .seek = ui_browser__list_head_seek, .write = annotate_browser__write, .filter = disasm_line__filter, + .extra_title_lines = 1, /* for hists__scnprintf_title() */ .priv = &ms, .use_navkeypressed = true, },
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 16/17 perf annotate stdio2: Print more descriptive event information header
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To match the recently added event header information to --tui, e.g.:
# perf annotate --ignore-vmlinux --stdio2 _raw_spin_lock_irqsave
Samples: 128 of event 'cycles:ppp', 4000 Hz, Event count (approx.): 48617682
_raw_spin_lock_irqsave() /proc/kcore
0.78 nop
7.03 push %rbx
3.12 pushfq
6.25 pop %rax
nop
mov %rax,%rbx
3.12 cli
nop
xor %eax,%eax
mov $0x1,%edx
79.69 lock cmpxchg %edx,(%rdi)
test %eax,%eax
↓ jne 2b
mov %rbx,%rax
pop %rbx
← retq
2b: mov %eax,%esi
→ callq *ffffffffb30eaed0
mov %rbx,%rax
pop %rbx
← retq
#--- tools/perf/util/annotate.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-)
tools/perf/util/annotate.c +3 -7
@@ -2325,7 +2325,7 @@ int symbol__tty_annotate2(struct symbol *sym, struct map *map,struct dso *dso = map->dso;struct rb_root source_line =RB_ROOT ;struct annotation_options opts = annotation__default_options; -const char *ev_name =perf_evsel__name (evsel); +struct annotation *notes =symbol__annotation (sym);char buf[1024 ];if (symbol__annotate2 (sym, map, evsel, &opts,NULL ) <0 )
@@ -2337,12 +2337,8 @@ int symbol__tty_annotate2(struct symbol *sym, struct map *map,print_summary (&source_line, dso->long_name); } -if (perf_evsel__is_group_event (evsel)) { -perf_evsel__group_desc (evsel, buf,sizeof (buf)); - ev_name = buf; - } - -fprintf (stdout,"%s() %s\nEvent: %s\n\n" , sym->name, dso->long_name, ev_name); +annotation__scnprintf_samples_period (notes, buf,sizeof (buf), evsel); +fprintf (stdout,"%s\n%s() %s\n" , buf, sym->name, dso->long_name);symbol__annotate_fprintf2 (sym, stdout);annotated_source__purge (symbol__annotation (sym)->src);
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 17/17 perf trace: Remove redundant ')'
In reply to Arnaldo Carvalho de MeloFrom: Changbin Du <[email protected]>
There is a redundant ')' at the tail of each event. So remove it.
$ sudo perf trace --no-syscalls -e 'kmem:*' -a 899.342 kmem:kfree:(vfs_writev+0xb9) call_site=ffffffff9c453979 ptr=(nil)) 899.344 kmem:kfree:(___sys_recvmsg+0x188) call_site=ffffffff9c9b8b88 ptr=(nil))
--- tools/perf/builtin-trace.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/builtin-trace.c +1 -1
@@ -1962,7 +1962,7 @@ static int trace__event_handler(struct trace *trace, struct perf_evsel *evsel, trace->output); } -fprintf (trace->output,")\n" ); +fprintf (trace->output,"\n" );if (callchain_ret >0 )trace__fprintf_callchain (trace, sample);
Signature · 1 line
2.14.3
Quoted 94 lines · Arnaldo Carvalho de Melo
Hi Ingo,
Please consider pulling,
- Arnaldo
Test results at the end of this message, as usual.
The following changes since commit
1159e09476536250c2a0173d4298d15114df7a89:perf/x86/intel: Enable C-state residency events for Cannon Lake (2018-03-31 11:28:36 +0200)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.gittags/perf-core-for-mingo-4.17-20180403for you to fetch changes up to
51125a29a395048fdb3429b8c4ca0ada57097744:perf trace: Remove redundant ')' (2018-04-03 16:16:41 -0300)
----------------------------------------------------------------
perf/core improvements and fixes:- Show only failing syscalls with 'perf trace --failure' (Arnaldo Carvalho de Melo)
e.g: See what 'openat' syscalls are failing:
# perf trace --failure -e openat 762.323 ( 0.007 ms): VideoCapture/4566 openat(dfd: CWD, filename: /dev/video2) = -1 ENOENT No such file or directory <SNIP N /dev/videoN open attempts... sigh, where is that improvised camera lid?!? 8-) > 790.228 ( 0.008 ms): VideoCapture/4566 openat(dfd: CWD, filename: /dev/video63) = -1 ENOENT No such file or directory ^C#- Show information about the event (freq,
nr_samples, total period/nr_events) in the annotate --tui and --stdio2 'perf annotate' output, similar to the first line in the 'perf report --tui', but just for the samples for the annotated symbol (Arnaldo Carvalho de Melo)- Introduce 'perf version --build-options' to show what features were linked, aliased as well as a shorter 'perf -vv' (Jin Yao)
- Add a "
dso_size" sort order (Kim Phillips)- Remove redundant ')' in the tracepoint output in 'perf trace' (Changbin Du)
- Synchronize x86's
cpufeatures.h, no effect on tools (Arnaldo Carvalho de Melo)Signed-off-by Arnaldo Carvalho de Melo <[email protected]>----------------------------------------------------------------
Arnaldo Carvalho de Melo (9):
tools headers: Synchronize x86'scpufeatures.h
perf trace: Show only failing syscalls
perf hists browser: Renameperf_evsel_browser_titleto a more descriptive name perf hists: Introducehists__scnprint_title()
perf hists: Movehists__scnprintf_title()away from the TUI code perf ui browser: Move the extra title lines from the hists browser perf annotate: Introduceannotation__scnprintf_samples_period()method perf annotate browser: Show extra title line with event information perf annotate stdio2: Print more descriptive event information headerChangbin Du (1):
perf trace: Remove redundant ')'Jin Yao (5):
perf config: Add some new -DHAVE_XXX to CFLAGS
perf config: Rename toHAVE_DWARF_GETLOCATIONS_SUPPORT
perf version: Print the compiled-in status of libraries perf tools: Add 'perf -vv' as an alias to 'perf version --build-options' perf version: Add man pageJiri Olsa (1):
tools include: Addconfig.hheader fileKim Phillips (1):
perf tools: Add a "dso_size" sort ordertools/arch/x86/include/asm/cpufeatures.h | 2 + tools/include/tools/config.h | 34 ++++++++ tools/perf/Documentation/perf-report.txt | 1 + tools/perf/Documentation/perf-trace.txt | 3 + tools/perf/Documentation/perf-version.txt | 24 ++++++ tools/perf/Makefile.config | 8 +- tools/perf/builtin-trace.c | 11 ++- tools/perf/builtin-version.c | 82 +++++++++++++++++++- tools/perf/perf.c | 6 ++ tools/perf/perf.h | 1 + tools/perf/ui/browser.c | 8 +- tools/perf/ui/browser.h | 2 + tools/perf/ui/browsers/annotate.c | 31 +++++++- tools/perf/ui/browsers/hists.c | 125 +++++++----------------------- tools/perf/util/annotate.c | 48 ++++++++++-- tools/perf/util/annotate.h | 12 +++ tools/perf/util/dwarf-aux.c | 2 +-
Quoted 8 lines
tools/perf/util/hist.c | 81 +++++++++++++++++++ tools/perf/util/hist.h | 7 ++ tools/perf/util/map.h | 4 + tools/perf/util/sort.c | 41 ++++++++++ tools/perf/util/sort.h | 1 + 22 files changed, 418 insertions(+), 116 deletions(-) create mode 100644 tools/include/tools/config.h create mode 100644 tools/perf/Documentation/perf-version.txt
Pulled, thanks a lot Arnaldo!
Ingo