2 from __future__
import print_function
3 import cmsPerfPublish
as cspp
4 import cmsPerfSuite
as cps
5 import cmsPerfHarvest
as cph
9 from cmsPerfCommons
import Candles
10 import optparse
as opt
11 import socket, os, sys, SimpleXMLRPCServer, threading, exceptions
14 for candle
in Candles:
15 CandlesString=CandlesString+
","+candle
16 print(CandlesString[1:])
17 _outputdir = os.getcwd()
20 _PROG_NAME = os.path.basename(sys.argv[0])
21 _CASTOR_DIR =
"/castor/cern.ch/cms/store/relval/performance/" 22 _DEFAULTS = {
"castordir" : _CASTOR_DIR,
23 "perfsuitedir" : os.getcwd(),
24 "TimeSizeEvents" : 100 ,
25 "TimeSizeCandles" :
"",
26 "TimeSizePUCandles" :
"",
28 "IgProfCandles" :
"" ,
29 "IgProfPUCandles" :
"" ,
30 "CallgrindEvents" : 0 ,
31 "CallgrindCandles" :
"" ,
32 "CallgrindPUCandles" :
"" ,
33 "MemcheckEvents" : 0 ,
34 "MemcheckCandles" :
"" ,
35 "MemcheckPUCandles" :
"" ,
37 "cmsScimarkLarge" : 10 ,
45 "isAllCandles" :
True ,
49 "logfile" : os.path.join(os.getcwd(),
"cmsPerfSuite.log")}
53 parser = opt.OptionParser(usage=(
"""%s [Options]""" % _PROG_NAME))
55 parser.add_option(
'-p',
60 help=
'Run server on a particular port',
64 parser.add_option(
'-o',
69 help=
'The output directory for all the cmsPerfSuite runs',
73 (options, args) = parser.parse_args()
75 if not options.outputdir ==
"":
76 options.outputdir = os.path.abspath(options.outputdir)
77 if not os.path.exists(options.outputdir):
78 parser.error(
"the specified output directory %s does not exist" % options.outputdir)
81 _DEFAULTS[
"perfsuitedir"] = options.outputdir
84 _outputdir = options.outputdir
86 return (options.port,options.outputdir)
100 server = SimpleXMLRPCServer.SimpleXMLRPCServer((socket.gethostname(),port))
101 server.register_function(request_benchmark)
102 except socket.error
as detail:
103 print(
"ERROR: Could not initialise server:", detail)
107 print(
"Running server on port %s... " % port)
111 server.handle_request()
113 except (KeyboardInterrupt, SystemExit):
115 server.server_close()
119 server.server_close()
121 server.server_close()
143 for line
in open(logfile,
"r"): 145 except (OSError, IOError)
as detail:
153 return _DEFAULTS[key]
161 global _outputdir, _reqnumber
162 print(
"Commands received running perfsuite for these jobs:")
175 topdir = os.path.join(_outputdir,
"request_" +
str(_reqnumber))
176 exists = os.path.exists(topdir)
181 curperfdir = os.path.abspath(os.path.join(topdir,
str(cmd_num)))
182 if not os.path.exists(curperfdir):
184 logfile = os.path.join(curperfdir,
"cmsPerfSuite.log")
185 if os.path.exists(logfile):
186 logfile = logfile +
str(cmd_num)
189 if cmd[
'cpus'] ==
"All":
190 print(
"Running performance suite on all CPUS!\n")
193 cmd[
"cpus"]=cmd[
"cpus"]+
str(cpu)+
"," 194 cmd[
"cpus"]=cmd[
"cpus"][:-1]
195 print(
"I.e. on cpus %s\n"%cmd[
"cpus"])
200 cmdwdefs[
"perfsuitedir" ] = curperfdir
201 cmdwdefs[
"TimeSizeEvents" ] =
getCPSkeyword(
"TimeSizeEvents" , cmd)
202 cmdwdefs[
"TimeSizeCandles" ] =
getCPSkeyword(
"TimeSizeCandles" , cmd)
203 cmdwdefs[
"TimeSizePUCandles" ] =
getCPSkeyword(
"TimeSizePUCandles" , cmd)
204 cmdwdefs[
"IgProfEvents" ] =
getCPSkeyword(
"IgProfEvents" , cmd)
205 cmdwdefs[
"IgProfCandles" ] =
getCPSkeyword(
"IgProfCandles" , cmd)
206 cmdwdefs[
"IgProfPUCandles" ] =
getCPSkeyword(
"IgProfPUCandles" , cmd)
207 cmdwdefs[
"CallgrindEvents" ] =
getCPSkeyword(
"CallgrindEvents" , cmd)
208 cmdwdefs[
"CallgrindCandles"] =
getCPSkeyword(
"CallgrindCandles" , cmd)
209 cmdwdefs[
"CallgrindPUCandles"] =
getCPSkeyword(
"CallgrindPUCandles" , cmd)
210 cmdwdefs[
"MemcheckEvents" ] =
getCPSkeyword(
"MemcheckEvents" , cmd)
211 cmdwdefs[
"MemcheckCandles" ] =
getCPSkeyword(
"MemcheckCandles" , cmd)
212 cmdwdefs[
"MemcheckPUCandles" ] =
getCPSkeyword(
"MemcheckPUCandles" , cmd)
214 cmdwdefs[
"cmsScimarkLarge" ] =
getCPSkeyword(
"cmsScimarkLarge" , cmd)
215 cmdwdefs[
"cmsdriverOptions"] =
getCPSkeyword(
"cmsdriverOptions", cmd)
216 cmdwdefs[
"stepOptions" ] =
getCPSkeyword(
"stepOptions" , cmd)
226 cmdwdefs[
"logfile" ] = logfile
227 logh = open(logfile,
"w")
228 logh.write(
"This perfsuite run was configured with the following options:\n")
230 for key
in cmdwdefs.keys():
231 logh.write(key +
"\t" +
str(cmdwdefs[key])+
"\n")
233 print(
"Calling cmsPerfSuite.main() function\n")
236 "-t",cmdwdefs[
"TimeSizeEvents" ],
237 "--RunTimeSize",cmdwdefs[
"TimeSizeCandles"],
238 "-o",cmdwdefs[
"perfsuitedir" ],
245 "--cmsScimark",cmdwdefs[
"cmsScimark" ],
246 "--cmsScimarkLarge",cmdwdefs[
"cmsScimarkLarge" ],
247 "--cmsdriver",cmdwdefs[
"cmsdriverOptions"],
248 "--step",cmdwdefs[
"stepOptions" ],
251 "--cpu",cmdwdefs[
"cpus" ],
252 "--cores",cmdwdefs[
"cores" ],
260 cps.main(cpsInputArgs)
261 print(
"Running of the Performance Suite is done!")
267 outs.append((cmdwdefs,cph.harvest(curperfdir)))
273 except exceptions.Exception
as detail:
275 logh = open(os.path.join(os.getcwd(),
"error.log"),
"a")
276 logh.write(
str(detail) +
"\n")
286 server_thread = threading.Thread(target =
runserv(port))
287 server_thread.setDaemon(
True)
288 server_thread.start()
290 if __name__ ==
"__main__":
S & print(S &os, JobReport::InputFile const &f)
def request_benchmark(cmds)
def get_cmsDriverOptions()
def getCPSkeyword(key, dict)