Back to home page

OSCL-LXR

 
 

    


0001 # Util.py - Python extension for perf script, miscellaneous utility code
0002 #
0003 # Copyright (C) 2010 by Tom Zanussi <tzanussi@gmail.com>
0004 #
0005 # This software may be distributed under the terms of the GNU General
0006 # Public License ("GPL") version 2 as published by the Free Software
0007 # Foundation.
0008 from __future__ import print_function
0009 
0010 import errno, os
0011 
0012 FUTEX_WAIT = 0
0013 FUTEX_WAKE = 1
0014 FUTEX_PRIVATE_FLAG = 128
0015 FUTEX_CLOCK_REALTIME = 256
0016 FUTEX_CMD_MASK = ~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME)
0017 
0018 NSECS_PER_SEC    = 1000000000
0019 
0020 def avg(total, n):
0021     return total / n
0022 
0023 def nsecs(secs, nsecs):
0024     return secs * NSECS_PER_SEC + nsecs
0025 
0026 def nsecs_secs(nsecs):
0027     return nsecs / NSECS_PER_SEC
0028 
0029 def nsecs_nsecs(nsecs):
0030     return nsecs % NSECS_PER_SEC
0031 
0032 def nsecs_str(nsecs):
0033     str = "%5u.%09u" % (nsecs_secs(nsecs), nsecs_nsecs(nsecs)),
0034     return str
0035 
0036 def add_stats(dict, key, value):
0037     if key not in dict:
0038         dict[key] = (value, value, value, 1)
0039     else:
0040         min, max, avg, count = dict[key]
0041         if value < min:
0042             min = value
0043         if value > max:
0044             max = value
0045         avg = (avg + value) / 2
0046         dict[key] = (min, max, avg, count + 1)
0047 
0048 def clear_term():
0049     print("\x1b[H\x1b[2J")
0050 
0051 audit_package_warned = False
0052 
0053 try:
0054     import audit
0055     machine_to_id = {
0056         'x86_64': audit.MACH_86_64,
0057         'alpha' : audit.MACH_ALPHA,
0058         'ia64'  : audit.MACH_IA64,
0059         'ppc'   : audit.MACH_PPC,
0060         'ppc64' : audit.MACH_PPC64,
0061         'ppc64le' : audit.MACH_PPC64LE,
0062         's390'  : audit.MACH_S390,
0063         's390x' : audit.MACH_S390X,
0064         'i386'  : audit.MACH_X86,
0065         'i586'  : audit.MACH_X86,
0066         'i686'  : audit.MACH_X86,
0067     }
0068     try:
0069         machine_to_id['armeb'] = audit.MACH_ARMEB
0070     except:
0071         pass
0072     machine_id = machine_to_id[os.uname()[4]]
0073 except:
0074     if not audit_package_warned:
0075         audit_package_warned = True
0076         print("Install the audit-libs-python package to get syscall names.\n"
0077                     "For example:\n  # apt-get install python-audit (Ubuntu)"
0078                     "\n  # yum install audit-libs-python (Fedora)"
0079                     "\n  etc.\n")
0080 
0081 def syscall_name(id):
0082     try:
0083         return audit.audit_syscall_to_name(id, machine_id)
0084     except:
0085         return str(id)
0086 
0087 def strerror(nr):
0088     try:
0089         return errno.errorcode[abs(nr)]
0090     except:
0091         return "Unknown %d errno" % nr