ATLAS Offline Software
Functions | Variables
vmem-sz Namespace Reference

Functions

def lib_loader (libname)
 
def load_lib (libname)
 
def dep_libs (libname)
 
def analyze (libname)
 
def analyze_libraries (libnames, detailed=False)
 
def save_stats (lib_stats, fname=None)
 
def main ()
 

Variables

 __author__
 
 __doc__
 
 _veto_libs
 
 lib_stats
 

Function Documentation

◆ analyze()

def vmem-sz.analyze (   libname)

Definition at line 47 of file vmem-sz.py.

47 def analyze (libname):
48  bkg_libs = loaded_libs()
49  #print ("::: bkg_libs:",map(os.path.basename, bkg_libs))
50  vmem0,vmem1,libs = load_lib (libname)
51  dVmemOffset = vmem1-vmem0
52  #print ("vmem0=%s vmem1=%s libs=%s" % (vmem0, vmem1, len(libs)))
53  linked_libs = [os.path.basename(lib)
54  for lib in libs
55  if (not (lib in bkg_libs) and
56  os.path.basename(lib) != os.path.basename(libname)
57  and os.access(lib, os.R_OK))]
58  #print ("::: linked_libs:",linked_libs)
59 
60  # load all linked-in libs
61  def load_linked_in_libs(linked_libs):
62  all_good = True
63  for l in linked_libs:
64  try:
65  #print (" - loading [%s]..." % l)
66  lib_loader (l)
67  except Exception as err:
68  print ("** problem loading [%s]\n%s" % (l,err))
69  all_good = False
70  pass
71  return all_good
72  #print ("--> loading all linked-in libs...")
73  NRETRY = 10
74  for _ in range(NRETRY):
75  ok = load_linked_in_libs(linked_libs)
76  if ok:
77  break
78  else:
79  print ("** err: could not reliably load all libs (after %s retries)"%NRETRY)
80 
81  #print ("--> loading all linked-in libs... [done]")
82 
83  vmem0,vmem1,libs = load_lib (libname)
84  #print ("vmem0=%s vmem1=%s libs=%s" % (vmem0, vmem1, len(libs)))
85  dVmemLib = vmem1-vmem0
86  return (dVmemLib, dVmemOffset, len(linked_libs), len(bkg_libs))
87 
88 @forking

◆ analyze_libraries()

def vmem-sz.analyze_libraries (   libnames,
  detailed = False 
)

Definition at line 89 of file vmem-sz.py.

89 def analyze_libraries (libnames, detailed=False):
90  display = []
91  _print = display.append
92  lib_stats = {}
93  for libname in libnames:
94  _print(":"*80)
95  bname = os.path.basename(libname)
96  _print(":: inspecting library: %s" % bname)
97  stats = analyze (libname)
98  _print(":: nbr linked: %s" % stats[2])
99  _print(":: dVmem-self: %8.3f Mb" % stats[0])
100  _print(":: dVmem-all : %8.3f Mb" % stats[1])
101  #print (":: bkg-libs: %s" % stats[3])
102  lib_stats[bname] = dict(
103  vmem_self= stats[0],
104  vmem_all= stats[1],
105  nbr_linked= stats[2],
106  )
107  if detailed:
108  import operator as _op
109  deps = dep_libs(libname)
110  dep_stats = dict((d, analyze(d)[:2]) for d in deps)
111  dep_vmem = dep_stats.items()
112  dep_vmem.sort(key=_op.itemgetter(1), reverse=True)
113  _print(":: deps: lib-self | lib-all:")
114  for k,v in dep_vmem:
115  _print(":: --> [%8.3f |%8.3f Mb] (%s)" % (v[0], v[1], k))
116 
117  return display,lib_stats
118 

◆ dep_libs()

def vmem-sz.dep_libs (   libname)
retrieve the list of dependencies of a given library
both direct and indirect dependencies

Definition at line 35 of file vmem-sz.py.

35 def dep_libs(libname):
36  """retrieve the list of dependencies of a given library
37  both direct and indirect dependencies
38  """
39  bkg_libs = [os.path.basename(l) for l in loaded_libs()]
40  bkg_libs = [l for l in bkg_libs if l not in _veto_libs]
41 
42  _,_,libs = load_lib(libname)
43  libs = [os.path.basename(l) for l in libs]
44  return [l for l in libs if l not in bkg_libs and l!=libname]
45 
46 @forking

◆ lib_loader()

def vmem-sz.lib_loader (   libname)

Definition at line 21 of file vmem-sz.py.

21 def lib_loader(libname):
22  return ctypes.cdll.LoadLibrary(libname)
23 
24 @forking

◆ load_lib()

def vmem-sz.load_lib (   libname)

Definition at line 25 of file vmem-sz.py.

25 def load_lib (libname):
26  _,vmem0,_ = pymon()
27  lib_loader (libname)
28  _,vmem1,_ = pymon()
29  libs = [l for l in loaded_libs()
30  if not os.path.basename(l) in _veto_libs and
31  os.access(l, os.R_OK)]
32  return (vmem0, vmem1, libs)
33 
34 @forking

◆ main()

def vmem-sz.main ( )

Definition at line 134 of file vmem-sz.py.

134 def main():
135 
136  parser = argparse.ArgumentParser(
137  description='get the inclusive and exclusive vmem sizes of a library'
138  )
139  _add = parser.add_argument
140  _add('libnames',
141  type=str,
142  nargs='+',
143  help='list of library names to be inspected')
144  _add('--detailed',
145  action='store_true',
146  default=False,
147  help='enable detailed output')
148  args = parser.parse_args()
149 
150  libnames = args.libnames
151  doDetailed = args.detailed
152 
153  print (":: inspecting libraries: %s" % libnames)
154  display,lib_stats = analyze_libraries (libnames, doDetailed)
155 
156  for l in display:
157  print (l)
158  save_stats (lib_stats)
159 
160  return lib_stats
161 

◆ save_stats()

def vmem-sz.save_stats (   lib_stats,
  fname = None 
)

Definition at line 119 of file vmem-sz.py.

119 def save_stats (lib_stats, fname=None):
120  if fname is None:
121  fname = "vmem-stats-sz.csv"
122  print (":: saving vmem statistics in [%s]..."%fname)
123  import csv, os
124  if os.path.exists (fname):
125  os.remove (fname)
126  o = csv.writer (open(fname, "w"), delimiter=';')
127  o.writerow (['nbr libraries', len(lib_stats)])
128  o.writerow (['lib name', 'dvmem-self (Mb)', 'dvmem-all (Mb)', 'nbr linked-libs'])
129  for k,v in lib_stats.items():
130  o.writerow ([os.path.basename(k), v['vmem_self'], v['vmem_all'], v['nbr_linked']])
131 
132  print (":: saving vmem statistics in [%s]... [done]"%fname)
133 

Variable Documentation

◆ __author__

vmem-sz.__author__
private

Definition at line 5 of file vmem-sz.py.

◆ __doc__

vmem-sz.__doc__
private

Definition at line 6 of file vmem-sz.py.

◆ _veto_libs

vmem-sz._veto_libs
private

Definition at line 17 of file vmem-sz.py.

◆ lib_stats

vmem-sz.lib_stats

Definition at line 163 of file vmem-sz.py.

python.IoTestsLib.pymon
def pymon()
Definition: IoTestsLib.py:31
vmem-sz.save_stats
def save_stats(lib_stats, fname=None)
Definition: vmem-sz.py:119
vmem-sz.analyze_libraries
def analyze_libraries(libnames, detailed=False)
Definition: vmem-sz.py:89
vmem-sz.analyze
def analyze(libname)
Definition: vmem-sz.py:47
sg-dump._add
_add
Definition: sg-dump.py:48
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
vmem-sz.lib_loader
def lib_loader(libname)
Definition: vmem-sz.py:21
vmem-sz.load_lib
def load_lib(libname)
Definition: vmem-sz.py:25
vmem-sz.dep_libs
def dep_libs(libname)
Definition: vmem-sz.py:35
vmem-sz.main
def main()
Definition: vmem-sz.py:134
Trk::open
@ open
Definition: BinningType.h:40
confTool._print
def _print(conf, color)
Definition: confTool.py:194