23#include "RConfigure.h"
87 if (stop == -1)
fStop =
fNodes->GetNWorkersCluster();
91 gEnv->SetValue(
"Proof.StatsTrace",1);
127 Error(
"Run",
"Proof not set");
130 if (!dset || (dset && strlen(dset) <= 0)){
131 Error(
"Run",
"dataset name not set");
135 if (!
fProof->ExistsDataSet(dset)) {
136 Error(
"Run",
"no such data set found; %s", dset);
140 start = (start == -1) ?
fStart : start;
141 stop = (stop == -1) ?
fStop : stop;
142 step = (step == -1) ?
fStep : step;
143 ntries = (ntries == -1) ?
fNTries : ntries;
144 debug = (debug == -1) ?
fDebug : debug;
156 Int_t minnworkersanode =
fNodes->GetMinWrksPerNode();
157 if (stop > minnworkersanode) stop = minnworkersanode;
166 Info(
"Run",
"Uploading '%s' ...", par.
Data());
167 if (
fProof->UploadPackage(par) != 0) {
168 Error(
"Run",
"problems uploading '%s' - cannot continue", par.
Data());
178 Error(
"Run",
"you should load the class '%s' before running the benchmark",
fSelName.Data());
183 while (
fParList.Tokenize(par, from,
",")) {
184 Info(
"Run",
"Uploading '%s' ...", par.
Data());
185 if (
fProof->UploadPackage(par) != 0) {
186 Error(
"Run",
"problems uploading '%s' - cannot continue", par.
Data());
189 Info(
"Run",
"Enabling '%s' ...", par.
Data());
190 if (
fProof->EnablePackage(par) != 0) {
191 Error(
"Run",
"problems enabling '%s' - cannot continue", par.
Data());
221 Info(
"Run",
"Running IO-bound tests on dataset '%s'; %d ~ %d active worker(s),"
222 " every %d worker(s).", dset, start, stop, step);
230 Double_t ymi = -1., ymx = -1., emx =- 1, ymiio = -1., ymxio = -1., mbmx = -1.;
231 for (
Int_t nactive = start; nactive <= stop; nactive += step) {
234 Int_t ncoren = (nactive < ncores) ? nactive : ncores;
240 workers.
Form(
"%dx", nactive);
241 nw =
fNodes->ActivateWorkers(workers);
243 nw =
fNodes->ActivateWorkers(nactive);
246 Error(
"Run",
"could not activate the requested number of"
247 " workers/node on the cluster; skipping the test point"
248 " (%d workers/node)", nactive);
256 Error(
"Run",
"could not retrieve dataset '%s'", dsname.
Data());
261 fProof->RegisterDataSet(dsn, fc,
"OT");
262 fProof->ShowDataSet(dsn,
"F");
264 for (
Int_t j=0; j<ntries; j++) {
267 Info(
"Run",
"Running IO-bound tests with %d active worker(s)/node;"
268 " trial %d/%d", nactive, j + 1, ntries);
270 Info(
"Run",
"Running IO-bound tests with %d active worker(s);"
271 " trial %d/%d", nactive, j + 1, ntries);
281 Info(
"Run",
"Processing data set %s with"
282 " %d active worker(s).", dsn.
Data(), nactive);
294 TString perfstats_name =
"PROOF_PerfStats";
296 if (
l) t =
dynamic_cast<TTree*
>(
l->FindObject(perfstats_name.
Data()));
322 Double_t nert = nx ? pf_eventrate/nactive/nnodes : pf_eventrate/nactive;
327 if (dy /
y1 < 0.2) dy =
y1 * 0.2;
328 if (dy >
y1) dy =
y1*.999999;
329 if (ymi < 0.) ymi =
y1 - dy;
332 if (ymx < 0.) ymx =
y1 + dy;
341 Double_t niort = nx ? pf_IOrate/nactive/nnodes : pf_IOrate/nactive;
346 if (dy /
y1 < 0.2) dy =
y1 * 0.2;
347 if (dy >
y1) dy =
y1*.999999;
348 if (ymiio < 0.) ymiio =
y1 - dy;
351 if (ymxio < 0.) ymxio =
y1 + dy;
366 TString dirn = nx ?
"RunDataReadx" :
"RunDataRead";
374 Warning(
"Run",
"cannot cd to subdirectory '%s' to store the results!", dirn.
Data());
380 Warning(
"Run",
"%s: tree not found", perfstats_name.
Data());
382 Error(
"Run",
"PROOF output list is empty!");
386 const char *drawopt = t ?
"SAME" :
"";
400 qr_cpu_eff = queryresult->
GetUsedCPU() / ncoren / qr_proc ;
402 Printf(
"cpu_eff: %f", qr_cpu_eff);
408 qr_eventrate = qr_entries /
Double_t(qr_proc);
409 if (qr_eventrate > emx) emx = qr_eventrate;
421 const Double_t Dmegabytes = 1024*1024;
423 qr_IOrate = qr_bytes / Dmegabytes /
Double_t(qr_proc);
424 if (qr_IOrate > mbmx) mbmx = qr_IOrate;
435 Double_t nert = nx ? qr_eventrate/nactive/nnodes : qr_eventrate/nactive;
440 if (dy /
y1 < 0.2) dy =
y1 * 0.2;
441 if (dy >
y1) dy =
y1*.999999;
442 if (ymi < 0.) ymi =
y1 - dy;
445 if (ymx < 0.) ymx =
y1 + dy;
455 Double_t niort = nx ? qr_IOrate/nactive/nnodes : qr_IOrate/nactive;
460 if (dy /
y1 < 0.2) dy =
y1 * 0.2;
461 if (dy >
y1) dy =
y1*.999999;
462 if (ymiio < 0.) ymiio =
y1 - dy;
465 if (ymxio < 0.) ymxio =
y1 + dy;
478 fProof->RemoveDataSet(dsn);
506 TString dirn = nx ?
"RunDataReadx" :
"RunDataRead";
514 Warning(
"Run",
"cannot cd to subdirectory '%s' to store the results!", dirn.
Data());
532 Error(
"GetDataSet",
"dataset '%s' does not exist", dset);
539 Error(
"GetDataSet",
"dataset '%s' could not be retrieved", dset);
549 Error(
"GetDataSet",
"problems classifying info on per-server base");
555 TMap *mpnodes =
fNodes->GetMapOfActiveNodes();
559 Error(
"GetDataSet",
"problems getting map of active nodes");
578 while ((key = nxnd())) {
581 while ((ksrv = nxsrv())) {
588 if ((lswrks =
dynamic_cast<TList *
>(mpnodes->
GetValue(key)))) {
597 Warning(
"GetDataSet",
"could not attach to worker list for node '%s'",
601 Warning(
"GetDataSet",
"could not attach to file collection for server '%s'",
643 const Double_t Dmegabytes = 1024.*1024.;
647 for (
Long64_t k=0; k<entries; k++) {
686 Printf(
"Performance Profiles Canvas: Name = %s Title = %s",
708 nside = (nside*nside < nprofiles) ? nside + 1 : nside;
715 while ((profile=(
TProfile*)(nxt()))){
728 TString namestem(
"+++undef+++");
753 Error(
"SetParameters",
"Proof not set; Doing nothing");
760 fProof->SetParameter(
"PROOF_DontCacheFiles",
Int_t(1));
770 Error(
"DeleteParameters",
"Proof not set; Doing nothing");
773 if (
fProof->GetInputList()) {
777 fProof->DeleteParameters(
"PROOF_BenchmarkDebug");
787 Int_t quotient = (stop - start) / step;
788 Int_t ndiv = quotient + 1;
790 Double_t ns_max = quotient*step + start + step/2.;
799 axtitle =
"Active Workers/Node";
800 namelab.Form(
"x_%s",
GetName());
808 name.Form(
"Prof_%s_PS_MaxEvts_%s", namelab.Data(), sellab.
Data());
809 title.
Form(
"Profile %s PerfStat Event- %s", namelab.Data(), sellab.
Data());
824 name.Form(
"Prof_%s_PS_Evts_%s", namelab.Data(), sellab.
Data());
825 title.
Form(
"Profile %s PerfStat Event - %s", namelab.Data(), sellab.
Data());
838 name.Form(
"Hist_%s_PS_Evts_%s", namelab.Data(), sellab.
Data());
839 title.
Form(
"Histogram %s PerfStat Event - %s", namelab.Data(), sellab.
Data());
852 name.Form(
"Norm_%s_PF_MaxEvts_%s", namelab.Data(), sellab.
Data());
853 title.
Form(
"Profile %s Normalized QueryResult Event - %s", namelab.Data(), sellab.
Data());
868 name.Form(
"Prof_%s_QR_Evts_%s", namelab.Data(), sellab.
Data());
869 title.
Form(
"Profile %s QueryResult Event - %s", namelab.Data(), sellab.
Data());
883 name.Form(
"Norm_%s_QR_Evts_%s", namelab.Data(), sellab.
Data());
884 title.
Form(
"Profile %s Normalized QueryResult Event - %s", namelab.Data(), sellab.
Data());
898 name.Form(
"Prof_%s_PS_IO_%s", namelab.Data(), sellab.
Data());
899 title.
Form(
"Profile %s PerfStat I/O %s", namelab.Data(), sellab.
Data());
912 name.Form(
"Hist_%s_PS_IO_%s", namelab.Data(), sellab.
Data());
913 title.
Form(
"Histogram %s PerfStat I/O - %s", namelab.Data(), sellab.
Data());
926 name.Form(
"Prof_%s_PS_MaxIO_%s", namelab.Data(), sellab.
Data());
927 title.
Form(
"Profile %s PerfStat I/O - %s", namelab.Data(), sellab.
Data());
942 name.Form(
"Norm_%s_PS_MaxIO_%s", namelab.Data(), sellab.
Data());
943 title.
Form(
"Profile %s Normalized PerfStat I/O - %s", namelab.Data(), sellab.
Data());
958 name.Form(
"Prof_%s_QR_IO_%s", namelab.Data(), sellab.
Data());
959 title.
Form(
"Profile %s QueryResult I/O - %s", namelab.Data(), sellab.
Data());
973 name.Form(
"Norm_%s_QR_IO_%s", namelab.Data(), sellab.
Data());
974 title.
Form(
"Profile %s Normalized QueryResult I/O - %s", namelab.Data(), sellab.
Data());
988 name.Form(
"Prof_%s_CPU_eff_%s", namelab.Data(), sellab.
Data());
989 title.
Form(
"Profile %s CPU efficiency - %s", namelab.Data(), sellab.
Data());
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
Option_t Option_t TPoint TPoint const char y1
const char *const kPROOF_BenchSelDataDef
const char *const kPROOF_BenchDataSelPar
const char *const kPROOF_BenchParDir
R__EXTERN TProof * gProof
void Printf(const char *fmt,...)
Formats a string in a circular formatting buffer and prints the string.
R__EXTERN TStyle * gStyle
R__EXTERN TSystem * gSystem
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
void Print(Option_t *option="") const override
Default print for collections, calls Print(option, 1).
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
This class stores the date and time with a precision of one second in an unsigned 32 bit word (950130...
Describe directory structure in memory.
virtual Bool_t cd()
Change current directory to "this" directory.
Class that contains a list of TFileInfo's and accumulated meta data information about its entries.
TMap * GetFilesPerServer(const char *exclude=nullptr, Bool_t curronly=kFALSE)
Return a map of TFileCollections with the files on each data server, excluding servers in the comma-s...
Int_t Update(Long64_t avgsize=-1)
Update accumulated information about the elements of the collection (e.g.
void SetDefaultTreeName(const char *treeName)
void Print(Option_t *option="") const override
Prints the contents of the TFileCollection.
const char * GetDefaultTreeName() const
Returns the tree set with SetDefaultTreeName if set Returns the name of the first tree in the meta da...
Int_t Add(TFileInfo *info)
Add TFileInfo to the collection.
Class describing a generic file including meta information.
void Draw(Option_t *option="") override
Draw this histogram with options.
2-D histogram with a double per channel (see TH1 documentation)
TObject * Remove(TObject *obj) override
Remove object from the list.
This class displays a legend box (TPaveText) containing several legend entries.
TObject * First() const override
Return the first object in the list. Returns 0 when list is empty.
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
TObject * GetValue(const char *keyname) const
Returns a pointer to the value associated with keyname as name of the key.
TObject * Clone(const char *newname="") const override
Make a clone of an object using the Streamer facility.
const char * GetName() const override
Returns name of object.
const char * GetTitle() const override
Returns title of object.
virtual const char * GetName() const
Returns name of object.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
@ kOverwrite
overwrite existing object with same name
TObject()
TObject constructor.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
TVirtualPerfStats::EEventType fType
Long64_t fEventsProcessed
Handle operations on datasets used by ProofBench.
I/O-intensive PROOF benchmark test reads in event files distributed on the cluster.
TLegend * fProfLegend_evt
TFileCollection * GetDataSet(const char *dset, Int_t nact, Bool_t nx)
Get a subsample of dsname suited to run with 'nact' and option 'nx'.
TH2 * fHist_perfstat_event
TProfile * fProfile_perfstat_IOmax
TProfile * fProfile_queryresult_IO
TProfile * fNorm_queryresult_event
TProfile * fProfile_queryresult_event
TProfile * fProfile_perfstat_evtmax
TProfile * fNorm_perfstat_evtmax
void FillPerfStatProfiles(TTree *t, Int_t nactive)
void DrawPerfProfiles()
Get canvas.
TProfile * fProfile_perfstat_IO
Int_t SetParameters()
Set parameters.
TProfile * fProfile_perfstat_event
TProofBenchRunDataRead(TProofBenchDataSet *pbds, TPBReadType *readtype=0, TDirectory *dirproofbench=0, TProof *proof=0, TProofNodes *nodes=0, Long64_t nevents=-1, Int_t ntries=2, Int_t start=1, Int_t stop=-1, Int_t step=1, Int_t debug=0)
TString GetNameStem() const
Get name for this run.
Int_t DeleteParameters()
Delete parameters set for this run.
~TProofBenchRunDataRead() override
Destructor.
void BuildHistos(Int_t start, Int_t stop, Int_t step, Bool_t nx)
Build histograms, profiles and graphs needed for this run.
const char * GetName() const override
Returns name of object.
TProfile * fNorm_queryresult_IO
void Run(Long64_t, Int_t, Int_t, Int_t, Int_t, Int_t, Int_t) override
TProfile * fProfile_cpu_eff
TLegend * fNormLegend_evt
TProfile * fNorm_perfstat_IOmax
TDirectory * fDirProofBench
void Print(Option_t *option="") const override
Print the content of this object.
TProofBenchRun(TProof *proof=0, const char *sel=0)
Constructor: check PROOF and load selectors PAR.
virtual const char * GetSelName()
PROOF worker node information.
Set of tools to analyse the performance tree.
Double_t GetMBRateAvgMax() const
Double_t GetEvtRateAvgMax() const
This class controls a Parallel ROOT Facility, PROOF, cluster.
A container class for query results.
Long64_t GetEntries() const
TDatime GetEndTime() const
TDatime GetStartTime() const
Float_t GetProcTime() const
Float_t GetUsedCPU() const
Long64_t GetBytes() const
static const TString & GetEtcDir()
Get the sysconfig directory in the installation. Static utility function.
const char * Data() const
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Basic time type with millisecond precision.
A TTree represents a columnar dataset.
virtual Int_t GetEntry(Long64_t entry, Int_t getall=0)
Read all branches of entry and return total number of bytes read.
virtual Int_t SetBranchAddress(const char *bname, void *add, TBranch **ptr=nullptr)
Change branch address, dealing with clone trees properly.
virtual void SetDirectory(TDirectory *dir)
Change the tree's directory.
virtual Long64_t GetEntries() const
Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0) override
Write this object to the current directory.
void SetName(const char *name) override
Change the name of this tree.
This class represents a WWW compatible URL.
const char * GetHostFQDN() const
Return fully qualified domain name of url host.
void SetHost(const char *host)
Double_t Sqrt(Double_t x)
Returns the square root of x.