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. 58 from __future__
import print_function
61 cmssw_base=os.environ[
"CMSSW_BASE"]
62 cmssw_release_base=os.environ[
"CMSSW_RELEASE_BASE"]
63 cmssw_version=os.environ[
"CMSSW_VERSION"]
64 host=os.environ[
"HOST"]
65 user=os.environ[
"USER"]
68 Script=
"cmsPerfSuite.py" 87 numevts=
" --timesize=100" 89 igprofevts=
" --igprof=0" 90 valgrindevts=
" --valgrind=0" 95 stepOption=
"GEN-SIM,DIGI,RECO" 96 step=
" --step="+stepOption
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")
106 for opt, arg
in opts:
107 if opt
in (
"-h",
"--help"):
115 cpus=cpuOption.split(
",")
116 cpu=
" --cpu="+cpuOption
117 elif opt ==
"--cores":
119 elif opt
in (
"-n",
"--numevts"):
121 numevts=
" --timesize="+arg
122 elif opt ==
"--candle":
124 candle=
" --candle="+arg
125 elif opt ==
"--step":
127 steps=stepOption.split(
",")
128 elif opt ==
"--repeat":
129 repeatOption =
int(arg)
132 print(
"No arguments given, so DEFAULT test will be run:")
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))
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)
146 print(
"Profiling only the following steps: %s" % stepOption)
147 step=
" --step="+stepOption
155 print(
"The benchmarking will be repeated %s times" % repeatOption)
157 for repetition
in range(repeatOption):
158 mkdircdcmd=
"mkdir Run"+
str(repetition+1)+
";cd Run"+
str(repetition+1)
163 PerfSuitecmd=
"cmsPerfSuite.py" + cpu + cores + numevts + igprofevts + valgrindevts + candle + step +
">& cmsPerfSuiteRun" +
str(repetition + 1) +
".log" 164 launchcmd=mkdircdcmd+
";"+PerfSuitecmd
169 launchcmdstdout=Popen(launchcmd,shell=
True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT).stdout.read()
170 print(launchcmdstdout)
172 if __name__ ==
"__main__":
S & print(S &os, JobReport::InputFile const &f)