mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	 4d161f0360
			
		
	
	
		4d161f0360
		
	
	
	
	
		
			
			Adds a set of scripts that aggregate system call totals and system call errors. Most are Python scripts that also test basic functionality of the new Python engine, but there's also one Perl script added for comparison and for reference in some new Documentation contained in a later patch. Signed-off-by: Tom Zanussi <tzanussi@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Keiichi KII <k-keiichi@bx.jp.nec.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Paul Mackerras <paulus@samba.org> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> LKML-Reference: <1264580883-15324-8-git-send-email-tzanussi@gmail.com> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # system call counts
 | |
| # (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
 | |
| import 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 *
 | |
| 
 | |
| usage = "perf trace -s syscall-counts.py [comm]\n";
 | |
| 
 | |
| for_comm = None
 | |
| 
 | |
| if len(sys.argv) > 2:
 | |
| 	sys.exit(usage)
 | |
| 
 | |
| if len(sys.argv) > 1:
 | |
| 	for_comm = sys.argv[1]
 | |
| 
 | |
| syscalls = autodict()
 | |
| 
 | |
| def trace_begin():
 | |
| 	pass
 | |
| 
 | |
| def trace_end():
 | |
| 	print_syscall_totals()
 | |
| 
 | |
| def raw_syscalls__sys_enter(event_name, context, common_cpu,
 | |
| 	common_secs, common_nsecs, common_pid, common_comm,
 | |
| 	id, args):
 | |
| 	if for_comm is not None:
 | |
| 		if common_comm != for_comm:
 | |
| 			return
 | |
| 	try:
 | |
| 		syscalls[id] += 1
 | |
| 	except TypeError:
 | |
| 		syscalls[id] = 1
 | |
| 
 | |
| def print_syscall_totals():
 | |
|     if for_comm is not None:
 | |
| 	    print "\nsyscall events for %s:\n\n" % (for_comm),
 | |
|     else:
 | |
| 	    print "\nsyscall events:\n\n",
 | |
| 
 | |
|     print "%-40s  %10s\n" % ("event", "count"),
 | |
|     print "%-40s  %10s\n" % ("----------------------------------------", \
 | |
|                                  "-----------"),
 | |
| 
 | |
|     for id, val in sorted(syscalls.iteritems(), key = lambda(k, v): (v, k), \
 | |
| 				  reverse = True):
 | |
| 	    print "%-40d  %10d\n" % (id, val),
 |