mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
perf trace: Support 'strace' syscall event groups
I.e.: $ cat ~/share/perf-core/strace/groups/file access chmod creat execve faccessat getcwd lstat mkdir open openat quotactl readlink rename rmdir stat statfs symlink unlink $ Then, on a quiet desktop, try running this and then moving your mouse to see the deluge of mouse related activity: # perf probe 'vfs_getname=getname_flags:72 pathname=filename:string' Added new event: probe:vfs_getname (on getname_flags:72 with pathname=filename:string) You can now use it in all perf tools, such as: perf record -e probe:vfs_getname -aR sleep 1 # # trace --ev probe:vfs_getname --filter-pids 2232 -e file 0.042 (0.042 ms): mousetweaks/2235 open(filename: 0x14e3910, mode: 438 ) ... 0.042 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/cursors/xterm") 0.100 (0.100 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory 0.142 (0.018 ms): mousetweaks/2235 open(filename: 0x14c3c10, mode: 438 ) ... 0.142 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/index.theme") 0.192 (0.069 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory 0.230 (0.017 ms): mousetweaks/2235 open(filename: 0x14c3c10, mode: 438 ) ... 0.230 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/usr/share/icons/Adwaita/cursors/xterm") 0.253 (0.041 ms): mousetweaks/2235 ... [continued]: open()) = 14 0.459 (0.008 ms): mousetweaks/2235 open(filename: 0x14e3910, mode: 438 ) ... 0.459 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/cursors/left_side") 0.468 (0.017 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory Need to combine that raw_syscalls:sys_enter(open) + probe:vfs_getname + raw_syscalls:sys_exit(open) sequence... Now, if you're bored, please write some more syscall groups, like the ones in 'strace' and send it our way :-) Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Borislav Petkov <bp@suse.de> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Milian Wolff <mail@milianw.de> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/n/tip-a42xklu59lcbxp7bbnic74a8@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
8816d38d49
commit
005438a8ee
5 changed files with 35 additions and 1 deletions
|
@ -35,6 +35,7 @@ paths += -DPERF_MAN_PATH="BUILD_STR($(mandir_SQ))"
|
||||||
CFLAGS_builtin-help.o += $(paths)
|
CFLAGS_builtin-help.o += $(paths)
|
||||||
CFLAGS_builtin-timechart.o += $(paths)
|
CFLAGS_builtin-timechart.o += $(paths)
|
||||||
CFLAGS_perf.o += -DPERF_HTML_PATH="BUILD_STR($(htmldir_SQ))" -include $(OUTPUT)PERF-VERSION-FILE
|
CFLAGS_perf.o += -DPERF_HTML_PATH="BUILD_STR($(htmldir_SQ))" -include $(OUTPUT)PERF-VERSION-FILE
|
||||||
|
CFLAGS_builtin-trace.o += -DSTRACE_GROUPS_DIR="BUILD_STR($(STRACE_GROUPS_DIR_SQ))"
|
||||||
|
|
||||||
libperf-y += util/
|
libperf-y += util/
|
||||||
libperf-y += arch/
|
libperf-y += arch/
|
||||||
|
|
|
@ -494,6 +494,11 @@ endif
|
||||||
$(INSTALL) $(OUTPUT)perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
|
$(INSTALL) $(OUTPUT)perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
|
||||||
$(call QUIET_INSTALL, perf-with-kcore) \
|
$(call QUIET_INSTALL, perf-with-kcore) \
|
||||||
$(INSTALL) $(OUTPUT)perf-with-kcore -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
|
$(INSTALL) $(OUTPUT)perf-with-kcore -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
|
||||||
|
ifndef NO_LIBAUDIT
|
||||||
|
$(call QUIET_INSTALL, strace/groups) \
|
||||||
|
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(STRACE_GROUPS_INSTDIR_SQ)'; \
|
||||||
|
$(INSTALL) trace/strace/groups/* -t '$(DESTDIR_SQ)$(STRACE_GROUPS_INSTDIR_SQ)'
|
||||||
|
endif
|
||||||
ifndef NO_LIBPERL
|
ifndef NO_LIBPERL
|
||||||
$(call QUIET_INSTALL, perl-scripts) \
|
$(call QUIET_INSTALL, perl-scripts) \
|
||||||
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
|
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "util/color.h"
|
#include "util/color.h"
|
||||||
#include "util/debug.h"
|
#include "util/debug.h"
|
||||||
#include "util/evlist.h"
|
#include "util/evlist.h"
|
||||||
|
#include "util/exec_cmd.h"
|
||||||
#include "util/machine.h"
|
#include "util/machine.h"
|
||||||
#include "util/session.h"
|
#include "util/session.h"
|
||||||
#include "util/thread.h"
|
#include "util/thread.h"
|
||||||
|
@ -2927,11 +2928,14 @@ int cmd_trace(int argc, const char **argv, const char *prefix __maybe_unused)
|
||||||
|
|
||||||
if (ev_qualifier_str != NULL) {
|
if (ev_qualifier_str != NULL) {
|
||||||
const char *s = ev_qualifier_str;
|
const char *s = ev_qualifier_str;
|
||||||
|
struct strlist_config slist_config = {
|
||||||
|
.dirname = system_path(STRACE_GROUPS_DIR),
|
||||||
|
};
|
||||||
|
|
||||||
trace.not_ev_qualifier = *s == '!';
|
trace.not_ev_qualifier = *s == '!';
|
||||||
if (trace.not_ev_qualifier)
|
if (trace.not_ev_qualifier)
|
||||||
++s;
|
++s;
|
||||||
trace.ev_qualifier = strlist__new(s, NULL);
|
trace.ev_qualifier = strlist__new(s, &slist_config);
|
||||||
if (trace.ev_qualifier == NULL) {
|
if (trace.ev_qualifier == NULL) {
|
||||||
fputs("Not enough memory to parse event qualifier",
|
fputs("Not enough memory to parse event qualifier",
|
||||||
trace.output);
|
trace.output);
|
||||||
|
|
|
@ -644,6 +644,7 @@ infodir = share/info
|
||||||
perfexecdir = libexec/perf-core
|
perfexecdir = libexec/perf-core
|
||||||
sharedir = $(prefix)/share
|
sharedir = $(prefix)/share
|
||||||
template_dir = share/perf-core/templates
|
template_dir = share/perf-core/templates
|
||||||
|
STRACE_GROUPS_DIR = share/perf-core/strace/groups
|
||||||
htmldir = share/doc/perf-doc
|
htmldir = share/doc/perf-doc
|
||||||
ifeq ($(prefix),/usr)
|
ifeq ($(prefix),/usr)
|
||||||
sysconfdir = /etc
|
sysconfdir = /etc
|
||||||
|
@ -663,6 +664,7 @@ libdir = $(prefix)/$(lib)
|
||||||
|
|
||||||
# Shell quote (do not use $(call) to accommodate ancient setups);
|
# Shell quote (do not use $(call) to accommodate ancient setups);
|
||||||
ETC_PERFCONFIG_SQ = $(subst ','\'',$(ETC_PERFCONFIG))
|
ETC_PERFCONFIG_SQ = $(subst ','\'',$(ETC_PERFCONFIG))
|
||||||
|
STRACE_GROUPS_DIR_SQ = $(subst ','\'',$(STRACE_GROUPS_DIR))
|
||||||
DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
|
DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
|
||||||
bindir_SQ = $(subst ','\'',$(bindir))
|
bindir_SQ = $(subst ','\'',$(bindir))
|
||||||
mandir_SQ = $(subst ','\'',$(mandir))
|
mandir_SQ = $(subst ','\'',$(mandir))
|
||||||
|
@ -676,10 +678,13 @@ libdir_SQ = $(subst ','\'',$(libdir))
|
||||||
|
|
||||||
ifneq ($(filter /%,$(firstword $(perfexecdir))),)
|
ifneq ($(filter /%,$(firstword $(perfexecdir))),)
|
||||||
perfexec_instdir = $(perfexecdir)
|
perfexec_instdir = $(perfexecdir)
|
||||||
|
STRACE_GROUPS_INSTDIR = $(STRACE_GROUPS_DIR)
|
||||||
else
|
else
|
||||||
perfexec_instdir = $(prefix)/$(perfexecdir)
|
perfexec_instdir = $(prefix)/$(perfexecdir)
|
||||||
|
STRACE_GROUPS_INSTDIR = $(prefix)/$(STRACE_GROUPS_DIR)
|
||||||
endif
|
endif
|
||||||
perfexec_instdir_SQ = $(subst ','\'',$(perfexec_instdir))
|
perfexec_instdir_SQ = $(subst ','\'',$(perfexec_instdir))
|
||||||
|
STRACE_GROUPS_INSTDIR_SQ = $(subst ','\'',$(STRACE_GROUPS_INSTDIR))
|
||||||
|
|
||||||
# If we install to $(HOME) we keep the traceevent default:
|
# If we install to $(HOME) we keep the traceevent default:
|
||||||
# $(HOME)/.traceevent/plugins
|
# $(HOME)/.traceevent/plugins
|
||||||
|
@ -713,6 +718,7 @@ $(call detected_var,htmldir_SQ)
|
||||||
$(call detected_var,infodir_SQ)
|
$(call detected_var,infodir_SQ)
|
||||||
$(call detected_var,mandir_SQ)
|
$(call detected_var,mandir_SQ)
|
||||||
$(call detected_var,ETC_PERFCONFIG_SQ)
|
$(call detected_var,ETC_PERFCONFIG_SQ)
|
||||||
|
$(call detected_var,STRACE_GROUPS_DIR_SQ)
|
||||||
$(call detected_var,prefix_SQ)
|
$(call detected_var,prefix_SQ)
|
||||||
$(call detected_var,perfexecdir_SQ)
|
$(call detected_var,perfexecdir_SQ)
|
||||||
$(call detected_var,LIBDIR)
|
$(call detected_var,LIBDIR)
|
||||||
|
|
18
tools/perf/trace/strace/groups/file
Normal file
18
tools/perf/trace/strace/groups/file
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
access
|
||||||
|
chmod
|
||||||
|
creat
|
||||||
|
execve
|
||||||
|
faccessat
|
||||||
|
getcwd
|
||||||
|
lstat
|
||||||
|
mkdir
|
||||||
|
open
|
||||||
|
openat
|
||||||
|
quotactl
|
||||||
|
readlink
|
||||||
|
rename
|
||||||
|
rmdir
|
||||||
|
stat
|
||||||
|
statfs
|
||||||
|
symlink
|
||||||
|
unlink
|
Loading…
Add table
Add a link
Reference in a new issue