aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/scripts/python/syscall-counts-by-pid.py
blob: daf314cc5dd313e9fca436eafb82282ea4f40324 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# system call counts, by pid
# (c) 2010, Tom Zanussi <tzanussi@gmail.com>
# Licensed under the terms of the GNU GPL License version 2
#
# Displays system-wide system call totals, broken down by syscall.
# If a [comm] arg is specified, only syscalls called by [comm] are displayed.

import os, sys

sys.path.append(os.environ['PERF_EXEC_PATH'] + \
	'/scripts/python/Perf-Trace-Util/lib/Perf/Trace')

from perf_trace_context import *
from Core import *
from Util import syscall_name

usage = "perf script -s syscall-counts-by-pid.py [comm]\n";

for_comm = None
for_pid = None

if len(sys.argv) > 2:
	sys.exit(usage)

if len(sys.argv) > 1:
	try:
		for_pid = int(sys.argv[1])
	except:
		for_comm = sys.argv[1]

syscalls = autodict()

def trace_begin():
	print "Press control+C to stop and show the summary"

def trace_end():
	print_syscall_totals()

def raw_syscalls__sys_enter(event_name, context, common_cpu,
	common_secs, common_nsecs, common_pid, common_comm,
	common_callchain, id, args):

	if (for_comm and common_comm != for_comm) or \
	   (for_pid  and common_pid  != for_pid ):
		return
	try:
		syscalls[common_comm][common_pid][id] += 1
	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),
    else:
	    print "\nsyscall events by comm/pid:\n\n",

    print "%-40s  %10s\n" % ("comm [pid]/syscalls", "count"),
    print "%-40s  %10s\n" % ("----------------------------------------", \
                                 "----------"),

    comm_keys = syscalls.keys()
    for comm in comm_keys:
	    pid_keys = syscalls[comm].keys()
	    for pid in pid_keys:
		    print "\n%s [%d]\n" % (comm, pid),
		    id_keys = syscalls[comm][pid].keys()
		    for id, val in sorted(syscalls[comm][pid].iteritems(), \
				  key = lambda(k, v): (v, k),  reverse = True):
			    print "  %-38s  %10d\n" % (syscall_name(id), val),
td>2011-06-02gitweb: Move information about installation from README to INSTALLJakub Narebski2-116/+113 2011-06-01Git 1.7.5.4v1.7.5.4Junio C Hamano3-2/+6 2011-06-01diffcore-rename.c: avoid set-but-not-used warningJim Meyering1-2/+1 2011-05-31Update draft release notes to 1.7.6Junio C Hamano1-10/+13 2011-05-31Start 1.7.5.4 draft release notesJunio C Hamano2-1/+19 2011-05-31config.c: Remove unused git_config_global() functionRamsay Jones1-5/+0 2011-05-31diff: futureproof "stop feeding the backend early" logicJunio C Hamano4-6/+11 2011-05-31diff_tree: disable QUICK optimization with diff filterJeff King2-0/+6 2011-05-30Documentation: do not misinterpret refspecs as bold textJonathan Nieder1-3/+3 2011-05-30format-patch: make zero-length subject prefixes prettierJeff King2-1/+20 2011-05-30git-sh-i18n--envsubst: add SYNOPSIS section to the documentationÆvar Arnfjörð Bjarmason1-0/+10 2011-05-29git-grep: Fix problems with recently added testsMichał Kiedrowicz1-32/+26 2011-05-29builtin/commit.c: set status_format _after_ option parsingBrandon Casey2-4/+5 2011-05-29t7508: demonstrate status's failure to use --porcelain format with -zBrandon Casey1-0/+7 2011-05-28log: --quiet should serve as synonym to -sJunio C Hamano1-0/+2 2011-05-27rebase: write a reflog entry when finishingJeff King3-3/+7 2011-05-27rebase: create HEAD reflog entry when abortingCsaba Henk1-1/+1 2011-05-27config.mak.in: allow "configure --sysconfdir=/else/where"Junio C Hamano1-0/+1 2011-05-26docs: fix some antique example outputJeff King2-4/+4 2011-05-26docs: make sure literal "->" isn't converted to arrowJeff King2-5/+5 2011-05-26docs: update status --porcelain formatJeff King1-4/+23 2011-05-26docs: minor grammar fixes to git-statusJeff King1-3/+4 2011-05-26format-patch: preserve subject newlines with -kJeff King6-3/+8 2011-05-26clean up calling conventions for pretty.c functionsJeff King7-76/+75 2011-05-26pretty: add pp_commit_easy function for simple callersJeff King7-12/+14 2011-05-26git-submodule.sh: separate parens by a space to avoid confusing some shellsBrandon Casey1-1/+1 2011-05-26Documentation/technical/api-diff.txt: correct name of diff_unmerge()Brandon Casey1-2/+2 2011-05-26mailinfo: always clean up rfc822 header foldingJeff King2-2/+2