01699 :
01700
01701
01702
01703
01704
01705
01706
01707
01708 suite=PerfSuite()
01709
01710
01711
01712
01713
01714 PerfSuiteArgs={}
01715 (PerfSuiteArgs['castordir'],
01716 PerfSuiteArgs['TimeSizeEvents'],
01717 PerfSuiteArgs['IgProfEvents'],
01718 PerfSuiteArgs['CallgrindEvents'],
01719 PerfSuiteArgs['MemcheckEvents'],
01720 PerfSuiteArgs['cmsScimark'],
01721 PerfSuiteArgs['cmsScimarkLarge'],
01722 PerfSuiteArgs['cmsdriverOptions'],
01723 PerfSuiteArgs['cmsdriverPUOptions'],
01724 PerfSuiteArgs['stepOptions'],
01725 PerfSuiteArgs['quicktest'],
01726 PerfSuiteArgs['profilers'],
01727 PerfSuiteArgs['cpus'],
01728 PerfSuiteArgs['cores'],
01729 PerfSuiteArgs['prevrel'],
01730 PerfSuiteArgs['bypasshlt'],
01731 PerfSuiteArgs['runonspare'],
01732 PerfSuiteArgs['perfsuitedir'],
01733 PerfSuiteArgs['logfile'],
01734 PerfSuiteArgs['TimeSizeCandles'],
01735 PerfSuiteArgs['IgProfCandles'],
01736 PerfSuiteArgs['CallgrindCandles'],
01737 PerfSuiteArgs['MemcheckCandles'],
01738 PerfSuiteArgs['TimeSizePUCandles'],
01739 PerfSuiteArgs['IgProfPUCandles'],
01740 PerfSuiteArgs['CallgrindPUCandles'],
01741 PerfSuiteArgs['MemcheckPUCandles'],
01742 PerfSuiteArgs['PUInputFile'],
01743 PerfSuiteArgs['userInputFile'],
01744 PerfSuiteArgs['MailLogRecipients'],
01745 PerfSuiteArgs['tarball']
01746 ) = suite.optionParse(argv)
01747
01748 if not PerfSuiteArgs['logfile'] == None:
01749 if os.path.exists(PerfSuiteArgs['logfile']):
01750 oldlogfile=PerfSuiteArgs['logfile']+"_"+time.strftime("%d-%m-%Y_%H:%M:%S")
01751
01752 mvOldLogfile=subprocess.Popen("mv %s %s"%(PerfSuiteArgs['logfile'],oldlogfile), shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
01753 mvOldLogfileExitCode=mvOldLogfile.wait()
01754
01755 try:
01756 ActualLogfile = open(PerfSuiteArgs['logfile'],"w")
01757 if mvOldLogfileExitCode:
01758 ActualLogfile.write("Please check what happened: A file named %s existed already and the attempt to move it to %s produced the following output: %s\n"%(PerfSuiteArgs['logfile'],oldlogfile,mvOldLogfile.stdout))
01759 else:
01760 ActualLogfile.write("***WARNING! A file named %s existed already!\n***It has been moved to %s before starting the current logfile!\n"%(PerfSuiteArgs['logfile'],oldlogfile))
01761 except (OSError, IOError), detail:
01762 ActualLogfile.write("Failed to open the intended logfile %s, detail error:\n%s"%(PerfSuiteArgs['logfile'],detail))
01763
01764 else:
01765 try:
01766 ActualLogfile = open(PerfSuiteArgs['logfile'],"w")
01767 except (OSError, IOError), detail:
01768 ActualLogfile.write("Failed to open the intended logfile %s, detail error:\n%s"%(PerfSuiteArgs['logfile'],detail))
01769 ActualLogfile.flush()
01770
01771
01772 ActualLogfile.write("Performance suite invoked with command line:\n")
01773 cmdline=reduce(lambda x,y:x+" "+y,sys.argv)
01774 ActualLogfile.write(cmdline+"\n")
01775 ActualLogfile.flush()
01776
01777
01778 ActualLogfile.write("Initial PerfSuite Arguments:\n")
01779 for key in PerfSuiteArgs.keys():
01780 ActualLogfile.write("%s %s\n"%(key,PerfSuiteArgs[key]))
01781 ActualLogfile.flush()
01782
01783
01784
01785 if len(PerfSuiteArgs['cpus']) > 1:
01786 ActualLogfile.write("More than 1 cpu: threading the Performance Suite!\n")
01787 outputdir=PerfSuiteArgs['perfsuitedir']
01788 runonspare=PerfSuiteArgs['runonspare']
01789 cpus=PerfSuiteArgs['cpus']
01790 if runonspare:
01791 for core in range(PerfSuiteArgs['cores']):
01792 cmsScimarkLaunch_pslist={}
01793 if (core not in cpus):
01794
01795 ActualLogfile.write("Submitting cmsScimarkLaunch.csh to run on core cpu "+str(core)+"\n")
01796 subcmd = "cd %s ; cmsScimarkLaunch.csh %s" % (outputdir, str(core))
01797 command="taskset -c %s sh -c \"%s\" &" % (str(core), subcmd)
01798
01799 ActualLogfile.write(command+"\n")
01800
01801
01802 cmsScimarkLaunch_pslist[core]=subprocess.Popen(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
01803 ActualLogfile.write("Spawned %s \n with PID %s"%(command,cmsScimarkLaunch_pslist[core].pid))
01804 ActualLogfile.flush()
01805 PerfSuiteArgs['runonspare']=False
01806 logfile=PerfSuiteArgs['logfile']
01807 suitethread={}
01808 for cpu in cpus:
01809
01810
01811
01812
01813
01814 cpudir = os.path.join(outputdir,"cpu_%s" % cpu)
01815 if not os.path.exists(cpudir):
01816 os.mkdir(cpudir)
01817 PerfSuiteArgs['perfsuitedir']=cpudir
01818 PerfSuiteArgs['cpus']=[cpu]
01819 if PerfSuiteArgs['logfile']:
01820 PerfSuiteArgs['logfile']=os.path.join(cpudir,os.path.basename(PerfSuiteArgs['logfile']))
01821 else:
01822 PerfSuiteArgs['logfile']=os.path.join(cpudir,"cmsPerfSuiteThread.log")
01823
01824 suitethread[cpu]=PerfThread(**PerfSuiteArgs)
01825 ActualLogfile.write(suitethread[cpu])
01826 ActualLogfile.write("Launching PerfSuite thread on cpu%s"%cpu)
01827 ActualLogfile.flush()
01828
01829
01830 suitethread[cpu].start()
01831
01832 while reduce(lambda x,y: x or y, map(lambda x: x.isAlive(),suitethread.values())):
01833 try:
01834 time.sleep(5.0)
01835 sys.stdout.flush()
01836 except (KeyboardInterrupt, SystemExit):
01837 raise
01838 ActualLogfile.write("All PerfSuite threads have completed!\n")
01839 ActualLogfile.flush()
01840
01841 else:
01842 suite.runPerfSuite(**PerfSuiteArgs)
01843