Util.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # Util.py - Python extension for perf script, miscellaneous utility code
  2. #
  3. # Copyright (C) 2010 by Tom Zanussi <tzanussi@gmail.com>
  4. #
  5. # This software may be distributed under the terms of the GNU General
  6. # Public License ("GPL") version 2 as published by the Free Software
  7. # Foundation.
  8. import errno, os
  9. FUTEX_WAIT = 0
  10. FUTEX_WAKE = 1
  11. FUTEX_PRIVATE_FLAG = 128
  12. FUTEX_CLOCK_REALTIME = 256
  13. FUTEX_CMD_MASK = ~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME)
  14. NSECS_PER_SEC = 1000000000
  15. def avg(total, n):
  16. return total / n
  17. def nsecs(secs, nsecs):
  18. return secs * NSECS_PER_SEC + nsecs
  19. def nsecs_secs(nsecs):
  20. return nsecs / NSECS_PER_SEC
  21. def nsecs_nsecs(nsecs):
  22. return nsecs % NSECS_PER_SEC
  23. def nsecs_str(nsecs):
  24. str = "%5u.%09u" % (nsecs_secs(nsecs), nsecs_nsecs(nsecs)),
  25. return str
  26. def add_stats(dict, key, value):
  27. if not dict.has_key(key):
  28. dict[key] = (value, value, value, 1)
  29. else:
  30. min, max, avg, count = dict[key]
  31. if value < min:
  32. min = value
  33. if value > max:
  34. max = value
  35. avg = (avg + value) / 2
  36. dict[key] = (min, max, avg, count + 1)
  37. def clear_term():
  38. print("\x1b[H\x1b[2J")
  39. audit_package_warned = False
  40. try:
  41. import audit
  42. machine_to_id = {
  43. 'x86_64': audit.MACH_86_64,
  44. 'alpha' : audit.MACH_ALPHA,
  45. 'ia64' : audit.MACH_IA64,
  46. 'ppc' : audit.MACH_PPC,
  47. 'ppc64' : audit.MACH_PPC64,
  48. 's390' : audit.MACH_S390,
  49. 's390x' : audit.MACH_S390X,
  50. 'i386' : audit.MACH_X86,
  51. 'i586' : audit.MACH_X86,
  52. 'i686' : audit.MACH_X86,
  53. }
  54. try:
  55. machine_to_id['armeb'] = audit.MACH_ARMEB
  56. except:
  57. pass
  58. machine_id = machine_to_id[os.uname()[4]]
  59. except:
  60. if not audit_package_warned:
  61. audit_package_warned = True
  62. print "Install the audit-libs-python package to get syscall names"
  63. def syscall_name(id):
  64. try:
  65. return audit.audit_syscall_to_name(id, machine_id)
  66. except:
  67. return str(id)
  68. def strerror(nr):
  69. try:
  70. return errno.errorcode[abs(nr)]
  71. except:
  72. return "Unknown %d errno" % nr