Logo ROOT   6.07/09
Reference Guide
TProofBenchRunDataRead.cxx
Go to the documentation of this file.
1 // @(#)root/proof:$Id$
2 // Author: Sangsu Ryu 22/06/2010
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2005, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 /** \class TProofBenchRunDataRead
13 \ingroup proofbench
14 
15 I/O-intensive PROOF benchmark test reads in event files distributed
16 on the cluster. Number of events processed per second and size of
17 events processed per second are plotted against number of active
18 workers. Performance rate for unit packets and performance rate
19 for query are plotted.
20 
21 */
22 
23 #include "RConfigure.h"
24 
25 #include "TProofBenchRunDataRead.h"
26 #include "TProofBenchDataSet.h"
27 #include "TProofPerfAnalysis.h"
28 #include "TProofNodes.h"
29 #include "TFileCollection.h"
30 #include "TFileInfo.h"
31 #include "TProof.h"
32 #include "TString.h"
33 #include "Riostream.h"
34 #include "TMap.h"
35 #include "TTree.h"
36 #include "TH1.h"
37 #include "TH2D.h"
38 #include "TCanvas.h"
39 #include "TProfile.h"
40 #include "TKey.h"
41 #include "TRegexp.h"
42 #include "TPerfStats.h"
43 #include "THashList.h"
44 #include "TSortedList.h"
45 #include "TPad.h"
46 #include "TEnv.h"
47 #include "TLeaf.h"
48 #include "TQueryResult.h"
49 #include "TMath.h"
50 #include "TStyle.h"
51 #include "TLegend.h"
52 #include "TROOT.h"
53 
55 
56 ////////////////////////////////////////////////////////////////////////////////
57 
59  TDirectory* dirproofbench, TProof* proof,
60  TProofNodes* nodes, Long64_t nevents, Int_t ntries,
61  Int_t start, Int_t stop, Int_t step, Int_t debug)
62  : TProofBenchRun(proof, kPROOF_BenchSelDataDef), fProof(proof),
63  fReadType(readtype), fDS(pbds),
64  fNEvents(nevents), fNTries(ntries), fStart(start), fStop(stop), fStep(step),
65  fDebug(debug), fFilesPerWrk(2), fReleaseCache(kTRUE),
66  fDirProofBench(dirproofbench), fNodes(nodes),
67  fListPerfPlots(0), fProfile_perfstat_event(0), fHist_perfstat_event(0),
68  fProfile_perfstat_evtmax(0), fNorm_perfstat_evtmax(0),
69  fProfile_queryresult_event(0), fNorm_queryresult_event(0),
70  fProfile_perfstat_IO(0), fHist_perfstat_IO(0),
71  fProfile_perfstat_IOmax(0), fNorm_perfstat_IOmax(0),
72  fProfile_queryresult_IO(0), fNorm_queryresult_IO(0), fProfile_cpu_eff(0),
73  fProfLegend_evt(0), fNormLegend_evt(0), fProfLegend_mb(0), fNormLegend_mb(0),
74  fCPerfProfiles(0), fName(0)
75 {
76  // Default constructor
77 
78  if (!fProof) fProof = gProof;
79  if (!fDS) fDS = new TProofBenchDataSet(fProof);
80 
81  // Set name
82  fName = "DataRead";
83 
84  if (!fNodes) fNodes = new TProofNodes(fProof);
85  fNodes->GetMapOfActiveNodes()->Print();
86 
87  if (stop == -1) fStop = fNodes->GetNWorkersCluster();
88 
89  fListPerfPlots = new TList;
90 
91  gEnv->SetValue("Proof.StatsTrace",1);
92  gStyle->SetOptStat(0);
93 }
94 
95 ////////////////////////////////////////////////////////////////////////////////
96 /// Destructor
97 
99 {
100  fProof=0;
101  fDirProofBench=0;
103  if (fCPerfProfiles) delete fCPerfProfiles;
108 }
109 
110 ////////////////////////////////////////////////////////////////////////////////
111 /// Run benchmark
112 /// Input parameters
113 /// dset: Dataset on which to run
114 /// start: Start scan with 'start' workers.
115 /// stop: Stop scan at 'stop workers.
116 /// step: Scan every 'step' workers.
117 /// ntries: Number of tries. When it is -1, data member fNTries is used.
118 /// debug: debug switch.
119 /// Int_t: Ignored
120 /// Returns
121 /// Nothing
122 
123 void TProofBenchRunDataRead::Run(const char *dset, Int_t start, Int_t stop,
124  Int_t step, Int_t ntries, Int_t debug, Int_t)
125 {
126  if (!fProof){
127  Error("Run", "Proof not set");
128  return;
129  }
130  if (!dset || (dset && strlen(dset) <= 0)){
131  Error("Run", "dataset name not set");
132  return;
133  }
134  // Check if the dataset exists
135  if (!fProof->ExistsDataSet(dset)) {
136  Error("Run", "no such data set found; %s", dset);
137  return;
138  }
139 
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;
145 
146  Int_t fDebug_sav = fDebug;
147  fDebug = debug;
148 
149  Bool_t nx = kFALSE;
150  if (step == -2){
151  nx = kTRUE;
152  step = 1;
153  }
154 
155  if (nx){
156  Int_t minnworkersanode = fNodes->GetMinWrksPerNode();
157  if (stop > minnworkersanode) stop = minnworkersanode;
158  }
159 
160  // Load the selector, if needed
162  // Is it the default selector?
164  // Load the parfile
165 #ifdef R__HAVE_CONFIG
167 #else
168  TString par = TString::Format("$ROOTSYS/etc/%s%s.par", kPROOF_BenchParDir, kPROOF_BenchDataSelPar);
169 #endif
170  Info("Run", "Uploading '%s' ...", par.Data());
171  if (fProof->UploadPackage(par) != 0) {
172  Error("Run", "problems uploading '%s' - cannot continue", par.Data());
173  return;
174  }
175  Info("Run", "Enabling '%s' ...", kPROOF_BenchDataSelPar);
177  Error("Run", "problems enabling '%s' - cannot continue", kPROOF_BenchDataSelPar);
178  return;
179  }
180  } else {
181  if (fParList.IsNull()) {
182  Error("Run", "you should load the class '%s' before running the benchmark", fSelName.Data());
183  return;
184  } else {
185  TString par;
186  Int_t from = 0;
187  while (fParList.Tokenize(par, from, ",")) {
188  Info("Run", "Uploading '%s' ...", par.Data());
189  if (fProof->UploadPackage(par) != 0) {
190  Error("Run", "problems uploading '%s' - cannot continue", par.Data());
191  return;
192  }
193  Info("Run", "Enabling '%s' ...", par.Data());
194  if (fProof->EnablePackage(par) != 0) {
195  Error("Run", "problems enabling '%s' - cannot continue", par.Data());
196  return;
197  }
198  }
199  }
200  }
201  // Check
202  if (!TClass::GetClass(fSelName)) {
203  Error("Run", "failed to load '%s'", fSelName.Data());
204  return;
205  }
206  }
207 
208  // Build histograms, profiles and graphs needed for this run
209  BuildHistos(start, stop, step, nx);
210 
211  TString dsname(dset);
212  TString dsbasename = gSystem->BaseName(dset);
213 
214  // Get pad
215  if (!fCPerfProfiles){
216  TString canvasname = TString::Format("Performance Profiles %s", GetName());
217  fCPerfProfiles = new TCanvas(canvasname.Data(), canvasname.Data());
218  }
219 
220  // Cleanup up the canvas
222 
223  fCPerfProfiles->Divide(2,2);
224 
225  Info("Run", "Running IO-bound tests on dataset '%s'; %d ~ %d active worker(s),"
226  " every %d worker(s).", dset, start, stop, step);
227 
228  Int_t npad = 1; //pad number
229 
230  Int_t nnodes = fNodes->GetNNodes(); // Number of machines
231  Int_t ncores = fNodes->GetNCores(); // Number of cores
232 
233  Bool_t drawpf = kFALSE;
234  Double_t ymi = -1., ymx = -1., emx =- 1, ymiio = -1., ymxio = -1., mbmx = -1.;
235  for (Int_t nactive = start; nactive <= stop; nactive += step) {
236 
237  // For CPU effectiveness (ok for lite; should do it properly for standard clusters)
238  Int_t ncoren = (nactive < ncores) ? nactive : ncores;
239 
240  // Actvate the wanted workers
241  Int_t nw = -1;
242  if (nx) {
243  TString workers;
244  workers.Form("%dx", nactive);
245  nw = fNodes->ActivateWorkers(workers);
246  } else {
247  nw = fNodes->ActivateWorkers(nactive);
248  }
249  if (nw < 0){
250  Error("Run", "could not activate the requested number of"
251  " workers/node on the cluster; skipping the test point"
252  " (%d workers/node)", nactive);
253  continue;
254  }
255 
256  // Prepare the dataset for this run. possibly a subsample of
257  // the total one
258  TFileCollection *fc = GetDataSet(dsname, nactive, nx);
259  if (!fc) {
260  Error("Run", "could not retrieve dataset '%s'", dsname.Data());
261  continue;
262  }
263  fc->Print("F");
264  TString dsn = TString::Format("%s_%d_%d", dsbasename.Data(), nactive, (Int_t)nx);
265  fProof->RegisterDataSet(dsn, fc, "OT");
266  fProof->ShowDataSet(dsn, "F");
267 
268  for (Int_t j=0; j<ntries; j++) {
269 
270  if (nx){
271  Info("Run", "Running IO-bound tests with %d active worker(s)/node;"
272  " trial %d/%d", nactive, j + 1, ntries);
273  } else {
274  Info("Run", "Running IO-bound tests with %d active worker(s);"
275  " trial %d/%d", nactive, j + 1, ntries);
276  }
277 
278  // Cleanup run
279  const char *dsnr = (fDS->IsProof(fProof)) ? dsn.Data() : dsname.Data();
280  if (fReleaseCache) fDS->ReleaseCache(dsnr);
281 
283  SetParameters();
284 
285  Info("Run", "Processing data set %s with"
286  " %d active worker(s).", dsn.Data(), nactive);
287 
288  TTime starttime = gSystem->Now();
290 
292 
293  TTime endtime = gSystem->Now();
294 
295  TList *l = fProof->GetOutputList();
296 
297  //save perfstats
298  TString perfstats_name = "PROOF_PerfStats";
299  TTree *t = 0;
300  if (l) t = dynamic_cast<TTree*>(l->FindObject(perfstats_name.Data()));
301  if (t) {
302  drawpf = kTRUE;
303  TTree* tnew=(TTree*)t->Clone("tnew");
304 
305  FillPerfStatProfiles(tnew, nactive);
306 
307  TProofPerfAnalysis pfa(tnew);
308  Double_t pf_eventrate = pfa.GetEvtRateAvgMax();
309  Double_t pf_IOrate = pfa.GetMBRateAvgMax();
310  fProfile_perfstat_evtmax->Fill(nactive, pf_eventrate);
311  fCPerfProfiles->cd(npad);
316  gPad->Update();
317  fProfile_perfstat_IOmax->Fill(nactive, pf_IOrate);
318  fCPerfProfiles->cd(npad + 2);
322  fProfLegend_mb->Draw();
323  gPad->Update();
324  // The normalised histos
325  // Use the first bin to set the Y range for the histo
326  Double_t nert = nx ? pf_eventrate/nactive/nnodes : pf_eventrate/nactive;
327  fNorm_perfstat_evtmax->Fill(nactive, nert);
330  Double_t dy = 5 * e1;
331  if (dy / y1 < 0.2) dy = y1 * 0.2;
332  if (dy > y1) dy = y1*.999999;
333  if (ymi < 0.) ymi = y1 - dy;
334  if (fNorm_perfstat_evtmax->GetBinContent(nactive) < ymi)
335  ymi = fNorm_perfstat_evtmax->GetBinContent(nactive) / 2.;
336  if (ymx < 0.) ymx = y1 + dy;
337  if (fNorm_perfstat_evtmax->GetBinContent(nactive) > ymx)
338  ymx = fNorm_perfstat_evtmax->GetBinContent(nactive) * 1.5;
341  fCPerfProfiles->cd(npad + 1);
343  gPad->Update();
344  //
345  Double_t niort = nx ? pf_IOrate/nactive/nnodes : pf_IOrate/nactive;
346  fNorm_perfstat_IOmax->Fill(nactive, niort);
349  dy = 5 * e1;
350  if (dy / y1 < 0.2) dy = y1 * 0.2;
351  if (dy > y1) dy = y1*.999999;
352  if (ymiio < 0.) ymiio = y1 - dy;
353  if (fNorm_perfstat_IOmax->GetBinContent(nactive) < ymiio)
354  ymiio = fNorm_perfstat_IOmax->GetBinContent(nactive) / 2.;
355  if (ymxio < 0.) ymxio = y1 + dy;
356  if (fNorm_perfstat_IOmax->GetBinContent(nactive) > ymxio)
357  ymxio = fNorm_perfstat_IOmax->GetBinContent(nactive) * 1.5;
360  fCPerfProfiles->cd(npad + 3);
362  gPad->Update();
363 
364  //change the name
365  TString newname = TString::Format("%s_%s_%dwrks%dthtry", t->GetName(), GetName(), nactive, j);
366  tnew->SetName(newname);
367 
368  if (debug && fDirProofBench->IsWritable()){
369  TDirectory *curdir = gDirectory;
370  TString dirn = nx ? "RunDataReadx" : "RunDataRead";
371  if (!fDirProofBench->GetDirectory(dirn))
372  fDirProofBench->mkdir(dirn, "RunDataRead results");
373  if (fDirProofBench->cd(dirn)) {
375  tnew->Write();
376  l->Remove(tnew);
377  } else {
378  Warning("Run", "cannot cd to subdirectory '%s' to store the results!", dirn.Data());
379  }
380  curdir->cd();
381  }
382  } else {
383  if (l)
384  Warning("Run", "%s: tree not found", perfstats_name.Data());
385  else
386  Error("Run", "PROOF output list is empty!");
387  }
388 
389  //
390  const char *drawopt = t ? "SAME" : "";
391  // Performance measures from TQueryResult
392  TQueryResult *queryresult = fProof->GetQueryResult();
393  if (queryresult) {
394  TDatime qr_start = queryresult->GetStartTime();
395  TDatime qr_end = queryresult->GetEndTime();
396  Float_t qr_proc = queryresult->GetProcTime();
397  Long64_t qr_bytes = queryresult->GetBytes();
398 
399  Long64_t qr_entries = queryresult->GetEntries();
400 
401  // Calculate and fill CPU efficiency
402  Float_t qr_cpu_eff = -1.;
403  if (qr_proc > 0.) {
404  qr_cpu_eff = queryresult->GetUsedCPU() / ncoren / qr_proc ;
405  fProfile_cpu_eff->Fill(nactive, qr_cpu_eff);
406  Printf("cpu_eff: %f", qr_cpu_eff);
407  }
408 
409  // Calculate event rate, fill and draw
410  Double_t qr_eventrate=0;
411 
412  qr_eventrate = qr_entries / Double_t(qr_proc);
413  if (qr_eventrate > emx) emx = qr_eventrate;
414 
415  fProfile_queryresult_event->Fill(nactive, qr_eventrate);
416  fCPerfProfiles->cd(npad);
420  gPad->Update();
421 
422  // Calculate IO rate, fill and draw
423  Double_t qr_IOrate = 0;
424 
425  const Double_t Dmegabytes = 1024*1024;
426 
427  qr_IOrate = qr_bytes / Dmegabytes / Double_t(qr_proc);
428  if (qr_IOrate > mbmx) mbmx = qr_IOrate;
429 
430  fProfile_queryresult_IO->Fill(nactive, qr_IOrate);
431  fCPerfProfiles->cd(npad + 2);
433  fProfile_queryresult_IO->Draw(drawopt);
434  fProfLegend_mb->Draw();
435  gPad->Update();
436 
437  // The normalised histos
438  // Use the first bin to set the Y range for the histo
439  Double_t nert = nx ? qr_eventrate/nactive/nnodes : qr_eventrate/nactive;
440  fNorm_queryresult_event->Fill(nactive, nert);
443  Double_t dy = 5 * e1;
444  if (dy / y1 < 0.2) dy = y1 * 0.2;
445  if (dy > y1) dy = y1*.999999;
446  if (ymi < 0.) ymi = y1 - dy;
447  if (fNorm_queryresult_event->GetBinContent(nactive) < ymi)
448  ymi = fNorm_queryresult_event->GetBinContent(nactive) / 2.;
449  if (ymx < 0.) ymx = y1 + dy;
450  if (fNorm_queryresult_event->GetBinContent(nactive) > ymx)
451  ymx = fNorm_queryresult_event->GetBinContent(nactive) * 1.5;
452 // fNorm_queryresult_event->SetMaximum(ymx);
454  fCPerfProfiles->cd(npad + 1);
455  fNorm_queryresult_event->Draw(drawopt);
457  gPad->Update();
458  //
459  Double_t niort = nx ? qr_IOrate/nactive/nnodes : qr_IOrate/nactive;
460  fNorm_queryresult_IO->Fill(nactive, niort);
463  dy = 5 * e1;
464  if (dy / y1 < 0.2) dy = y1 * 0.2;
465  if (dy > y1) dy = y1*.999999;
466  if (ymiio < 0.) ymiio = y1 - dy;
467  if (fNorm_queryresult_IO->GetBinContent(nactive) < ymiio)
468  ymiio = fNorm_queryresult_IO->GetBinContent(nactive) / 2.;
469  if (ymxio < 0.) ymxio = y1 + dy;
470  if (fNorm_queryresult_IO->GetBinContent(nactive) > ymxio)
471  ymxio = fNorm_queryresult_IO->GetBinContent(nactive) * 1.5;
472 // fNorm_queryresult_IO->SetMaximum(ymxio);
474  fCPerfProfiles->cd(npad + 3);
475  fNorm_queryresult_IO->Draw(drawopt);
476  fNormLegend_mb->Draw();
477  gPad->Update();
478  }
479  fCPerfProfiles->cd(0);
480  }
481  // Remove temporary dataset
482  fProof->RemoveDataSet(dsn);
483  SafeDelete(fc);
484  }
485 
486  // Make the result persistent
487  fCPerfProfiles->cd(npad);
490  if (drawpf) fProfile_perfstat_evtmax->DrawCopy("SAME");
492  fCPerfProfiles->cd(npad + 2);
495  if (drawpf) fProfile_perfstat_IOmax->DrawCopy("SAME");
496  fProfLegend_mb->Draw();
497  fCPerfProfiles->cd(npad + 1);
499  if (drawpf) fNorm_perfstat_evtmax->DrawCopy("SAME");
501  fCPerfProfiles->cd(npad + 3);
503  if (drawpf) fNorm_perfstat_IOmax->DrawCopy("SAME");
504  fProfLegend_mb->Draw();
505  gPad->Update();
506 
507  //save performance profiles to file
508  if (fDirProofBench->IsWritable()){
509  TDirectory *curdir = gDirectory;
510  TString dirn = nx ? "RunDataReadx" : "RunDataRead";
511  if (!fDirProofBench->GetDirectory(dirn))
512  fDirProofBench->mkdir(dirn, "RunDataRead results");
513  if (fDirProofBench->cd(dirn)) {
517  } else {
518  Warning("Run", "cannot cd to subdirectory '%s' to store the results!", dirn.Data());
519  }
520  curdir->cd();
521  }
522  // Restore member data
523  fDebug = fDebug_sav;
524 }
525 
526 ////////////////////////////////////////////////////////////////////////////////
527 /// Get a subsample of dsname suited to run with 'nact' and option 'nx'.
528 
530  Int_t nact, Bool_t nx)
531 {
532  TFileCollection *fcsub = 0;
533 
534  // Dataset must exists
535  if (!fProof || (fProof && !fProof->ExistsDataSet(dset))) {
536  Error("GetDataSet", "dataset '%s' does not exist", dset);
537  return fcsub;
538  }
539 
540  // Get the full collection
541  TFileCollection *fcref = fProof->GetDataSet(dset);
542  if (!fcref) {
543  Error("GetDataSet", "dataset '%s' could not be retrieved", dset);
544  return fcsub;
545  }
546  // Is it remote ?
548 
549  // Separate info per server
550 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,30,0)
551  TMap *mpref = fcref->GetFilesPerServer(fProof->GetMaster(), kTRUE);
552 #else
553  TMap *mpref = fcref->GetFilesPerServer(fProof->GetMaster());
554 #endif
555  if (!mpref) {
556  SafeDelete(fcref);
557  Error("GetDataSet", "problems classifying info on per-server base");
558  return fcsub;
559  }
560  mpref->Print();
561 
562  // Get Active node information
563  TMap *mpnodes = fNodes->GetMapOfActiveNodes();
564  if (!mpnodes) {
565  SafeDelete(fcref);
566  SafeDelete(mpref);
567  Error("GetDataSet", "problems getting map of active nodes");
568  return fcsub;
569  }
570  mpnodes->Print();
571 
572  // Number of files: fFilesPerWrk per active worker
574  Printf(" number of files needed (ideally): %d (%d per worker)", nf, fFilesPerWrk);
575 
576  // The output dataset
577  fcsub = new TFileCollection(TString::Format("%s_%d_%d", fcref->GetName(), nact, nx),
578  fcref->GetTitle());
579 
580  // Order reference sub-collections
581  TIter nxnd(mpnodes);
582  TObject *key = 0;
583  TFileInfo *fi = 0;
584  TFileCollection *xfc = 0;
585  TList *lswrks = 0;
586  while ((key = nxnd())) {
587  TIter nxsrv(mpref);
588  TObject *ksrv = 0;
589  while ((ksrv = nxsrv())) {
590  TUrl urlsrv(ksrv->GetName());
591  if (TString(urlsrv.GetHostFQDN()).IsNull())
592  urlsrv.SetHost(TUrl(gProof->GetMaster()).GetHostFQDN());
593  if (remote ||
594  !strcmp(urlsrv.GetHostFQDN(), TUrl(key->GetName()).GetHostFQDN())) {
595  if ((xfc = dynamic_cast<TFileCollection *>(mpref->GetValue(ksrv)))) {
596  if ((lswrks = dynamic_cast<TList *>(mpnodes->GetValue(key)))) {
597  Int_t nfnd = fFilesPerWrk * lswrks->GetSize();
598  while (nfnd-- && xfc->GetList()->GetSize() > 0) {
599  if ((fi = (TFileInfo *) xfc->GetList()->First())) {
600  xfc->GetList()->Remove(fi);
601  fcsub->Add(fi);
602  }
603  }
604  } else {
605  Warning("GetDataSet", "could not attach to worker list for node '%s'",
606  key->GetName());
607  }
608  } else {
609  Warning("GetDataSet", "could not attach to file collection for server '%s'",
610  ksrv->GetName());
611  }
612  }
613  }
614  }
615 
616  // Update counters
617  fcsub->Update();
618  fcsub->Print();
619 
620  // Make sure that the tree name is the one of the original dataset
621  if (fcref) {
622  TString dflt(fcref->GetDefaultTreeName());
623  if (!dflt.IsNull()) fcsub->SetDefaultTreeName(dflt);
624  }
625 
626  // Cleanup
627  SafeDelete(fcref);
628  SafeDelete(mpref);
629  // Done
630  return fcsub;
631 }
632 
633 ////////////////////////////////////////////////////////////////////////////////
634 
636 {
637  // Fill performance profiles using tree 't'(PROOF_PerfStats).
638  // Input parameters
639  // t: Proof output tree (PROOF_PerfStat) containing performance
640  // statistics.
641  // nactive: Number of active workers processed the query.
642  // Return
643  // Nothing
644 
645  // extract timing information
646  TPerfEvent pe;
647  TPerfEvent* pep = &pe;
648  t->SetBranchAddress("PerfEvents",&pep);
649  Long64_t entries = t->GetEntries();
650 
651  const Double_t Dmegabytes = 1024.*1024.;
652  Double_t event_rate_packet = 0;
653  Double_t IO_rate_packet = 0;
654 
655  for (Long64_t k=0; k<entries; k++) {
656  t->GetEntry(k);
657 
658  // Skip information from workers
659  if (pe.fEvtNode.Contains(".")) continue;
660 
662  if (pe.fProcTime != 0.0) {
663  event_rate_packet = pe.fEventsProcessed / pe.fProcTime;
664  fHist_perfstat_event->Fill(Double_t(nactive), event_rate_packet);
665  IO_rate_packet = pe.fBytesRead / Dmegabytes / pe.fProcTime;
666  fHist_perfstat_IO->Fill(Double_t(nactive), IO_rate_packet);
667  }
668  }
669  }
670 
671  return;
672 }
673 
674 ////////////////////////////////////////////////////////////////////////////////
675 /// Print the content of this object
676 
678 {
679  Printf("Name = %s", fName.Data());
680  if (fProof) fProof->Print(option);
681  Printf("fReadType = %s%s", "k", GetNameStem().Data());
682  Printf("fNEvents = %lld", fNEvents);
683  Printf("fNTries = %d", fNTries);
684  Printf("fStart = %d", fStart);
685  Printf("fStop = %d", fStop);
686  Printf("fStep = %d", fStep);
687  Printf("fDebug = %d", fDebug);
688  if (fDirProofBench)
689  Printf("fDirProofBench = %s", fDirProofBench->GetPath());
690  if (fNodes) fNodes->Print(option);
691  if (fListPerfPlots) fListPerfPlots->Print(option);
692 
693  if (fCPerfProfiles)
694  Printf("Performance Profiles Canvas: Name = %s Title = %s",
696 }
697 
698 ////////////////////////////////////////////////////////////////////////////////
699 /// Get canvas
700 
702 {
703  if (!fCPerfProfiles){
704  TString canvasname = TString::Format("Performance Profiles %s", GetName());
705  fCPerfProfiles = new TCanvas(canvasname.Data(), canvasname.Data());
706  }
707 
709 
710  // Divide the canvas as many as the number of profiles in the list
711  Int_t nprofiles = fListPerfPlots->GetSize();
712  if (nprofiles <= 2){
713  fCPerfProfiles->Divide(nprofiles);
714  } else {
715  Int_t nside = (Int_t)TMath::Sqrt((Float_t)nprofiles);
716  nside = (nside*nside < nprofiles) ? nside + 1 : nside;
717  fCPerfProfiles->Divide(nside,nside);
718  }
719 
720  Int_t npad=1;
721  TIter nxt(fListPerfPlots);
722  TProfile* profile=0;
723  while ((profile=(TProfile*)(nxt()))){
724  fCPerfProfiles->cd(npad++);
725  profile->Draw();
726  gPad->Update();
727  }
728  return;
729 }
730 
731 ////////////////////////////////////////////////////////////////////////////////
732 /// Get name for this run
733 
735 {
736  TString namestem("+++undef+++");
737  if (fReadType) {
738  switch (fReadType->GetType()) {
740  namestem="Full";
741  break;
743  namestem="Opt";
744  break;
746  namestem="No";
747  break;
748  default:
749  break;
750  }
751  }
752  return namestem;
753 }
754 
755 ////////////////////////////////////////////////////////////////////////////////
756 /// Set parameters
757 
759 {
760  if (!fProof){
761  Error("SetParameters", "Proof not set; Doing nothing");
762  return 1;
763  }
766  fProof->SetParameter("PROOF_BenchmarkDebug", Int_t(fDebug));
767  // For Mac Os X only: do not OS cache the files read
768  fProof->SetParameter("PROOF_DontCacheFiles", Int_t(1));
769  return 0;
770 }
771 
772 ////////////////////////////////////////////////////////////////////////////////
773 /// Delete parameters set for this run
774 
776 {
777  if (!fProof){
778  Error("DeleteParameters", "Proof not set; Doing nothing");
779  return 1;
780  }
781  if (fProof->GetInputList()) {
782  TObject *type = fProof->GetInputList()->FindObject("PROOF_Benchmark_ReadType");
783  if (type) fProof->GetInputList()->Remove(type);
784  }
785  fProof->DeleteParameters("PROOF_BenchmarkDebug");
786  return 0;
787 }
788 
789 ////////////////////////////////////////////////////////////////////////////////
790 /// Build histograms, profiles and graphs needed for this run
791 
793 {
794  TObject *o = 0;
795  Int_t quotient = (stop - start) / step;
796  Int_t ndiv = quotient + 1;
797  Double_t ns_min = start - step/2.;
798  Double_t ns_max = quotient*step + start + step/2.;
799 
800  fProfLegend_evt = new TLegend(0.1, 0.8, 0.3, 0.9);
801  fNormLegend_evt = new TLegend(0.7, 0.8, 0.9, 0.9);
802  fProfLegend_mb = new TLegend(0.1, 0.8, 0.3, 0.9);
803  fNormLegend_mb = new TLegend(0.7, 0.8, 0.9, 0.9);
804 
805  TString axtitle("Active Workers"), namelab(GetName()), sellab(GetSelName());
806  if (nx) {
807  axtitle = "Active Workers/Node";
808  namelab.Form("x_%s", GetName());
809  }
811  sellab.Form("%s_%s", GetSelName(), GetNameStem().Data());
812 
813  TString name, title;
814 
815  // Book perfstat profile (max evts)
816  name.Form("Prof_%s_PS_MaxEvts_%s", namelab.Data(), sellab.Data());
817  title.Form("Profile %s PerfStat Event- %s", namelab.Data(), sellab.Data());
818  fProfile_perfstat_evtmax = new TProfile(name, title, ndiv, ns_min, ns_max);
820  fProfile_perfstat_evtmax->GetYaxis()->SetTitle("Events/sec");
824  if ((o = fListPerfPlots->FindObject(name))) {
826  delete o;
827  }
830 
831  // Book perfstat profile (evts)
832  name.Form("Prof_%s_PS_Evts_%s", namelab.Data(), sellab.Data());
833  title.Form("Profile %s PerfStat Event - %s", namelab.Data(), sellab.Data());
834  fProfile_perfstat_event = new TProfile(name, title, ndiv, ns_min, ns_max);
836  fProfile_perfstat_event->GetYaxis()->SetTitle("Events/sec");
839  if ((o = fListPerfPlots->FindObject(name))) {
841  delete o;
842  }
844 
845  // Book perfstat histogram (evts)
846  name.Form("Hist_%s_PS_Evts_%s", namelab.Data(), sellab.Data());
847  title.Form("Histogram %s PerfStat Event - %s", namelab.Data(), sellab.Data());
848  fHist_perfstat_event = new TH2D(name, title, ndiv, ns_min, ns_max, 100, 0, 0);
850  fHist_perfstat_event->GetYaxis()->SetTitle("Events/sec");
853  if ((o = fListPerfPlots->FindObject(name))) {
855  delete o;
856  }
858 
859  // Book normalized perfstat profile (max evts)
860  name.Form("Norm_%s_PF_MaxEvts_%s", namelab.Data(), sellab.Data());
861  title.Form("Profile %s Normalized QueryResult Event - %s", namelab.Data(), sellab.Data());
862  fNorm_perfstat_evtmax = new TProfile(name, title, ndiv, ns_min, ns_max);
864  fNorm_perfstat_evtmax->GetYaxis()->SetTitle("Events/sec");
868  if ((o = fListPerfPlots->FindObject(name))) {
870  delete o;
871  }
874 
875  // Book queryresult profile (evts)
876  name.Form("Prof_%s_QR_Evts_%s", namelab.Data(), sellab.Data());
877  title.Form("Profile %s QueryResult Event - %s", namelab.Data(), sellab.Data());
878  fProfile_queryresult_event = new TProfile(name, title, ndiv, ns_min, ns_max);
880  fProfile_queryresult_event->GetYaxis()->SetTitle("Events/sec");
883  if ((o = fListPerfPlots->FindObject(name))) {
885  delete o;
886  }
889 
890  // Book normalized queryresult profile (evts)
891  name.Form("Norm_%s_QR_Evts_%s", namelab.Data(), sellab.Data());
892  title.Form("Profile %s Normalized QueryResult Event - %s", namelab.Data(), sellab.Data());
893  fNorm_queryresult_event = new TProfile(name, title, ndiv, ns_min, ns_max);
895  fNorm_queryresult_event->GetYaxis()->SetTitle("Events/sec");
898  if ((o = fListPerfPlots->FindObject(name))) {
900  delete o;
901  }
904 
905  // Book perfstat profile (mbs)
906  name.Form("Prof_%s_PS_IO_%s", namelab.Data(), sellab.Data());
907  title.Form("Profile %s PerfStat I/O %s", namelab.Data(), sellab.Data());
908  fProfile_perfstat_IO = new TProfile(name, title, ndiv, ns_min, ns_max);
910  fProfile_perfstat_IO->GetYaxis()->SetTitle("MB/sec");
913  if ((o = fListPerfPlots->FindObject(name))) {
915  delete o;
916  }
918 
919  // Book perfstat histogram (mbs)
920  name.Form("Hist_%s_PS_IO_%s", namelab.Data(), sellab.Data());
921  title.Form("Histogram %s PerfStat I/O - %s", namelab.Data(), sellab.Data());
922  fHist_perfstat_IO = new TH2D(name, title, ndiv, ns_min, ns_max, 100, 0, 0);
924  fHist_perfstat_IO->GetYaxis()->SetTitle("MB/sec");
925  fHist_perfstat_IO->GetXaxis()->SetTitle(axtitle);
927  if ((o = fListPerfPlots->FindObject(name))) {
929  delete o;
930  }
932 
933  // Book perfstat profile (max mbs)
934  name.Form("Prof_%s_PS_MaxIO_%s", namelab.Data(), sellab.Data());
935  title.Form("Profile %s PerfStat I/O - %s", namelab.Data(), sellab.Data());
936  fProfile_perfstat_IOmax = new TProfile(name, title, ndiv, ns_min, ns_max);
942  if ((o = fListPerfPlots->FindObject(name))) {
944  delete o;
945  }
948 
949  // Book normalized perfstat profile (max mbs)
950  name.Form("Norm_%s_PS_MaxIO_%s", namelab.Data(), sellab.Data());
951  title.Form("Profile %s Normalized PerfStat I/O - %s", namelab.Data(), sellab.Data());
952  fNorm_perfstat_IOmax = new TProfile(name, title, ndiv, ns_min, ns_max);
954  fNorm_perfstat_IOmax->GetYaxis()->SetTitle("MB/sec");
958  if ((o = fListPerfPlots->FindObject(name))) {
960  delete o;
961  }
964 
965  // Book queryresult profile (mbs)
966  name.Form("Prof_%s_QR_IO_%s", namelab.Data(), sellab.Data());
967  title.Form("Profile %s QueryResult I/O - %s", namelab.Data(), sellab.Data());
968  fProfile_queryresult_IO = new TProfile(name, title, ndiv, ns_min, ns_max);
973  if ((o = fListPerfPlots->FindObject(name))) {
975  delete o;
976  }
979 
980  // Book normalized queryresult profile (mbs)
981  name.Form("Norm_%s_QR_IO_%s", namelab.Data(), sellab.Data());
982  title.Form("Profile %s Normalized QueryResult I/O - %s", namelab.Data(), sellab.Data());
983  fNorm_queryresult_IO = new TProfile(name, title, ndiv, ns_min, ns_max);
985  fNorm_queryresult_IO->GetYaxis()->SetTitle("MB/sec");
988  if ((o = fListPerfPlots->FindObject(name))) {
990  delete o;
991  }
994 
995  // Book CPU efficiency profile
996  name.Form("Prof_%s_CPU_eff_%s", namelab.Data(), sellab.Data());
997  title.Form("Profile %s CPU efficiency - %s", namelab.Data(), sellab.Data());
998  fProfile_cpu_eff = new TProfile(name, title, ndiv, ns_min, ns_max);
1000  fProfile_cpu_eff->GetYaxis()->SetTitle("Efficiency");
1001  fProfile_cpu_eff->GetXaxis()->SetTitle(axtitle);
1003  if ((o = fListPerfPlots->FindObject(name))) {
1004  fListPerfPlots->Remove(o);
1005  delete o;
1006  }
1008 }
const int nx
Definition: kalman.C:16
const char * GetDefaultTreeName() const
Returns the tree set with SetDefaultTreeName if set Returns the name of the first tree in the meta da...
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root.
Definition: TSystem.cxx:929
virtual const char * GetTitle() const
Returns title of object.
Definition: TNamed.h:52
double par[1]
Definition: unuranDistr.cxx:38
Int_t SetParameters()
Set parameters.
TVirtualPerfStats::EEventType fType
Definition: TPerfStats.h:54
Abstract base class for PROOF benchmark runs.
long long Long64_t
Definition: RtypesCore.h:69
virtual void SetMaximum(Double_t maximum=-1111)
Definition: TH1.h:399
This class displays a legend box (TPaveText) containing several legend entries.
Definition: TLegend.h:27
virtual Bool_t ExistsDataSet(const char *dataset)
Returns kTRUE if &#39;dataset&#39; exists, kFALSE otherwise.
Definition: TProof.cxx:10840
TString GetNameStem() const
Get name for this run.
Int_t EnablePackage(const char *package, Bool_t notOnClient=kFALSE, TList *workers=0)
Enable specified package.
Definition: TProof.cxx:8147
virtual Bool_t RegisterDataSet(const char *name, TFileCollection *dataset, const char *optStr="")
Register the &#39;dataSet&#39; on the cluster under the current user, group and the given &#39;dataSetName&#39;...
Definition: TProof.cxx:10679
float Float_t
Definition: RtypesCore.h:53
virtual void SetDirectory(TDirectory *dir)
By default when an histogram is created, it is added to the list of histogram objects in the current ...
Definition: TH1.cxx:8008
const char Option_t
Definition: RtypesCore.h:62
virtual void Print(Option_t *option="") const
Print status of PROOF cluster.
Definition: TProof.cxx:4775
This class represents a WWW compatible URL.
Definition: TUrl.h:41
R__EXTERN TStyle * gStyle
Definition: TStyle.h:418
Bool_t IsProof(TProof *p)
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
virtual void Draw(Option_t *option="")
Draw this legend with its current attributes.
Definition: TLegend.cxx:373
void SetParameter(const char *par, const char *value)
Set input list parameter.
Definition: TProof.cxx:9794
Set of tools to analyse the performance tree.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
Definition: TObject.cxx:899
void FillPerfStatProfiles(TTree *t, Int_t nactive)
TVirtualPad * cd(Int_t subpadnumber=0)
Set current canvas & pad.
Definition: TCanvas.cxx:659
virtual TFileCollection * GetDataSet(const char *dataset, const char *optStr="")
Get a list of TFileInfo objects describing the files of the specified dataset.
Definition: TProof.cxx:10909
TList * GetOutputList()
Get list with all object created during processing (see Process()).
Definition: TProof.cxx:9780
Int_t GetMinWrksPerNode() const
Definition: TProofNodes.h:53
virtual void SetMinimum(Double_t minimum=-1111)
Definition: TH1.h:400
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all branches of entry and return total number of bytes read.
Definition: TTree.cxx:5210
Basic string class.
Definition: TString.h:137
int Int_t
Definition: RtypesCore.h:41
virtual TDirectory * mkdir(const char *name, const char *title="")
Create a sub-directory and return a pointer to the created directory.
Definition: TDirectory.cxx:957
bool Bool_t
Definition: RtypesCore.h:59
const char *const kPROOF_BenchParDir
Handle operations on datasets used by ProofBench.
const Bool_t kFALSE
Definition: Rtypes.h:92
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
Definition: TList.cxx:497
Basic time type with millisecond precision.
Definition: TTime.h:29
Profile Historam.
Definition: TProfile.h:34
virtual const char * GetPath() const
Returns the full path of the directory.
Definition: TDirectory.cxx:911
void Print(Option_t *option="") const
Print the content of this object.
overwrite existing object with same name
Definition: TObject.h:84
void Run(Long64_t, Int_t, Int_t, Int_t, Int_t, Int_t, Int_t)
virtual void SetValue(const char *name, const char *value, EEnvLevel level=kEnvChange, const char *type=0)
Set the value of a resource or create a new resource.
Definition: TEnv.cxx:751
Int_t GetNActives() const
Definition: TProofNodes.h:54
TMap * GetMapOfActiveNodes() const
Definition: TProofNodes.h:56
const char * Data() const
Definition: TString.h:349
static struct mg_connection * fc(struct mg_context *ctx)
Definition: civetweb.c:1956
Int_t Update(Long64_t avgsize=-1)
Update accumulated information about the elements of the collection (e.g.
#define SafeDelete(p)
Definition: RConfig.h:499
void Print(Option_t *option="") const
Description: Print node information.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
Definition: TString.cxx:2335
virtual Int_t SetBranchAddress(const char *bname, void *add, TBranch **ptr=0)
Change branch address, dealing with clone trees properly.
Definition: TTree.cxx:7719
virtual const char * GetSelName()
Int_t DeleteParameters()
Delete parameters set for this run.
void ShowDataSet(const char *dataset="", const char *opt="filter:SsCc")
display meta-info for given dataset usi
Definition: TProof.cxx:10949
const char * GetMaster() const
Definition: TProof.h:933
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
Definition: TAttMarker.h:43
TString fEvtNode
Definition: TPerfStats.h:52
void Clear(Option_t *option="")
Remove all primitives from the canvas.
Definition: TCanvas.cxx:678
std::vector< std::vector< double > > Data
TObject * GetValue(const char *keyname) const
Returns a pointer to the value associated with keyname as name of the key.
Definition: TMap.cxx:235
Double_t GetEvtRateAvgMax() const
TQueryResult * GetQueryResult(const char *ref=0)
Return pointer to the full TQueryResult instance owned by the player and referenced by &#39;ref&#39;...
Definition: TProof.cxx:2126
virtual TObject * Clone(const char *newname="") const
Make a clone of an object using the Streamer facility.
Definition: TNamed.cxx:65
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Definition: TObject.cxx:925
Int_t ReleaseCache(const char *dset)
Release memory cache for dataset &#39;dset&#39; Return 0 on success, -1 on error.
virtual TH1 * DrawCopy(Option_t *option="", const char *name_postfix="_copy") const
Copy this histogram and Draw in the current pad.
Definition: TH1.cxx:2899
A container class for query results.
Definition: TQueryResult.h:44
Long64_t GetEntries() const
Definition: TQueryResult.h:130
const char * GetName() const
Returns name of object.
Definition: TPad.h:246
A doubly linked list.
Definition: TList.h:47
Int_t GetNNodes() const
Definition: TProofNodes.h:51
const char *const kPROOF_BenchSelDataDef
Int_t UploadPackage(const char *par, EUploadPackageOpt opt=kUntar, TList *workers=0)
Upload a PROOF archive (PAR file).
Definition: TProof.cxx:8413
virtual TTime Now()
Get current time in milliseconds since 0:00 Jan 1 1995.
Definition: TSystem.cxx:468
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
Definition: TTree.cxx:9001
const char *const kPROOF_BenchDataSelPar
R__EXTERN TSystem * gSystem
Definition: TSystem.h:549
virtual void Draw(Option_t *option="")
Draw this histogram with options.
Definition: TH1.cxx:2853
Float_t GetUsedCPU() const
Definition: TQueryResult.h:133
Long64_t fEventsProcessed
Definition: TPerfStats.h:60
Double_t fProcTime
Definition: TPerfStats.h:64
THashList * GetList()
Int_t Add(TFileInfo *info)
Add TFileInfo to the collection.
Long64_t GetBytes() const
Definition: TQueryResult.h:132
TFileCollection * GetDataSet(const char *dset, Int_t nact, Bool_t nx)
Get a subsample of dsname suited to run with &#39;nact&#39; and option &#39;nx&#39;.
virtual TObject * Remove(TObject *obj)
Remove object from the list.
Definition: TList.cxx:675
TProofBenchDataSet * fDS
Int_t GetNCores() const
Definition: TProofNodes.h:52
TString fSelOption
TObject * Remove(TObject *obj)
Remove object from the list.
Definition: THashList.cxx:285
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Definition: TString.cxx:2322
Bool_t TestBit(UInt_t f) const
Definition: TObject.h:159
EReadType GetType() const
Int_t Fill(const Double_t *v)
Definition: TProfile.h:56
TLine * l
Definition: textangle.C:4
virtual const char * GetName() const
Returns name of object.
Definition: TNamed.h:51
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
Definition: TAttMarker.h:45
TAxis * GetYaxis()
Definition: TH1.h:325
virtual Long64_t Process(TDSet *dset, const char *selector, Option_t *option="", Long64_t nentries=-1, Long64_t firstentry=0)
Process a data set (TDSet) using the specified selector (.C) file or Tselector object Entry- or event...
Definition: TProof.cxx:5275
Bool_t IsNull() const
Definition: TString.h:387
void AddInput(TObject *obj)
Add objects that might be needed during the processing of the selector (see Process()).
Definition: TProof.cxx:9706
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
Definition: TString.cxx:2241
#define Printf
Definition: TGeoToOCC.h:18
virtual Double_t GetBinError(Int_t bin) const
Return bin error of a Profile histogram.
Definition: TProfile.cxx:861
TDatime GetStartTime() const
Definition: TQueryResult.h:125
virtual void Print(Option_t *option="") const
Default print for collections, calls Print(option, 1).
const char * GetTitle() const
Returns title of object.
Definition: TPad.h:247
virtual Double_t GetBinContent(Int_t bin) const
Return bin content of a Profile histogram.
Definition: TProfile.cxx:796
void SetHost(const char *host)
Definition: TUrl.h:93
The Canvas class.
Definition: TCanvas.h:41
TList * GetInputList()
Get input list.
Definition: TProof.cxx:9725
R__EXTERN TProof * gProof
Definition: TProof.h:1107
void DrawPerfProfiles()
Get canvas.
virtual Int_t GetSize() const
Definition: TCollection.h:95
virtual void SetDirectory(TDirectory *dir)
Change the tree&#39;s directory.
Definition: TTree.cxx:8285
void SetDefaultTreeName(const char *treeName)
#define ClassImp(name)
Definition: Rtypes.h:279
void DeleteParameters(const char *wildcard)
Delete the input list parameters specified by a wildcard (e.g.
Definition: TProof.cxx:9905
virtual const char * GetName() const
Returns name of object.
Definition: TObject.cxx:416
const char * GetName() const
Returns name of object.
double Double_t
Definition: RtypesCore.h:55
TLegendEntry * AddEntry(const TObject *obj, const char *label="", Option_t *option="lpf")
Add a new entry to this legend.
Definition: TLegend.cxx:280
Int_t ActivateWorkers(Int_t nwrks)
Description: Activate &#39;nwrks&#39; workers; calls TProof::SetParallel and rebuild the internal lists Input...
Describe directory structure in memory.
Definition: TDirectory.h:44
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
Definition: TMap.h:44
int type
Definition: TGX11.cxx:120
R__EXTERN TEnv * gEnv
Definition: TEnv.h:174
This class controls a Parallel ROOT Facility, PROOF, cluster.
Definition: TProof.h:346
THist< 2, double, THistStatContent, THistStatUncertainty > TH2D
Definition: THist.hxx:307
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.
Definition: TClass.cxx:2882
virtual void Clear(Option_t *option="")
Remove all objects from the list.
Definition: TList.cxx:349
Mother of all ROOT objects.
Definition: TObject.h:44
void Print(Option_t *option="") const
Prints the contents of the TFileCollection.
virtual TObject * First() const
Return the first object in the list. Returns 0 when list is empty.
Definition: TList.cxx:557
Long64_t fBytesRead
Definition: TPerfStats.h:61
void BuildHistos(Int_t start, Int_t stop, Int_t step, Bool_t nx)
Build histograms, profiles and graphs needed for this run.
virtual Bool_t cd(const char *path=0)
Change current directory to "this" directory.
Definition: TDirectory.cxx:435
virtual void Divide(Int_t nx=1, Int_t ny=1, Float_t xmargin=0.01, Float_t ymargin=0.01, Int_t color=0)
Automatic pad generation by division.
Definition: TPad.cxx:1089
virtual void Add(TObject *obj)
Definition: TList.h:81
Class that contains a list of TFileInfo&#39;s and accumulated meta data information about its entries...
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Definition: TString.h:567
virtual Bool_t IsWritable() const
Definition: TDirectory.h:171
virtual TDirectory * GetDirectory(const char *namecycle, Bool_t printError=false, const char *funcname="GetDirectory")
Find a directory using apath.
Definition: TDirectory.cxx:338
void SetOptStat(Int_t stat=1)
The type of information printed in the histogram statistics box can be selected via the parameter mod...
Definition: TStyle.cxx:1257
#define gPad
Definition: TVirtualPad.h:289
bool debug
virtual Long64_t GetEntries() const
Definition: TTree.h:392
A TTree object has a header with a name and a title.
Definition: TTree.h:98
#define gDirectory
Definition: TDirectory.h:221
Class describing a generic file including meta information.
Definition: TFileInfo.h:50
Double_t Sqrt(Double_t x)
Definition: TMath.h:464
virtual Int_t RemoveDataSet(const char *dataset, const char *optStr="")
Remove the specified dataset from the PROOF cluster.
Definition: TProof.cxx:10963
const Bool_t kTRUE
Definition: Rtypes.h:91
Float_t GetProcTime() const
Definition: TQueryResult.h:143
Int_t Fill(Double_t)
Invalid Fill method.
Definition: TH2.cxx:292
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
Definition: TNamed.cxx:155
TMap * GetFilesPerServer(const char *exclude=0, Bool_t curronly=kFALSE)
Return a map of TFileCollections with the files on each data server, excluding servers in the comma-s...
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write all objects in this collection.
char name[80]
Definition: TGX11.cxx:109
Double_t GetMBRateAvgMax() const
TAxis * GetXaxis()
Definition: TH1.h:324
I/O-intensive PROOF benchmark test reads in event files distributed on the cluster.
PROOF worker node information.
Definition: TProofNodes.h:30
TDatime GetEndTime() const
Definition: TQueryResult.h:126
virtual void SetName(const char *name)
Change the name of this tree.
Definition: TTree.cxx:8490
This class stores the date and time with a precision of one second in an unsigned 32 bit word (950130...
Definition: TDatime.h:39
virtual ~TProofBenchRunDataRead()
Destructor.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
Definition: TObject.cxx:911