1765532c8SArnaldo Carvalho de Melo# Util.py - Python extension for perf script, miscellaneous utility code 27e4b21b8STom Zanussi# 37e4b21b8STom Zanussi# Copyright (C) 2010 by Tom Zanussi <[email protected]> 47e4b21b8STom Zanussi# 57e4b21b8STom Zanussi# This software may be distributed under the terms of the GNU General 67e4b21b8STom Zanussi# Public License ("GPL") version 2 as published by the Free Software 77e4b21b8STom Zanussi# Foundation. 8c45b168eSJeremy Clinefrom __future__ import print_function 97e4b21b8STom Zanussi 106cc73614SArnaldo Carvalho de Meloimport errno, os 116cc73614SArnaldo Carvalho de Melo 1200204c33SArnaldo Carvalho de MeloFUTEX_WAIT = 0 1300204c33SArnaldo Carvalho de MeloFUTEX_WAKE = 1 1400204c33SArnaldo Carvalho de MeloFUTEX_PRIVATE_FLAG = 128 1500204c33SArnaldo Carvalho de MeloFUTEX_CLOCK_REALTIME = 256 1600204c33SArnaldo Carvalho de MeloFUTEX_CMD_MASK = ~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME) 1700204c33SArnaldo Carvalho de Melo 187e4b21b8STom ZanussiNSECS_PER_SEC = 1000000000 197e4b21b8STom Zanussi 207e4b21b8STom Zanussidef avg(total, n): 217e4b21b8STom Zanussi return total / n 227e4b21b8STom Zanussi 237e4b21b8STom Zanussidef nsecs(secs, nsecs): 247e4b21b8STom Zanussi return secs * NSECS_PER_SEC + nsecs 257e4b21b8STom Zanussi 267e4b21b8STom Zanussidef nsecs_secs(nsecs): 277e4b21b8STom Zanussi return nsecs / NSECS_PER_SEC 287e4b21b8STom Zanussi 297e4b21b8STom Zanussidef nsecs_nsecs(nsecs): 307e4b21b8STom Zanussi return nsecs % NSECS_PER_SEC 317e4b21b8STom Zanussi 327e4b21b8STom Zanussidef nsecs_str(nsecs): 337e4b21b8STom Zanussi str = "%5u.%09u" % (nsecs_secs(nsecs), nsecs_nsecs(nsecs)), 347e4b21b8STom Zanussi return str 3547902f36STom Zanussi 3600204c33SArnaldo Carvalho de Melodef add_stats(dict, key, value): 37c45b168eSJeremy Cline if key not in dict: 3800204c33SArnaldo Carvalho de Melo dict[key] = (value, value, value, 1) 3900204c33SArnaldo Carvalho de Melo else: 4000204c33SArnaldo Carvalho de Melo min, max, avg, count = dict[key] 4100204c33SArnaldo Carvalho de Melo if value < min: 4200204c33SArnaldo Carvalho de Melo min = value 4300204c33SArnaldo Carvalho de Melo if value > max: 4400204c33SArnaldo Carvalho de Melo max = value 4500204c33SArnaldo Carvalho de Melo avg = (avg + value) / 2 4600204c33SArnaldo Carvalho de Melo dict[key] = (min, max, avg, count + 1) 4700204c33SArnaldo Carvalho de Melo 4847902f36STom Zanussidef clear_term(): 4947902f36STom Zanussi print("\x1b[H\x1b[2J") 506cc73614SArnaldo Carvalho de Melo 516cc73614SArnaldo Carvalho de Meloaudit_package_warned = False 526cc73614SArnaldo Carvalho de Melo 536cc73614SArnaldo Carvalho de Melotry: 546cc73614SArnaldo Carvalho de Melo import audit 556cc73614SArnaldo Carvalho de Melo machine_to_id = { 566cc73614SArnaldo Carvalho de Melo 'x86_64': audit.MACH_86_64, 57708a3e8bSWei Li 'aarch64': audit.MACH_AARCH64, 586cc73614SArnaldo Carvalho de Melo 'alpha' : audit.MACH_ALPHA, 596cc73614SArnaldo Carvalho de Melo 'ia64' : audit.MACH_IA64, 606cc73614SArnaldo Carvalho de Melo 'ppc' : audit.MACH_PPC, 616cc73614SArnaldo Carvalho de Melo 'ppc64' : audit.MACH_PPC64, 626fae8663SNaveen N. Rao 'ppc64le' : audit.MACH_PPC64LE, 636cc73614SArnaldo Carvalho de Melo 's390' : audit.MACH_S390, 646cc73614SArnaldo Carvalho de Melo 's390x' : audit.MACH_S390X, 656cc73614SArnaldo Carvalho de Melo 'i386' : audit.MACH_X86, 666cc73614SArnaldo Carvalho de Melo 'i586' : audit.MACH_X86, 676cc73614SArnaldo Carvalho de Melo 'i686' : audit.MACH_X86, 686cc73614SArnaldo Carvalho de Melo } 697f6c1bd5SArnaldo Carvalho de Melo try: 707f6c1bd5SArnaldo Carvalho de Melo machine_to_id['armeb'] = audit.MACH_ARMEB 717f6c1bd5SArnaldo Carvalho de Melo except: 727f6c1bd5SArnaldo Carvalho de Melo pass 736cc73614SArnaldo Carvalho de Melo machine_id = machine_to_id[os.uname()[4]] 746cc73614SArnaldo Carvalho de Meloexcept: 756cc73614SArnaldo Carvalho de Melo if not audit_package_warned: 766cc73614SArnaldo Carvalho de Melo audit_package_warned = True 77*41a37430SWei Li print("Install the python-audit package to get syscall names.\n" 78*41a37430SWei Li "For example:\n # apt-get install python3-audit (Ubuntu)" 79*41a37430SWei Li "\n # yum install python3-audit (Fedora)" 80c45b168eSJeremy Cline "\n etc.\n") 816cc73614SArnaldo Carvalho de Melo 826cc73614SArnaldo Carvalho de Melodef syscall_name(id): 836cc73614SArnaldo Carvalho de Melo try: 846cc73614SArnaldo Carvalho de Melo return audit.audit_syscall_to_name(id, machine_id) 856cc73614SArnaldo Carvalho de Melo except: 866cc73614SArnaldo Carvalho de Melo return str(id) 876cc73614SArnaldo Carvalho de Melo 886cc73614SArnaldo Carvalho de Melodef strerror(nr): 896cc73614SArnaldo Carvalho de Melo try: 906cc73614SArnaldo Carvalho de Melo return errno.errorcode[abs(nr)] 916cc73614SArnaldo Carvalho de Melo except: 926cc73614SArnaldo Carvalho de Melo return "Unknown %d errno" % nr 93