3 Usage: ./cmsBenchmark.py [options]
6 --cpu=... specify the core on which to run the performance suite
7 --cores=... specify the number of cores of the machine (can be used with 0 to stop cmsScimark from running on the other cores)
8 -n ..., --numevts specify the number of events for each tests/each candle/each step
9 --candle=... specify the candle to run instead of all the 7 candles of the suite
10 --step=... specify the step to run instead of all steps of the suite
11 --repeat=... specify the number of times to re-run the whole suite
12 -h, --help show this help
13 -d show debugging information
15 Legal entries for individual candles (--candle option):
24 Legal entries for specific tests (--step option):
33 and combinations of steps like:
37 and sequences of steps or combinations of steps like:
38 GEN-SIM,DIGI,L1-DIGI2RAW-RAW2DIGI,RECO
39 Note: when the necessary pre-steps are omitted, cmsPerfSuite.py will take care of it.
43 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).
45 ./cmsBenchmark.py --cpu=2
46 This will run the test on core cpu2.
48 ./cmsBenchmark.py --cpu=0,1 --cores=8 -n 200
49 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.
51 ./cmsBenchmark.py --cores=8 --repeat=10 --candle QCD_80_120
52 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.
54 ./cmsBenchmark.py --step=GEN-SIM,DIGI,RECO
55 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.
60 cmssw_base=os.environ[
"CMSSW_BASE"]
61 cmssw_release_base=os.environ[
"CMSSW_RELEASE_BASE"]
62 cmssw_version=os.environ[
"CMSSW_VERSION"]
63 host=os.environ[
"HOST"]
64 user=os.environ[
"USER"]
67 Script=
"cmsPerfSuite.py"
86 numevts=
" --timesize=100"
88 igprofevts=
" --igprof=0"
89 valgrindevts=
" --valgrind=0"
94 stepOption=
"GEN-SIM,DIGI,RECO"
95 step=
" --step="+stepOption
100 opts, args = getopt.getopt(argv,
"n:hd", [
"cpu=",
"cores=",
"numevts=",
"candle=",
"step=",
"repeat=",
"help"])
101 except getopt.GetoptError:
102 print "This argument option is not accepted"
105 for opt, arg
in opts:
106 if opt
in (
"-h",
"--help"):
114 cpus=cpuOption.split(
",")
115 cpu=
" --cpu="+cpuOption
116 elif opt ==
"--cores":
118 elif opt
in (
"-n",
"--numevts"):
120 numevts=
" --timesize="+arg
121 elif opt ==
"--candle":
123 candle=
" --candle="+arg
124 elif opt ==
"--step":
126 steps=stepOption.split(
",")
127 elif opt ==
"--repeat":
128 repeatOption = int(arg)
131 print "No arguments given, so DEFAULT test will be run:"
135 path=os.path.abspath(
".")
136 print "CMS Benchmarking started running at %s on %s in directory %s, run by user %s" % (date,host,path,user)
140 print "This machine (%s) is assumed to have %s cores, and the suite will be run on cpu(s) %s" %(host,coresOption,cpuOption)
141 print "%s events per test will be run" % numevtsOption
142 if candleOption !=
"":
143 print "Running only %s candle, instead of all the candles in the performance suite" % candleOption
145 print "Profiling only the following steps: %s" % stepOption
146 step=
" --step="+stepOption
154 print "The benchmarking will be repeated %s times" % repeatOption
156 for repetition
in range(repeatOption):
157 mkdircdcmd=
"mkdir Run"+str(repetition+1)+
";cd Run"+str(repetition+1)
162 PerfSuitecmd=
"cmsPerfSuite.py" + cpu + cores + numevts + igprofevts + valgrindevts + candle + step +
">& cmsPerfSuiteRun" + str(repetition + 1) +
".log"
163 launchcmd=mkdircdcmd+
";"+PerfSuitecmd
168 launchcmdstdout=Popen(launchcmd,shell=
True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT).stdout.read()
169 print launchcmdstdout
171 if __name__ ==
"__main__":