diff options
| author | Robert Richter <robert.richter@amd.com> | 2010-06-04 05:33:10 -0400 |
|---|---|---|
| committer | Robert Richter <robert.richter@amd.com> | 2010-06-04 05:33:10 -0400 |
| commit | d8a382d2662822248a97ce9d670b90e68aefbd3a (patch) | |
| tree | 4f5bbd5d0a5881ed42de611402ea4ac2c6d6ff48 /tools/perf/scripts/python | |
| parent | 45c34e05c4e3d36e7c44e790241ea11a1d90d54e (diff) | |
| parent | c6df8d5ab87a246942d138321e1721edbb69f6e1 (diff) | |
Merge remote branch 'tip/perf/urgent' into oprofile/urgent
Diffstat (limited to 'tools/perf/scripts/python')
11 files changed, 132 insertions, 8 deletions
diff --git a/tools/perf/scripts/python/Perf-Trace-Util/lib/Perf/Trace/Util.py b/tools/perf/scripts/python/Perf-Trace-Util/lib/Perf/Trace/Util.py index 83e91435ed09..9689bc0acd9f 100644 --- a/tools/perf/scripts/python/Perf-Trace-Util/lib/Perf/Trace/Util.py +++ b/tools/perf/scripts/python/Perf-Trace-Util/lib/Perf/Trace/Util.py | |||
| @@ -23,3 +23,6 @@ def nsecs_nsecs(nsecs): | |||
| 23 | def nsecs_str(nsecs): | 23 | def nsecs_str(nsecs): |
| 24 | str = "%5u.%09u" % (nsecs_secs(nsecs), nsecs_nsecs(nsecs)), | 24 | str = "%5u.%09u" % (nsecs_secs(nsecs), nsecs_nsecs(nsecs)), |
| 25 | return str | 25 | return str |
| 26 | |||
| 27 | def clear_term(): | ||
| 28 | print("\x1b[H\x1b[2J") | ||
diff --git a/tools/perf/scripts/python/bin/failed-syscalls-by-pid-record b/tools/perf/scripts/python/bin/failed-syscalls-by-pid-record index f8885d389e6f..eb5846bcb565 100644 --- a/tools/perf/scripts/python/bin/failed-syscalls-by-pid-record +++ b/tools/perf/scripts/python/bin/failed-syscalls-by-pid-record | |||
| @@ -1,2 +1,2 @@ | |||
| 1 | #!/bin/bash | 1 | #!/bin/bash |
| 2 | perf record -c 1 -f -a -M -R -e raw_syscalls:sys_exit | 2 | perf record -a -e raw_syscalls:sys_exit $@ |
diff --git a/tools/perf/scripts/python/bin/failed-syscalls-by-pid-report b/tools/perf/scripts/python/bin/failed-syscalls-by-pid-report index 1e0c0a860c87..30293545fcc2 100644 --- a/tools/perf/scripts/python/bin/failed-syscalls-by-pid-report +++ b/tools/perf/scripts/python/bin/failed-syscalls-by-pid-report | |||
| @@ -1,4 +1,10 @@ | |||
| 1 | #!/bin/bash | 1 | #!/bin/bash |
| 2 | # description: system-wide failed syscalls, by pid | 2 | # description: system-wide failed syscalls, by pid |
| 3 | # args: [comm] | 3 | # args: [comm] |
| 4 | perf trace -s ~/libexec/perf-core/scripts/python/failed-syscalls-by-pid.py $1 | 4 | if [ $# -gt 0 ] ; then |
| 5 | if ! expr match "$1" "-" > /dev/null ; then | ||
| 6 | comm=$1 | ||
| 7 | shift | ||
| 8 | fi | ||
| 9 | fi | ||
| 10 | perf trace $@ -s ~/libexec/perf-core/scripts/python/failed-syscalls-by-pid.py $comm | ||
diff --git a/tools/perf/scripts/python/bin/sctop-record b/tools/perf/scripts/python/bin/sctop-record new file mode 100644 index 000000000000..1fc5998b721d --- /dev/null +++ b/tools/perf/scripts/python/bin/sctop-record | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | #!/bin/bash | ||
| 2 | perf record -a -e raw_syscalls:sys_enter $@ | ||
diff --git a/tools/perf/scripts/python/bin/sctop-report b/tools/perf/scripts/python/bin/sctop-report new file mode 100644 index 000000000000..b01c842ae7b4 --- /dev/null +++ b/tools/perf/scripts/python/bin/sctop-report | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | #!/bin/bash | ||
| 2 | # description: syscall top | ||
| 3 | # args: [comm] [interval] | ||
| 4 | n_args=0 | ||
| 5 | for i in "$@" | ||
| 6 | do | ||
| 7 | if expr match "$i" "-" > /dev/null ; then | ||
| 8 | break | ||
| 9 | fi | ||
| 10 | n_args=$(( $n_args + 1 )) | ||
| 11 | done | ||
| 12 | if [ "$n_args" -gt 2 ] ; then | ||
| 13 | echo "usage: sctop-report [comm] [interval]" | ||
| 14 | exit | ||
| 15 | fi | ||
| 16 | if [ "$n_args" -gt 1 ] ; then | ||
| 17 | comm=$1 | ||
| 18 | interval=$2 | ||
| 19 | shift 2 | ||
| 20 | elif [ "$n_args" -gt 0 ] ; then | ||
| 21 | interval=$1 | ||
| 22 | shift | ||
| 23 | fi | ||
| 24 | perf trace $@ -s ~/libexec/perf-core/scripts/python/sctop.py $comm $interval | ||
diff --git a/tools/perf/scripts/python/bin/syscall-counts-by-pid-record b/tools/perf/scripts/python/bin/syscall-counts-by-pid-record index 45a8c50359da..1fc5998b721d 100644 --- a/tools/perf/scripts/python/bin/syscall-counts-by-pid-record +++ b/tools/perf/scripts/python/bin/syscall-counts-by-pid-record | |||
| @@ -1,2 +1,2 @@ | |||
| 1 | #!/bin/bash | 1 | #!/bin/bash |
| 2 | perf record -c 1 -f -a -M -R -e raw_syscalls:sys_enter | 2 | perf record -a -e raw_syscalls:sys_enter $@ |
diff --git a/tools/perf/scripts/python/bin/syscall-counts-by-pid-report b/tools/perf/scripts/python/bin/syscall-counts-by-pid-report index f8044d192271..9e9d8ddd72ce 100644 --- a/tools/perf/scripts/python/bin/syscall-counts-by-pid-report +++ b/tools/perf/scripts/python/bin/syscall-counts-by-pid-report | |||
| @@ -1,4 +1,10 @@ | |||
| 1 | #!/bin/bash | 1 | #!/bin/bash |
| 2 | # description: system-wide syscall counts, by pid | 2 | # description: system-wide syscall counts, by pid |
| 3 | # args: [comm] | 3 | # args: [comm] |
| 4 | perf trace -s ~/libexec/perf-core/scripts/python/syscall-counts-by-pid.py $1 | 4 | if [ $# -gt 0 ] ; then |
| 5 | if ! expr match "$1" "-" > /dev/null ; then | ||
| 6 | comm=$1 | ||
| 7 | shift | ||
| 8 | fi | ||
| 9 | fi | ||
| 10 | perf trace $@ -s ~/libexec/perf-core/scripts/python/syscall-counts-by-pid.py $comm | ||
diff --git a/tools/perf/scripts/python/bin/syscall-counts-record b/tools/perf/scripts/python/bin/syscall-counts-record index 45a8c50359da..1fc5998b721d 100644 --- a/tools/perf/scripts/python/bin/syscall-counts-record +++ b/tools/perf/scripts/python/bin/syscall-counts-record | |||
| @@ -1,2 +1,2 @@ | |||
| 1 | #!/bin/bash | 1 | #!/bin/bash |
| 2 | perf record -c 1 -f -a -M -R -e raw_syscalls:sys_enter | 2 | perf record -a -e raw_syscalls:sys_enter $@ |
diff --git a/tools/perf/scripts/python/bin/syscall-counts-report b/tools/perf/scripts/python/bin/syscall-counts-report index a366aa61612f..dc076b618796 100644 --- a/tools/perf/scripts/python/bin/syscall-counts-report +++ b/tools/perf/scripts/python/bin/syscall-counts-report | |||
| @@ -1,4 +1,10 @@ | |||
| 1 | #!/bin/bash | 1 | #!/bin/bash |
| 2 | # description: system-wide syscall counts | 2 | # description: system-wide syscall counts |
| 3 | # args: [comm] | 3 | # args: [comm] |
| 4 | perf trace -s ~/libexec/perf-core/scripts/python/syscall-counts.py $1 | 4 | if [ $# -gt 0 ] ; then |
| 5 | if ! expr match "$1" "-" > /dev/null ; then | ||
| 6 | comm=$1 | ||
| 7 | shift | ||
| 8 | fi | ||
| 9 | fi | ||
| 10 | perf trace $@ -s ~/libexec/perf-core/scripts/python/syscall-counts.py $comm | ||
diff --git a/tools/perf/scripts/python/check-perf-trace.py b/tools/perf/scripts/python/check-perf-trace.py index 964d934395ff..d9f7893e315c 100644 --- a/tools/perf/scripts/python/check-perf-trace.py +++ b/tools/perf/scripts/python/check-perf-trace.py | |||
| @@ -51,8 +51,7 @@ def kmem__kmalloc(event_name, context, common_cpu, | |||
| 51 | 51 | ||
| 52 | flag_str("kmem__kmalloc", "gfp_flags", gfp_flags)), | 52 | flag_str("kmem__kmalloc", "gfp_flags", gfp_flags)), |
| 53 | 53 | ||
| 54 | def trace_unhandled(event_name, context, common_cpu, common_secs, common_nsecs, | 54 | def trace_unhandled(event_name, context, event_fields_dict): |
| 55 | common_pid, common_comm): | ||
| 56 | try: | 55 | try: |
| 57 | unhandled[event_name] += 1 | 56 | unhandled[event_name] += 1 |
| 58 | except TypeError: | 57 | except TypeError: |
diff --git a/tools/perf/scripts/python/sctop.py b/tools/perf/scripts/python/sctop.py new file mode 100644 index 000000000000..6cafad40c296 --- /dev/null +++ b/tools/perf/scripts/python/sctop.py | |||
| @@ -0,0 +1,78 @@ | |||
| 1 | # system call top | ||
| 2 | # (c) 2010, Tom Zanussi <tzanussi@gmail.com> | ||
| 3 | # Licensed under the terms of the GNU GPL License version 2 | ||
| 4 | # | ||
| 5 | # Periodically displays system-wide system call totals, broken down by | ||
| 6 | # syscall. If a [comm] arg is specified, only syscalls called by | ||
| 7 | # [comm] are displayed. If an [interval] arg is specified, the display | ||
| 8 | # will be refreshed every [interval] seconds. The default interval is | ||
| 9 | # 3 seconds. | ||
| 10 | |||
| 11 | import thread | ||
| 12 | import time | ||
| 13 | import os | ||
| 14 | import sys | ||
| 15 | |||
| 16 | sys.path.append(os.environ['PERF_EXEC_PATH'] + \ | ||
| 17 | '/scripts/python/Perf-Trace-Util/lib/Perf/Trace') | ||
| 18 | |||
| 19 | from perf_trace_context import * | ||
| 20 | from Core import * | ||
| 21 | from Util import * | ||
| 22 | |||
| 23 | usage = "perf trace -s syscall-counts.py [comm] [interval]\n"; | ||
| 24 | |||
| 25 | for_comm = None | ||
| 26 | default_interval = 3 | ||
| 27 | interval = default_interval | ||
| 28 | |||
| 29 | if len(sys.argv) > 3: | ||
| 30 | sys.exit(usage) | ||
| 31 | |||
| 32 | if len(sys.argv) > 2: | ||
| 33 | for_comm = sys.argv[1] | ||
| 34 | interval = int(sys.argv[2]) | ||
| 35 | elif len(sys.argv) > 1: | ||
| 36 | try: | ||
| 37 | interval = int(sys.argv[1]) | ||
| 38 | except ValueError: | ||
| 39 | for_comm = sys.argv[1] | ||
| 40 | interval = default_interval | ||
| 41 | |||
| 42 | syscalls = autodict() | ||
| 43 | |||
| 44 | def trace_begin(): | ||
| 45 | thread.start_new_thread(print_syscall_totals, (interval,)) | ||
| 46 | pass | ||
| 47 | |||
| 48 | def raw_syscalls__sys_enter(event_name, context, common_cpu, | ||
| 49 | common_secs, common_nsecs, common_pid, common_comm, | ||
| 50 | id, args): | ||
| 51 | if for_comm is not None: | ||
| 52 | if common_comm != for_comm: | ||
| 53 | return | ||
| 54 | try: | ||
| 55 | syscalls[id] += 1 | ||
| 56 | except TypeError: | ||
| 57 | syscalls[id] = 1 | ||
| 58 | |||
| 59 | def print_syscall_totals(interval): | ||
| 60 | while 1: | ||
| 61 | clear_term() | ||
| 62 | if for_comm is not None: | ||
| 63 | print "\nsyscall events for %s:\n\n" % (for_comm), | ||
| 64 | else: | ||
| 65 | print "\nsyscall events:\n\n", | ||
| 66 | |||
| 67 | print "%-40s %10s\n" % ("event", "count"), | ||
| 68 | print "%-40s %10s\n" % ("----------------------------------------", \ | ||
| 69 | "----------"), | ||
| 70 | |||
| 71 | for id, val in sorted(syscalls.iteritems(), key = lambda(k, v): (v, k), \ | ||
| 72 | reverse = True): | ||
| 73 | try: | ||
| 74 | print "%-40d %10d\n" % (id, val), | ||
| 75 | except TypeError: | ||
| 76 | pass | ||
| 77 | syscalls.clear() | ||
| 78 | time.sleep(interval) | ||
