CMS 3D CMS Logo

Functions | Variables
cmsBenchmark Namespace Reference

Functions

def main (argv)
 
def usage ()
 

Variables

 cmssw_base
 
 cmssw_release_base
 
 cmssw_version
 
 host
 
 Script
 
 user
 

Detailed Description

Usage: ./cmsBenchmark.py [options]
   
Options:
  --cpu=...            specify the core on which to run the performance suite
  --cores=...          specify the number of cores of the machine (can be used with 0 to stop cmsScimark from running on the other cores)
  -n ..., --numevts    specify the number of events for each tests/each candle/each step
  --candle=...         specify the candle to run instead of all the 7 candles of the suite
  --step=...           specify the step to run instead of all steps of the suite
  --repeat=...         specify the number of times to re-run the whole suite
  -h, --help           show this help
  -d                   show debugging information

Legal entries for individual candles (--candle option):
HiggsZZ4LM190
MinBias
SingleElectronE1000
SingleMuMinusPt10
SinglePiMinusE1000
TTbar
QCD_80_120

Legal entries for specific tests (--step option):
GEN
SIM
DIGI
L1
DIGI2RAW
HLT
RAW2DIGI
RECO
and combinations of steps like:
GEN-SIM
L1-DIGI2RAW-HLT
DIGI2RAW-RAW2DIGI
and sequences of steps or combinations of steps like:
GEN-SIM,DIGI,L1-DIGI2RAW-RAW2DIGI,RECO
Note: when the necessary pre-steps are omitted, cmsPerfSuite.py will take care of it.

Examples:
./cmsBenchmark.py
 This will run with the default options --cpu=1, --cores=4, --numevts=100, --step=GEN-SIM,DIGI,RECO --repeat=1 (Note: all results will be reported in a directory called Run1).
OR
./cmsBenchmark.py --cpu=2
 This will run the test on core cpu2.
OR
./cmsBenchmark.py --cpu=0,1 --cores=8 -n 200
 This will run the suite with 200 events for all tests/candles/step, on cores cpu0 and cpu1 simulataneously, while running the cmsScimark benchmarks on the other 6 cores.
OR
./cmsBenchmark.py --cores=8 --repeat=10 --candle QCD_80_120 
 This will run the performance tests only on candle QCD_80_120, running 100 evts for all steps, and it will repeat these tests 10 times, saving the results in 10 separate directories (each called RunN, with N=1,..,10) to check for systematic/statistical uncertainties. Note that by default --repeat=1, so all results will be in a directory called Run1.
OR 
./cmsBenchmark.py --step=GEN-SIM,DIGI,RECO
 This will run the performance tests only for the steps "GEN,SIM" (at once), "DIGI" and "RECO" taking care of running the necessary intermediate steps to make sure all steps can be run.

Function Documentation

def cmsBenchmark.main (   argv)

Definition at line 77 of file cmsBenchmark.py.

References createfilelist.int, edm.print(), str, and usage().

77 def main(argv):
78  #Some default values:
79  #Number of cpu cores on the machine
80  coresOption="4"
81  cores=" --cores=4"
82  #Cpu core(s) on which the suite is run:
83  cpuOption=(1) #not necessary to use tuple for single cpu, but for type consistency use ().
84  cpu=" --cpu=1"
85  #Number of events per test (per candle/per step):
86  numevtsOption="100"
87  numevts=" --timesize=100"
88  #default benchmark does not run igprof nor valgrind
89  igprofevts=" --igprof=0"
90  valgrindevts=" --valgrind=0"
91  #Default option for candle is "" since, usually all 7 candles of the suite will be run!
92  candleOption=""
93  candle=""
94  #Default option for step is ["GEN,SIM","DIGI","RECO"] since we don't need to profile all steps of the suite
95  stepOption="GEN-SIM,DIGI,RECO"
96  step=" --step="+stepOption
97  #Default option for repeat
98  repeatOption=1 #Use integer here since it will be used directly in the script
99  #Let's check the command line arguments
100  try:
101  opts, args = getopt.getopt(argv, "n:hd", ["cpu=","cores=","numevts=","candle=","step=","repeat=","help"])
102  except getopt.GetoptError:
103  print("This argument option is not accepted")
104  usage()
105  sys.exit(2)
106  for opt, arg in opts:
107  if opt in ("-h", "--help"):
108  usage()
109  sys.exit()
110  elif opt == '-d':
111  global _debug
112  _debug = 1
113  elif opt == "--cpu":
114  cpuOption=arg
115  cpus=cpuOption.split(",")
116  cpu=" --cpu="+cpuOption
117  elif opt == "--cores":
118  coresOption = arg
119  elif opt in ("-n", "--numevts"):
120  numevtsOption = arg
121  numevts=" --timesize="+arg
122  elif opt == "--candle":
123  candleOption = arg
124  candle=" --candle="+arg
125  elif opt == "--step":
126  stepOption = arg
127  steps=stepOption.split(",")
128  elif opt == "--repeat":
129  repeatOption = int(arg)
130  #Case with no arguments (using defaults)
131  if opts == []:
132  print("No arguments given, so DEFAULT test will be run:")
133  #Print a time stamp at the beginning:
134  import time
135  date=time.ctime()
136  path=os.path.abspath(".")
137  print("CMS Benchmarking started running at %s on %s in directory %s, run by user %s" % (date,host,path,user))
138  #showtags=os.popen4("showtags -r")[1].read()
139  #print showtags
140  #For the log:
141  print("This machine (%s) is assumed to have %s cores, and the suite will be run on cpu(s) %s" %(host,coresOption,cpuOption))
142  print("%s events per test will be run" % numevtsOption)
143  if candleOption !="":
144  print("Running only %s candle, instead of all the candles in the performance suite" % candleOption)
145  if stepOption != "":
146  print("Profiling only the following steps: %s" % stepOption)
147  step=" --step="+stepOption
148  #This "unpacking" of the steps is better done in cmsPerfSuite.py or the cmsSimPyRelVal.py (.pl for now)
149  #steps=stepOption.split(",")
150  #cmsPerfSuiteSteps=[]
151  #for step in steps:
152  # newstep=reduce(lambda a,b:a+","+b,step.split("-"))
153  # cmsPerfSuiteSteps.append(newstep)
154  if repeatOption !=1:
155  print("The benchmarking will be repeated %s times" % repeatOption)
156  #Now let's play!
157  for repetition in range(repeatOption):
158  mkdircdcmd="mkdir Run"+str(repetition+1)+";cd Run"+str(repetition+1)
159  #mkdircdstdout=os.popen4(mkdircmd)[1].read()
160  #if mkdirstdout:
161  # print mkdirstdout,
162  #print "Here we'd launch cmsPerfSuite.py!"
163  PerfSuitecmd="cmsPerfSuite.py" + cpu + cores + numevts + igprofevts + valgrindevts + candle + step + ">& cmsPerfSuiteRun" + str(repetition + 1) + ".log"
164  launchcmd=mkdircdcmd+";"+PerfSuitecmd
165  print(launchcmd)
166  sys.stdout.flush()
167  #Obsolete popen4-> subprocess.Popen
168  #launchcmdstdout=os.popen4(launchcmd)[1].read()
169  launchcmdstdout=Popen(launchcmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT).stdout.read()
170  print(launchcmdstdout)
171 
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66
def main(argv)
Definition: cmsBenchmark.py:77
#define str(s)
def cmsBenchmark.usage ( )

Definition at line 74 of file cmsBenchmark.py.

References edm.print().

Referenced by main().

74 def usage():
75  print(__doc__)
76 
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66

Variable Documentation

cmsBenchmark.cmssw_base
cmsBenchmark.cmssw_release_base
cmsBenchmark.cmssw_version

Definition at line 63 of file cmsBenchmark.py.

cmsBenchmark.host

Definition at line 64 of file cmsBenchmark.py.

cmsBenchmark.Script

Definition at line 68 of file cmsBenchmark.py.

cmsBenchmark.user

Definition at line 65 of file cmsBenchmark.py.