From: Tom Zanussi <tzanussi@gmail.com>
To: linux-kernel@vger.kernel.org
Cc: mingo@elte.hu, fweisbec@gmail.com, rostedt@goodmis.org,
k-keiichi@bx.jp.nec.com
Subject: [PATCH 10/12] perf trace/scripting: make the syscall map available as a Python dict
Date: Wed, 27 Jan 2010 02:28:01 -0600 [thread overview]
Message-ID: <1264580883-15324-11-git-send-email-tzanussi@gmail.com> (raw)
In-Reply-To: <1264580883-15324-1-git-send-email-tzanussi@gmail.com>
Create a Python extension that makes the perf syscall map into a
Python dict.
New instances of the syscall dict can be retrieved at any time by by
calling the Python function get_syscall_names().
Also adds a new utility function that makes uses of the syscall name
dict:
syscall_name(syscall_nr)
which returns a syscall name given a syscall_nr, or the number itself
if the syscall wasn't found in the map (or 'undefined' if the value
passed in was bogus).
Signed-off-by: Tom Zanussi <tzanussi@gmail.com>
---
.../perf/scripts/python/Perf-Trace-Util/Context.c | 22 ++++++++++++++++++++
.../python/Perf-Trace-Util/lib/Perf/Trace/Util.py | 12 ++++++++++
.../perf/scripts/python/failed-syscalls-by-pid.py | 3 +-
tools/perf/scripts/python/syscall-counts-by-pid.py | 3 +-
tools/perf/scripts/python/syscall-counts.py | 3 +-
5 files changed, 40 insertions(+), 3 deletions(-)
diff --git a/tools/perf/scripts/python/Perf-Trace-Util/Context.c b/tools/perf/scripts/python/Perf-Trace-Util/Context.c
index 957085d..ebdcc35 100644
--- a/tools/perf/scripts/python/Perf-Trace-Util/Context.c
+++ b/tools/perf/scripts/python/Perf-Trace-Util/Context.c
@@ -72,6 +72,26 @@ static PyObject *perf_trace_context_common_lock_depth(PyObject *self,
return Py_BuildValue("i", retval);
}
+static PyObject *perf_trace_context_get_syscall_names(PyObject *self,
+ PyObject *args)
+{
+ const struct syscall_metadata *meta;
+ PyObject *dict;
+ int i;
+
+ dict = PyDict_New();
+ if (!dict)
+ return NULL;
+
+ for (i = 0; i < nr_syscalls(); i++) {
+ meta = syscall_at_idx(i);
+ PyDict_SetItem(dict, PyInt_FromLong(meta->nr),
+ PyString_FromString(meta->name));
+ }
+
+ return dict;
+}
+
static PyMethodDef ContextMethods[] = {
{ "common_pc", perf_trace_context_common_pc, METH_VARARGS,
"Get the common preempt count event field value."},
@@ -79,6 +99,8 @@ static PyMethodDef ContextMethods[] = {
"Get the common flags event field value."},
{ "common_lock_depth", perf_trace_context_common_lock_depth,
METH_VARARGS, "Get the common lock depth event field value."},
+ { "get_syscall_names", perf_trace_context_get_syscall_names,
+ METH_NOARGS, "Get the syscall_nr->syscall_name dict."},
{ NULL, NULL, 0, NULL}
};
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 83e9143..08d7d8e 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
@@ -6,6 +6,8 @@
# Public License ("GPL") version 2 as published by the Free Software
# Foundation.
+from perf_trace_context import *
+
NSECS_PER_SEC = 1000000000
def avg(total, n):
@@ -23,3 +25,13 @@ def nsecs_nsecs(nsecs):
def nsecs_str(nsecs):
str = "%5u.%09u" % (nsecs_secs(nsecs), nsecs_nsecs(nsecs)),
return str
+
+syscall_name_map = get_syscall_names()
+
+def syscall_name(id):
+ if id == -1:
+ return "undefined"
+ try:
+ return syscall_name_map[id]
+ except KeyError:
+ return str(id)
diff --git a/tools/perf/scripts/python/failed-syscalls-by-pid.py b/tools/perf/scripts/python/failed-syscalls-by-pid.py
index 0ca0227..007e959 100644
--- a/tools/perf/scripts/python/failed-syscalls-by-pid.py
+++ b/tools/perf/scripts/python/failed-syscalls-by-pid.py
@@ -13,6 +13,7 @@ sys.path.append(os.environ['PERF_EXEC_PATH'] + \
from perf_trace_context import *
from Core import *
+from Util import *
usage = "perf trace -s syscall-counts-by-pid.py [comm]\n";
@@ -62,7 +63,7 @@ def print_error_totals():
print "\n%s [%d]\n" % (comm, pid),
id_keys = syscalls[comm][pid].keys()
for id in id_keys:
- print " syscall: %-16d\n" % (id),
+ print " syscall: %-16s\n" % (syscall_name(id)),
ret_keys = syscalls[comm][pid][id].keys()
for ret, val in sorted(syscalls[comm][pid][id].iteritems(), key = lambda(k, v): (v, k), reverse = True):
print " err = %-20d %10d\n" % (ret, val),
diff --git a/tools/perf/scripts/python/syscall-counts-by-pid.py b/tools/perf/scripts/python/syscall-counts-by-pid.py
index af722d6..fffe0d6 100644
--- a/tools/perf/scripts/python/syscall-counts-by-pid.py
+++ b/tools/perf/scripts/python/syscall-counts-by-pid.py
@@ -13,6 +13,7 @@ sys.path.append(os.environ['PERF_EXEC_PATH'] + \
from perf_trace_context import *
from Core import *
+from Util import *
usage = "perf trace -s syscall-counts-by-pid.py [comm]\n";
@@ -61,4 +62,4 @@ def print_syscall_totals():
id_keys = syscalls[comm][pid].keys()
for id, val in sorted(syscalls[comm][pid].iteritems(), \
key = lambda(k, v): (v, k), reverse = True):
- print " %-38d %10d\n" % (id, val),
+ print " %-38s %10d\n" % (syscall_name(id), val),
diff --git a/tools/perf/scripts/python/syscall-counts.py b/tools/perf/scripts/python/syscall-counts.py
index f977e85..a641c6f 100644
--- a/tools/perf/scripts/python/syscall-counts.py
+++ b/tools/perf/scripts/python/syscall-counts.py
@@ -13,6 +13,7 @@ sys.path.append(os.environ['PERF_EXEC_PATH'] + \
from perf_trace_context import *
from Core import *
+from Util import *
usage = "perf trace -s syscall-counts.py [comm]\n";
@@ -55,4 +56,4 @@ def print_syscall_totals():
for id, val in sorted(syscalls.iteritems(), key = lambda(k, v): (v, k), \
reverse = True):
- print "%-40d %10d\n" % (id, val),
+ print "%-40s %10d\n" % (syscall_name(id), val),
--
1.6.4.GIT
next prev parent reply other threads:[~2010-01-27 8:28 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-27 8:27 [PATCH 00/12] perf trace: Python scripting support Tom Zanussi
2010-01-27 8:27 ` [PATCH 01/12] perf trace/scripting: Fix supported language listing option Tom Zanussi
2010-02-25 10:06 ` [tip:perf/core] perf/scripts: " tip-bot for Tom Zanussi
2010-01-27 8:27 ` [PATCH 02/12] perf trace/scripting: fix bug in Util.pm Tom Zanussi
2010-02-25 10:06 ` [tip:perf/core] perf/scripts: Fix " tip-bot for Tom Zanussi
2010-01-27 8:27 ` [PATCH 03/12] perf trace/scripting: move common code out of Perl-specific files Tom Zanussi
2010-02-25 10:07 ` [tip:perf/core] perf/scripts: Move " tip-bot for Tom Zanussi
2010-01-27 8:27 ` [PATCH 04/12] perf trace/scripting: move Perl scripting files to scripting-engines dir Tom Zanussi
2010-02-25 10:07 ` [tip:perf/core] perf/scripts: Move " tip-bot for Tom Zanussi
2010-01-27 8:27 ` [PATCH 05/12] perf trace/scripting: remove check-perf-trace from listed scripts Tom Zanussi
2010-02-22 1:51 ` Frederic Weisbecker
2010-02-25 10:07 ` [tip:perf/core] perf/scripts: Remove " tip-bot for Tom Zanussi
2010-02-25 10:07 ` [tip:perf/core] perf/scripts: Add Python scripting engine tip-bot for Tom Zanussi
2010-01-27 8:27 ` [PATCH 06/12] perf trace/scripting: add " Tom Zanussi
2010-02-22 2:27 ` Frederic Weisbecker
2010-02-22 7:12 ` Tom Zanussi
2010-02-25 10:08 ` [tip:perf/core] perf/scripts: Remove unnecessary PyTuple resizes tip-bot for Tom Zanussi
2010-01-27 8:27 ` [PATCH 07/12] perf trace/scripting: add syscall tracing scripts Tom Zanussi
2010-02-25 10:08 ` [tip:perf/core] perf/scripts: Add " tip-bot for Tom Zanussi
2010-01-27 8:27 ` [PATCH 08/12] perf: export some syscall metadata Tom Zanussi
2010-02-23 21:44 ` Frederic Weisbecker
2010-02-24 6:00 ` Tom Zanussi
2010-02-25 1:52 ` Frederic Weisbecker
2010-02-25 6:09 ` Tom Zanussi
2010-02-25 2:43 ` Frederic Weisbecker
2010-02-25 6:51 ` Tom Zanussi
2010-03-27 0:37 ` Frederic Weisbecker
2010-03-28 5:18 ` Tom Zanussi
2010-01-27 8:28 ` [PATCH 09/12] perf tools: save syscall map Tom Zanussi
2010-01-27 8:28 ` Tom Zanussi [this message]
2010-01-27 8:28 ` [PATCH 11/12] perf trace/scripting: make the syscall map available as a Perl hash Tom Zanussi
2010-01-27 8:28 ` [PATCH 12/12] perf trace/scripting: add perf-trace-python Documentation Tom Zanussi
2010-02-25 1:37 ` Frederic Weisbecker
2010-02-25 6:06 ` Tom Zanussi
2010-02-25 10:08 ` [tip:perf/core] perf/scripts: Add " tip-bot for Tom Zanussi
2010-02-19 21:37 ` [PATCH 00/12] perf trace: Python scripting support Frederic Weisbecker
2010-02-20 21:51 ` Tom Zanussi
2010-02-23 17:31 ` Frederic Weisbecker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1264580883-15324-11-git-send-email-tzanussi@gmail.com \
--to=tzanussi@gmail.com \
--cc=fweisbec@gmail.com \
--cc=k-keiichi@bx.jp.nec.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®