perf/core improvements and a fix
Arnaldo Carvalho de Melo
maintainerHi Ingo,
Please consider pulling,
- Arnaldo
The following changes since commit 1c92f88542faa3ae4f970c548b4fe8275a45201b:
Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf into perf/core (2014-06-25 07:44:19 +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
for you to fetch changes up to e281a9606d7073c517f2571e83faaff029ddc1cf:
perf trace: Add possibility to switch off syscall events (2014-06-26 17:48:07 -0300)
----------------------------------------------------------------
perf/core improvements and fixes:
New features:
. Add support for pagefault tracing in 'trace', please see multiple examples
in the changeset messages (Stanislav Fomichev).
User visible:
. Fallback to syscalls:* when raw_syscalls:* is not available in the perl and
python perf scripts. (Daniel Bristot de Oliveira)
----------------------------------------------------------------
Daniel Bristot de Oliveira (1):
perf scripts: Fallback to syscalls:* when raw_syscalls:* is not available
Stanislav Fomichev (4):
perf trace: Add perf_event parameter to tracepoint_handler perf trace: Add support for pagefault tracing perf trace: Add pagefaults record and replay support perf trace: Add possibility to switch off syscall events
tools/perf/Documentation/perf-trace.txt | 46 ++++ tools/perf/builtin-trace.c | 237 +++++++++++++++++---- tools/perf/scripts/perl/bin/failed-syscalls-record | 3 +- tools/perf/scripts/perl/failed-syscalls.pl | 5 + .../python/bin/failed-syscalls-by-pid-record | 3 +- tools/perf/scripts/python/bin/sctop-record | 3 +- .../python/bin/syscall-counts-by-pid-record | 3 +- .../perf/scripts/python/bin/syscall-counts-record | 3 +- .../perf/scripts/python/failed-syscalls-by-pid.py | 5 + tools/perf/scripts/python/sctop.py | 5 + tools/perf/scripts/python/syscall-counts-by-pid.py | 5 + tools/perf/scripts/python/syscall-counts.py | 5 + 12 files changed, 280 insertions(+), 43 deletions(-)
Arnaldo Carvalho de Melo
maintainerPATCH 1/5 perf scripts: Fallback to syscalls:* when raw_syscalls:* is not available
From: Daniel Bristot de Oliveira <[email protected]>
Older kernels (e.g., RHEL6) do system call tracing via the syscalls:sys_{enter,exit} tracepoints rather than using raw_syscalls:*.
Update perf python and perl scripts to fallback to syscalls:* when raw_syscalls:* isn't available.
--- tools/perf/scripts/perl/bin/failed-syscalls-record | 3 ++- tools/perf/scripts/perl/failed-syscalls.pl | 5 +++++ tools/perf/scripts/python/bin/failed-syscalls-by-pid-record | 3 ++- tools/perf/scripts/python/bin/sctop-record | 3 ++- tools/perf/scripts/python/bin/syscall-counts-by-pid-record | 3 ++- tools/perf/scripts/python/bin/syscall-counts-record | 3 ++- tools/perf/scripts/python/failed-syscalls-by-pid.py | 5 +++++ tools/perf/scripts/python/sctop.py | 5 +++++ tools/perf/scripts/python/syscall-counts-by-pid.py | 5 +++++ tools/perf/scripts/python/syscall-counts.py | 5 +++++ 10 files changed, 35 insertions(+), 5 deletions(-)
tools/perf/scripts/perl/bin/failed-syscalls-record +2 -1
@@ -1,2 +1,3 @@ #!/bin/bash -perf record -e raw_syscalls:sys_exit $@ +(perf record -e raw_syscalls:sys_exit $@ || \ + perf record -e syscalls:sys_exit $@) 2> /dev/null
tools/perf/scripts/perl/failed-syscalls.pl +5 -0
@@ -26,6 +26,11 @@ sub raw_syscalls::sys_exit } } +sub syscalls::sys_exit +{ + raw_syscalls::sys_exit(@_) +} + sub trace_end { printf("\nfailed syscalls by comm:\n\n");
tools/perf/scripts/python/bin/failed-syscalls-by-pid-record +2 -1
@@ -1,2 +1,3 @@ #!/bin/bash -perf record -e raw_syscalls:sys_exit $@ +(perf record -e raw_syscalls:sys_exit $@ || \ + perf record -e syscalls:sys_exit $@) 2> /dev/null
tools/perf/scripts/python/bin/sctop-record +2 -1
@@ -1,2 +1,3 @@ #!/bin/bash -perf record -e raw_syscalls:sys_enter $@ +(perf record -e raw_syscalls:sys_enter $@ || \ + perf record -e syscalls:sys_enter $@) 2> /dev/null
tools/perf/scripts/python/bin/syscall-counts-by-pid-record +2 -1
@@ -1,2 +1,3 @@ #!/bin/bash -perf record -e raw_syscalls:sys_enter $@ +(perf record -e raw_syscalls:sys_enter $@ || \ + perf record -e syscalls:sys_enter $@) 2> /dev/null
tools/perf/scripts/python/bin/syscall-counts-record +2 -1
@@ -1,2 +1,3 @@ #!/bin/bash -perf record -e raw_syscalls:sys_enter $@ +(perf record -e raw_syscalls:sys_enter $@ || \ + perf record -e syscalls:sys_enter $@) 2> /dev/null
tools/perf/scripts/python/failed-syscalls-by-pid.py +5 -0
@@ -50,6 +50,11 @@ def raw_syscalls__sys_exit(event_name, context, common_cpu, except TypeError: syscalls[common_comm][common_pid][id][ret] = 1 +def syscalls__sys_exit(event_name, context, common_cpu, + common_secs, common_nsecs, common_pid, common_comm, + id, ret): + raw_syscalls__sys_exit(**locals()) + def print_error_totals(): if for_comm is not None: print "\nsyscall errors for %s:\n\n" % (for_comm),
tools/perf/scripts/python/sctop.py +5 -0
@@ -53,6 +53,11 @@ def raw_syscalls__sys_enter(event_name, context, common_cpu, except TypeError: syscalls[id] = 1 +def syscalls__sys_enter(event_name, context, common_cpu, + common_secs, common_nsecs, common_pid, common_comm, + id, args): + raw_syscalls__sys_enter(**locals()) + def print_syscall_totals(interval): while 1: clear_term()
tools/perf/scripts/python/syscall-counts-by-pid.py +5 -0
@@ -48,6 +48,11 @@ def raw_syscalls__sys_enter(event_name, context, common_cpu, except TypeError: syscalls[common_comm][common_pid][id] = 1 +def syscalls__sys_enter(event_name, context, common_cpu, + common_secs, common_nsecs, common_pid, common_comm, + id, args): + raw_syscalls__sys_enter(**locals()) + def print_syscall_totals(): if for_comm is not None: print "\nsyscall events for %s:\n\n" % (for_comm),
tools/perf/scripts/python/syscall-counts.py +5 -0
@@ -44,6 +44,11 @@ def raw_syscalls__sys_enter(event_name, context, common_cpu, except TypeError: syscalls[id] = 1 +def syscalls__sys_enter(event_name, context, common_cpu, + common_secs, common_nsecs, common_pid, common_comm, + id, args): + raw_syscalls__sys_enter(**locals()) + def print_syscall_totals(): if for_comm is not None: print "\nsyscall events for %s:\n\n" % (for_comm),
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 2/5 perf trace: Add perf_event parameter to tracepoint_handler
In reply to Arnaldo Carvalho de MeloFrom: Stanislav Fomichev <[email protected]>
It will be used by next pagefault tracing patches in the series.
--- tools/perf/builtin-trace.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)
tools/perf/builtin-trace.c +8 -3
@@ -1538,6 +1538,7 @@ static size_t syscall__scnprintf_args(struct syscall *sc, char *bf, size_t size, }typedef int (*tracepoint_handler )(struct trace *trace,struct perf_evsel *evsel, +union perf_event *event,struct perf_sample *sample); static struct syscall *trace__syscall_info(struct trace *trace,
@@ -1610,6 +1611,7 @@ static void thread__update_stats(struct thread_trace *ttrace, }static int trace__sys_enter (struct trace *trace,struct perf_evsel *evsel, +union perf_event *event__maybe_unused ,struct perf_sample *sample) {char *msg;
@@ -1658,6 +1660,7 @@ static int trace__sys_enter(struct trace *trace, struct perf_evsel *evsel, }static int trace__sys_exit (struct trace *trace,struct perf_evsel *evsel, +union perf_event *event__maybe_unused ,struct perf_sample *sample) {int ret;
@@ -1735,6 +1738,7 @@ out: }static int trace__vfs_getname (struct trace *trace,struct perf_evsel *evsel, +union perf_event *event__maybe_unused ,struct perf_sample *sample) { trace->last_vfs_getname =perf_evsel__rawptr (evsel, sample,"pathname" );
@@ -1742,6 +1746,7 @@ static int trace__vfs_getname(struct trace *trace, struct perf_evsel *evsel, }static int trace__sched_stat_runtime (struct trace *trace,struct perf_evsel *evsel, +union perf_event *event__maybe_unused ,struct perf_sample *sample) {u64 runtime =perf_evsel__intval (evsel, sample,"runtime" );
@@ -1781,7 +1786,7 @@ static bool skip_sample(struct trace *trace, struct perf_sample *sample) }static int trace__process_sample (struct perf_tool *tool, -union perf_event *event__maybe_unused , +union perf_event *event,struct perf_sample *sample,struct perf_evsel *evsel,struct machine *machine__maybe_unused )
@@ -1799,7 +1804,7 @@ static int trace__process_sample(struct perf_tool *tool,if (handler) { ++trace->nr_events; -handler (trace, evsel, sample); +handler (trace, evsel, event, sample); }return err;
@@ -1990,7 +1995,7 @@ again: } handler = evsel->handler; -handler (trace, evsel, &sample); +handler (trace, evsel, event, &sample); next_event:perf_evlist__mmap_consume (evlist, i);
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 3/5 perf trace: Add support for pagefault tracing
In reply to Arnaldo Carvalho de MeloFrom: Stanislav Fomichev <[email protected]>
This patch adds optional pagefault tracing support to 'perf trace'.
Using -F/--pf option user can specify whether he wants minor, major or all pagefault events to be traced. This patch adds only live mode, record and replace will come in a separate patch.
Example output:
1756272.905 ( 0.000 ms): curl/5937 majfault [0x7fa7261978b6] => /usr/lib/x86_64-linux-gnu/libkrb5.so.26.0.0@0x85288 (d.) 1862866.036 ( 0.000 ms): wget/8460 majfault [__clear_user+0x3f] => 0x659cb4 (?k)
--- tools/perf/Documentation/perf-trace.txt | 39 ++++++++++ tools/perf/builtin-trace.c | 125 +++++++++++++++++++++++++++++++- 2 files changed, 163 insertions(+), 1 deletion(-)
tools/perf/Documentation/perf-trace.txt +39 -0
@@ -107,6 +107,45 @@ the thread executes on the designated CPUs. Default is to monitor all CPUs. Show tool stats such as number of times fd->pathname was discovered thru hooking the open syscall return + vfs_getname or via reading /proc/pid/fd, etc. +-F=[all|min|maj]:: +--pf=[all|min|maj]:: + Trace pagefaults. Optionally, you can specify whether you want minor, + major or all pagefaults. Default value is maj. + +PAGEFAULTS +---------- + +When tracing pagefaults, the format of the trace is as follows: + +<min|maj>fault [<ip.symbol>+<ip.offset>] => <[email protected]> (<map type><addr level>). + +- min/maj indicates whether fault event is minor or major; +- ip.symbol shows symbol for instruction pointer (the code that generated the + fault); if no debug symbols available, perf trace will print raw IP; +- addr.dso shows DSO for the faulted address; +- map type is either 'd' for non-executable maps or 'x' for executable maps; +- addr level is either 'k' for kernel dso or '.' for user dso. + +For symbols resolution you may need to install debugging symbols. + +Please be aware that duration is currently always 0 and doesn't reflect actual +time it took for fault to be handled! + +When --verbose specified, perf trace tries to print all available information +for both IP and fault address in the form of dso@symbol+offset. + +EXAMPLES +-------- + +Trace syscalls, major and minor pagefaults: + + $ perf trace -F all + + 1416.547 ( 0.000 ms): python/20235 majfault [CRYPTO_push_info_+0x0] => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0@0x61be0 (x.) + + As you can see, there was major pagefault in python process, from + CRYPTO_push_info_ routine which faulted somewhere in libcrypto.so. + SEE ALSO -------- linkperf:perf-record[1], linkperf:perf-script[1]
tools/perf/builtin-trace.c +124 -1
179 lines not on this page · raw message
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 4/5 perf trace: Add pagefaults record and replay support
In reply to Arnaldo Carvalho de MeloFrom: Stanislav Fomichev <[email protected]>
Previous commit added live pagefault trace support, this one adds record and replay support.
Example:
[root@zoo /]# echo 1 > /proc/sys/vm/drop_caches ; trace -F all record -a sleep 10 [ perf record: Woken up 0 times to write data ]
[ perf record: Captured and wrote 1029.722 MB perf.data (~44989242 samples) ]
[root@zoo /]# ls -la perf.data
-rw-------. 1 root root 1083921722 Jun 26 17:44 perf.data
[root@zoo /]# perf evlist
raw_syscalls:sys_enter
raw_syscalls:sys_exit
major-faults
minor-faults
[root@zoo /]# trace -i perf.data | grep -v trace\/ | tail -15
156.137 ( 0.000 ms): perl/18476 minfault [0xb4243] => 0x0 (?.)
156.139 ( 0.000 ms): perl/18476 minfault [Perl_sv_clear+0x123] => 0x0 (?.)
156.140 ( 0.000 ms): perl/18476 minfault [Perl_sv_clear+0xc4] => 0x0 (?.)
156.144 ( 0.000 ms): perl/18476 minfault [_int_free+0xda] => 0x0 (?.)
156.151 ( 0.000 ms): perl/18476 minfault [_int_free+0x1df] => 0x0 (?.)
156.158 ( 0.000 ms): perl/18476 minfault [0xb4243] => 0x0 (?.)
156.161 ( 0.000 ms): perl/18476 minfault [0xb4243] => 0x0 (?.)
156.168 ( 0.000 ms): perl/18476 minfault [0xb4243] => 0x0 (?.)
156.172 ( 0.000 ms): perl/18476 minfault [0xb4243] => 0x0 (?.)
156.173 ( 0.000 ms): perl/18476 minfault [_int_free+0xda] => 0x0 (?.)
156.183 ( 0.000 ms): perl/18476 minfault [Perl_hfree_next_entry+0xb4] => 0x0 (?.)
156.197 ( 0.000 ms): perl/18476 minfault [_int_free+0x1df] => 0x0 (?.)
156.216 ( 0.000 ms): perl/18476 minfault [Perl_sv_clear+0x123] => 0x0 (?.)
156.221 ( 0.000 ms): perl/18476 minfault [Perl_sv_clear+0x123] => 0x0 (?.)[root@zoo /]#
--- tools/perf/builtin-trace.c | 63 +++++++++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 18 deletions(-)
tools/perf/builtin-trace.c +45 -18
@@ -1897,7 +1897,7 @@ static int parse_target_str(struct trace *trace)return 0 ; } -static int trace__record (int argc,const char **argv) +static int trace__record (struct trace *trace,int argc,const char **argv) {unsigned int rec_argc, i, j;const char **rec_argv;
@@ -1906,34 +1906,52 @@ static int trace__record(int argc, const char **argv)"-R" ,"-m" ,"1024" , "-c", "1", - "-e", }; +const char *const sc_args[] = {"-e" , }; +unsigned int sc_args_nr =ARRAY_SIZE (sc_args); +const char *const majpf_args[] = {"-e" ,"major-faults" }; +unsigned int majpf_args_nr =ARRAY_SIZE (majpf_args); +const char *const minpf_args[] = {"-e" ,"minor-faults" }; +unsigned int minpf_args_nr =ARRAY_SIZE (minpf_args); +/* +1 is for the event string below */ - rec_argc =ARRAY_SIZE (record_args) +1 + argc; + rec_argc =ARRAY_SIZE (record_args) + sc_args_nr +1 + + majpf_args_nr + minpf_args_nr + argc; rec_argv =calloc (rec_argc +1 ,sizeof (char *));if (rec_argv ==NULL )return -ENOMEM ; + j =0 ;for (i =0 ; i <ARRAY_SIZE (record_args); i++) - rec_argv[i] = record_args[i]; + rec_argv[j++] = record_args[i]; + +for (i =0 ; i < sc_args_nr; i++) + rec_argv[j++] = sc_args[i];/* event string may be different for older kernels - e.g., RHEL6 */ if (is_valid_tracepoint ("raw_syscalls:sys_enter" )) - rec_argv[i] ="raw_syscalls:sys_enter,raw_syscalls:sys_exit" ; + rec_argv[j++] ="raw_syscalls:sys_enter,raw_syscalls:sys_exit" ;else if (is_valid_tracepoint ("syscalls:sys_enter" )) - rec_argv[i] ="syscalls:sys_enter,syscalls:sys_exit" ; + rec_argv[j++] ="syscalls:sys_enter,syscalls:sys_exit" ;else {pr_err ("Neither raw_syscalls nor syscalls events exist.\n" );return -1 ; } - i++; -for (j =0 ; j < (unsigned int )argc; j++, i++) - rec_argv[i] = argv[j]; +if (trace->trace_pgfaults &TRACE_PFMAJ ) +for (i =0 ; i < majpf_args_nr; i++) + rec_argv[j++] = majpf_args[i]; + +if (trace->trace_pgfaults &TRACE_PFMIN ) +for (i =0 ; i < minpf_args_nr; i++) + rec_argv[j++] = minpf_args[i]; + +for (i =0 ; i < (unsigned int )argc; i++) + rec_argv[j++] = argv[i]; -return cmd_record (i, rec_argv,NULL ); +return cmd_record (j, rec_argv,NULL ); }static size_t trace__fprintf_thread_summary (struct trace *trace,FILE *fp);
@@ -2224,6 +2242,14 @@ static int trace__replay(struct trace *trace) goto out; } +evlist__for_each (session->evlist, evsel) { +if (evsel->attr.type ==PERF_TYPE_SOFTWARE && + (evsel->attr.config ==PERF_COUNT_SW_PAGE_FAULTS_MAJ || + evsel->attr.config ==PERF_COUNT_SW_PAGE_FAULTS_MIN || + evsel->attr.config ==PERF_COUNT_SW_PAGE_FAULTS )) + evsel->handler = trace__pgfault; + } + err =parse_target_str (trace);if (err !=0 ) goto out;
@@ -2458,20 +2484,21 @@ int cmd_trace(int argc, const char **argv, const char *prefix __maybe_unused)int err;char bf[BUFSIZ ]; -if ((argc >1 ) && (strcmp (argv[1 ],"record" ) ==0 )) -return trace__record (argc-2 , &argv[2 ]); - - argc =parse_options (argc, argv, trace_options, trace_usage,0 ); - -/* summary_only implies summary option, but don't overwrite summary if set */ -if (trace.summary_only) - trace.summary = trace.summary_only; + argc =parse_options (argc, argv, trace_options, trace_usage, +PARSE_OPT_STOP_AT_NON_OPTION );if (trace.trace_pgfaults) { trace.opts.sample_address = true; trace.opts.sample_time = true; } +if ((argc >=1 ) && (strcmp (argv[0 ],"record" ) ==0 )) +return trace__record (&trace, argc-1 , &argv[1 ]); + +/* summary_only implies summary option, but don't overwrite summary if set */ +if (trace.summary_only) + trace.summary = trace.summary_only; +if (output_name !=NULL ) { err =trace__open_output (&trace, output_name);if (err <0 ) {
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 5/5 perf trace: Add possibility to switch off syscall events
In reply to Arnaldo Carvalho de MeloFrom: Stanislav Fomichev <[email protected]>
Currently, we may either trace syscalls or syscalls+pagefaults.
We'd like to be able to trace *only* pagefaults and this commit implements this feature.
Example:
[root@zoo /]# echo 1 > /proc/sys/vm/drop_caches ; trace --no-syscalls -F -p `pidof xchat`
0.000 ( 0.000 ms): xchat/4574 majfault [g_unichar_get_script+0x11] => /usr/lib64/libglib-2.0.so.0.3800.2@0xc403b (x.)
0.202 ( 0.000 ms): xchat/4574 majfault [_cairo_hash_table_lookup+0x53] => 0x2280ff0 (?.)
20.854 ( 0.000 ms): xchat/4574 majfault [gdk_cairo_set_source_pixbuf+0x110] => /usr/bin/xchat@0x6da1f (x.)
1022.000 ( 0.000 ms): xchat/4574 majfault [__memcpy_sse2_unaligned+0x29] => 0x7ff5a8ca0400 (?.)
^C[root@zoo /]#Below we can see malloc calls, 'trace' reading symbol tables in libraries to resolve symbols, etc.
[root@zoo /]# echo 1 > /proc/sys/vm/drop_caches ; trace --no-syscalls -F all --cpu 1 sleep 10
0.000 ( 0.000 ms): chrome/26589 minfault [0x1b53129] => /tmp/perf-26589.map@0x33cbcbf7f000 (x.)
96.477 ( 0.000 ms): libvirtd/947 minfault [copy_user_enhanced_fast_string+0x5] => 0x7f7685bba000 (?k)
113.164 ( 0.000 ms): Xorg/1063 minfault [0x786da] => 0x7fce52882a3c (?.)
7162.801 ( 0.000 ms): chrome/3747 minfault [0x8e1a89] => 0xfcaefed0008 (?.)
<SNIP>
7773.138 ( 0.000 ms): chrome/3886 minfault [0x8e1a89] => 0xfcb0ce28008 (?.)
7992.022 ( 0.000 ms): chrome/26574 minfault [0x1b5a708] => 0x3de7b5fc5000 (?.)
8108.949 ( 0.000 ms): qemu-system-x8/4537 majfault [_int_malloc+0xee] => 0x7faffc466d60 (?.)
8108.975 ( 0.000 ms): qemu-system-x8/4537 minfault [_int_malloc+0x102] => 0x7faffc466d60 (?.)
<SNIP>
8148.174 ( 0.000 ms): qemu-system-x8/4537 minfault [_int_malloc+0x102] => 0x7faffc4eb500 (?.)
8270.855 ( 0.000 ms): chrome/26245 minfault [do_bo_emit_reloc+0xdb] => 0x45d092bc004 (?.)
8270.869 ( 0.000 ms): chrome/26245 minfault [do_bo_emit_reloc+0x108] => 0x45d09150000 (?.)
no symbols found in /usr/lib64/libspice-server.so.1.9.0, maybe install a debug package?
8273.831 ( 0.000 ms): trace/20198 majfault [__memcmp_sse4_1+0xbc6] => /usr/lib64/libspice-server.so.1.9.0@0xdf000 (d.)
<SNIP>
8275.121 ( 0.000 ms): trace/20198 minfault [dso__load+0x38] => 0x14fe756 (?.)
no symbols found in /usr/lib64/libelf-0.158.so, maybe install a debug package?
8275.142 ( 0.000 ms): trace/20198 minfault [__memcmp_sse4_1+0xbc6] => /usr/lib64/libelf-0.158.so@0x0 (d.)<SNIP>
[root@zoo /]#
--- tools/perf/Documentation/perf-trace.txt | 7 ++++ tools/perf/builtin-trace.c | 58 ++++++++++++++++++--------------- 2 files changed, 39 insertions(+), 26 deletions(-)
tools/perf/Documentation/perf-trace.txt +7 -0
@@ -112,6 +112,9 @@ the thread executes on the designated CPUs. Default is to monitor all CPUs. Trace pagefaults. Optionally, you can specify whether you want minor, major or all pagefaults. Default value is maj. +--syscalls:: + Trace system calls. This options is enabled by default. + PAGEFAULTS ----------
@@ -137,6 +140,10 @@ for both IP and fault address in the form of dso@symbol+offset. EXAMPLES -------- +Trace only major pagefaults: + + $ perf trace --no-syscalls -F + Trace syscalls, major and minor pagefaults: $ perf trace -F all
tools/perf/builtin-trace.c +32 -26
109 lines not on this page · raw message
Signature · 1 line
1.9.3
Quoted 44 lines · Arnaldo Carvalho de Melo
Hi Ingo,
Please consider pulling,
- Arnaldo
The following changes since commit
1c92f88542faa3ae4f970c548b4fe8275a45201b:Merge tag 'perf-core-for-mingo' of
git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perfinto perf/core (2014-06-25 07:44:19 +0200)are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.gittags/perf-core-for-mingofor you to fetch changes up to
e281a9606d7073c517f2571e83faaff029ddc1cf:perf trace: Add possibility to switch off syscall events (2014-06-26 17:48:07 -0300)
----------------------------------------------------------------
perf/core improvements and fixes:New features:
. Add support for pagefault tracing in 'trace', please see multiple examples
in the changeset messages (Stanislav Fomichev).User visible:
. Fallback to syscalls:* when raw_syscalls:* is not available in the perl and
python perf scripts. (Daniel Bristot de Oliveira)Signed-off-by Arnaldo Carvalho de Melo <[email protected]>----------------------------------------------------------------
Daniel Bristot de Oliveira (1):
perf scripts: Fallback to syscalls:* when raw_syscalls:* is not availableStanislav Fomichev (4):
perf trace: Addperf_eventparameter totracepoint_handlerperf trace: Add support for pagefault tracing perf trace: Add pagefaults record and replay support perf trace: Add possibility to switch off syscall events
Quoted 13 lines
tools/perf/Documentation/perf-trace.txt | 46 ++++ tools/perf/builtin-trace.c | 237 +++++++++++++++++---- tools/perf/scripts/perl/bin/failed-syscalls-record | 3 +- tools/perf/scripts/perl/failed-syscalls.pl | 5 + .../python/bin/failed-syscalls-by-pid-record | 3 +- tools/perf/scripts/python/bin/sctop-record | 3 +- .../python/bin/syscall-counts-by-pid-record | 3 +- .../perf/scripts/python/bin/syscall-counts-record | 3 +- .../perf/scripts/python/failed-syscalls-by-pid.py | 5 + tools/perf/scripts/python/sctop.py | 5 + tools/perf/scripts/python/syscall-counts-by-pid.py | 5 + tools/perf/scripts/python/syscall-counts.py | 5 + 12 files changed, 280 insertions(+), 43 deletions(-)
Pulled, thanks a lot Arnaldo!
Ingo