43 class TProofPerfAnalysis::TWrkInfo :
public TNamed {
45 TWrkInfo(
const char *ord,
const char *
name) :
46 TNamed(ord, name),
fPackets(0), fRemotePackets(0), fEventsProcessed(0),
47 fBytesRead(0), fLatency(0), fProcTime(0), fCpuTime(0), fStart(0), fStop(-1),
48 fRateT(0), fRateRemoteT(0), fMBRateT(0), fMBRateRemoteT(0), fLatencyT(0) { }
70 Double_t AvgRate() {
if (fProcTime > 0)
return (fEventsProcessed/fProcTime);
return -1.; }
71 Double_t AvgIO() {
if (fProcTime > 0)
return (fBytesRead/fProcTime);
return -1.; }
74 Printf(
" +++ TWrkInfo ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ");
76 Printf(
" +++ Activity interval: %f -> %f", fStart, fStop);
77 Printf(
" +++ Amounts processed: %d packets (%d remote), %lld evts, %lld bytes",
78 fPackets, fRemotePackets, fEventsProcessed, fBytesRead);
80 Printf(
" +++ Processing time: %f s (CPU: %f s)", fProcTime, fCpuTime);
81 Printf(
" +++ Averages: %f evts/s, %f MB/s", (
Double_t)fEventsProcessed / fProcTime, (
Double_t)fBytesRead /1024./1024./fProcTime);
83 Printf(
" +++ Total latency: %f", fLatency);
84 Printf(
" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ");
89 if (fStop < wi->fStop) {
91 }
else if (fStop == wi->fStop) {
99 class TProofPerfAnalysis::TPackInfo :
public TNamed {
101 TPackInfo(
const char *ord,
const char *host) :
TNamed(ord, host), fStart(0), fStop(-1), fSize(0),
fMBRate(0.) { }
103 :
TNamed(ord, host), fStart(start), fStop(stop), fSize(sz),
fMBRate(mbr) { }
109 if (!strcmp(opt,
"S")) {
110 Printf(
" \t%10lld evts, \t%12.2f MB/s, \t%12.3f -> %12.3f s", fSize, fMBRate, fStart, fStop);
112 Printf(
" %s:\t%s \t%10lld evts, \t%12.2f MB/s, \t%12.3f -> %12.3f s",
GetTitle(),
GetName(), fSize, fMBRate, fStart, fStop);
117 class TProofPerfAnalysis::TWrkInfoFile :
public TNamed {
119 TWrkInfoFile(
const char *ord,
const char *
name) :
TNamed(ord, name) { }
120 ~TWrkInfoFile() {fPackets.SetOwner(
kFALSE); fPackets.
Clear(
"nodelete");}
123 if (!strcmp(opt,
"R")) {
128 TIter nxp(&fPackets);
130 while ((o = nxp())) { o->
Print(
"S"); }
134 class TProofPerfAnalysis::TWrkEntry :
public TObject {
141 void Print(
Option_t * =
"")
const {
Printf(
"%.4f \t%.3f evt/s \t%.3f MB/s \t%.3f s ", fXx, fEvtRate, fMBRate, fProcTime); }
146 class TProofPerfAnalysis::TFileInfo :
public TNamed {
149 TNamed(name, srv), fPackets(0), fRPackets(0), fStart(0), fStop(-1),
150 fSizeAvg(0), fSizeMax(-1.), fSizeMin(-1.),
152 fRateP(0), fRatePRemote(0), fMBRateP(0), fMBRatePRemote(0) { }
156 fPackList.SetOwner(
kTRUE); fPackList.Clear();
157 fWrkList.SetOwner(
kTRUE); fWrkList.Clear();
158 fRWrkList.SetOwner(
kTRUE); fRWrkList.Clear();}
185 Printf(
" +++ TFileInfo ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ");
188 Printf(
" +++ Processing interval: %f -> %f", fStart, fStop);
189 Printf(
" +++ Packets: %d (%d remote)", fPackets, fRPackets);
191 if (!strcmp(opt,
"P")) fPackList.
Print();
192 if (!strcmp(opt,
"WP")) fWrkList.
Print(
"R");
194 Printf(
" +++ MB rates: %f MB/s (avg), %f MB/s (min), %f MB/s (max)",
195 fMBRateAvg / fPackets, fMBRateMin, fMBRateMax);
196 Printf(
" +++ Sizes: %lld (avg), %lld (min), %lld (max)",
197 fSizeAvg / fPackets, fSizeMin, fSizeMax);
199 Printf(
" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ");
204 if (fStop < wi->fStop) {
206 }
else if (fStop == wi->fStop) {
218 const char *title,
const char *treename)
230 if (!title)
SetTitle(
"PROOF Performance Analysis");
236 Error(
"TProofPerfAnalysis",
"problems opening file '%s'",
237 perffile ? perffile :
"<undef>");
256 Error(
"TProofPerfAnalysis",
"directory '%s' not found or not loadable",
fDirName.
Data());
306 if (!title)
SetTitle(
"PROOF Performance Analysis");
348 if (t && strlen(t) > 0) {
375 while ((k = (
TKey *) nxk())) {
376 if (!strcmp(k->GetClassName(),
"TDirectoryFile")) {
380 }
else if (!strcmp(k->GetClassName(),
"TTree")) {
382 if (tn.Index(re) !=
kNPOS) {
383 if ((
fTree = dynamic_cast<TTree *>(dir->
Get(tn)))) {
385 if (
fgDebug)
Printf(
" +++ Found and loaded TTree '%s'", tn.Data());
403 Error(
"FileDist",
"not a valid instance - do nothing");
411 Info(
"FileDist",
"%d workers were active during this query", wrkList->
GetSize());
412 Info(
"FileDist",
"%d servers were active during this query", srvList->
GetSize());
418 while ((sn = (
TNamed *)nxs())) {
420 while ((wn = (
TNamed *) nxw())) {
431 while ((wn = (
TNamed *) nxw())) {
434 while ((nwn = (
TNamed *) nnxw())) {
440 if (!nwn) nwl->
Add(wn);
443 while ((sn = (
TNamed *)nxs())) {
444 if (!strcmp(sn->
GetTitle(), wn->GetName())) {
447 while ((nsn = (
TNamed *) nnxs())) {
453 if (!nsn) nsl->
Add(sn);
457 if (sn) srvList->
Remove(sn);
461 while ((sn = (
TNamed *)nxs())) {
479 Printf(
"\n +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ");
480 Printf(
" + Only one data server found: full analysis meaningful + ");
481 Printf(
" + only when there are more file servers + ");
482 Printf(
" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \n");
486 TH1F *hxpak =
new TH1F(
"hxpak",
"MBytes / Worker",
495 while ((wn = (
TNamed *)nxsw())) {
512 TH1F *hfdis =
new TH1F(
"hfdis",
"Packet dist",
517 TH1F *hbdis =
new TH1F(
"hbdis",
"MBytes dist",
523 TH2F *hxpak =
new TH2F(
"hxpak",
"MBytes / {Worker,Server}",
535 while ((wn = (
TNamed *)nxsw())) {
540 while ((sn = (
TNamed *)nxss())) {
551 while ((sn = (
TNamed *)nxss())) {
554 if (strcmp(sn->
GetTitle(),
"remote") && lab.Index(
".") !=
kNPOS) lab.Remove(lab.Index(
"."));
587 if (!wl || !sl)
return;
595 for (
Long64_t k=0; k<entries; k++) {
610 if (ifn !=
kNPOS) srv.Remove(ifn);
613 sn =
new TNamed(srv.Data(),
"remote");
629 Int_t o1d = 0, o2d = 0;
630 if ((o1d = o1.CountChar(
'.')) > (o2d = o2.CountChar(
'.'))) {
632 }
else if (o1d < o2d) {
635 o1.ReplaceAll(
".",
" ");
636 o2.ReplaceAll(
".",
" ");
637 Bool_t b1 = o1.Tokenize(p1, o1d,
" ");
638 Bool_t b2 = o2.Tokenize(p2, o2d,
" ");
645 b1 = o1.Tokenize(p1, o1d,
" ");
646 b2 = o2.Tokenize(p2, o2d,
" ");
651 }
else if (b2 && !b1) {
664 if (!hf || !hb || !hx)
return;
670 if (!(fout = fopen(fnout.
Data(),
"w"))) {
671 Warning(
"FillFileDist",
"asked to save details in '%s' but file could" 672 " not be open (errno: %d)", fnout.
Data(), (int)errno);
674 Info(
"FillFileDist",
"saving details to '%s'", fnout.
Data());
682 for (
Long64_t k=0; k<entries; k++) {
688 TUrl uf(pe.fFileName);
691 if (ifn !=
kNPOS) srv.Remove(ifn);
698 fprintf(fout,
"%s,%s -> %f,%f (%f)\n",
699 srv.Data(), wrk.Data(), xhx, yhx, pe.fBytesRead / 1024.);
702 hb->
Fill(xhf, pe.fBytesRead / 1024. / 1024.);
703 hx->
Fill(xhx, yhx, pe.fBytesRead / 1024. / 1024.);
705 if (fout) fclose(fout);
721 if (!(fout = fopen(fnout.
Data(),
"w"))) {
722 Warning(
"FillFileDistOneSrv",
"asked to save details in '%s' but file could" 723 " not be open (errno: %d)", fnout.
Data(), (int)errno);
725 Info(
"FillFileDistOneSrv",
"saving details to '%s'", fnout.
Data());
733 for (
Long64_t k=0; k<entries; k++) {
739 TUrl uf(pe.fFileName);
742 if (ifn !=
kNPOS) srv.Remove(ifn);
747 fprintf(fout,
"%s,%s -> %f (%f)\n",
748 srv.Data(), wrk.Data(), xhx, pe.fBytesRead / 1024.);
750 hx->
Fill(xhx, pe.fBytesRead / 1024. / 1024.);
752 if (fout) fclose(fout);
763 Error(
"WorkerActivity",
"not a valid instance - do nothing");
770 Error(
"WorkerActivity",
"workers information not available - do nothing");
776 if ((o =
gDirectory->FindObject(
"act10")))
delete o;
779 if (t1 > t0) t1 = t0;
780 TH1F *hact10 =
new TH1F(
"act10",
"Worker activity start (seconds)", 50, 0., t1);
782 if ((o =
gDirectory->FindObject(
"act11")))
delete o;
783 TH1F *hact11 =
new TH1F(
"act11",
"Worker activity stop (seconds)", 50, t0,
fMaxTime);
785 if ((o =
gDirectory->FindObject(
"act2")))
delete o;
786 TH1F *hact2 =
new TH1F(
"act2",
"End of activity (seconds)", 50, t0,
fMaxTime);
796 while ((wi = (TWrkInfo *)nxw())) {
798 for (j = 1; j < hact10->
GetNbinsX()+1 ; j++) {
802 for (j = 1; j < hact11->
GetNbinsX()+1 ; j++) {
806 hact2->
Fill(wi->fStop);
843 while ((wi = (TWrkInfo *)nxw())) {
846 if (showlast < 0 || k < showlast) wi->
Print();
857 if (!wn || (wn && strlen(wn) <= 0)) {
858 Error(
"PrintWrkInfo",
"worker name or host must be defined!");
870 while ((wi = (TWrkInfo *)nxw())) {
871 TString n(wi->GetName()), t(wi->GetTitle());
873 while (ww.Tokenize(w, from,
"[, ]")) {
875 if (
n.Index(re) !=
kNPOS || t.Index(re) !=
kNPOS) wi->Print();
894 while ((fi = (TFileInfo *)nxf())) {
897 if (showlast < 0 || k < showlast) fi->Print(opt);
910 if (!fn || (fn && strlen(fn) <= 0)) {
911 Error(
"PrintFileInfo",
"file path must be defined!");
926 while ((fi = (TFileInfo *)nxf())) {
927 TString n(fi->GetName()), s(fi->GetTitle());
929 while (fw.Tokenize(f, from,
"[, ]")) {
931 if (
n.Index(re) !=
kNPOS || s.Index(re) !=
kNPOS) fi->Print(opt);
965 Int_t nraw = entries * 2, jj = 0, kk = 0;
967 for (
Long64_t k=0; k<entries; k++) {
980 memset(jidx, 0, nbins *
sizeof(
Int_t));
984 for (kk = 0; kk <
nbins; kk++) {
986 if (jj == 0 || xtmp > xbins[jj - 1] + .5) {
996 Int_t nbin = nbins - 1;
998 if ((o =
gDirectory->FindObject(
"gEvtRate")))
delete o;
999 fEvtRate =
new TH1F(
"gEvtRate",
"Total event processing rate (evt/s)", nbin, xbins);
1004 if ((o =
gDirectory->FindObject(
"gEvtRateAvg")))
delete o;
1005 fEvtRateRun =
new TH1F(
"gEvtRateAvg",
"Event processing rate running average (evt/s)", nbin, xbins);
1010 if ((o =
gDirectory->FindObject(
"gMBRate")))
delete o;
1011 fMBRate =
new TH1F(
"gMBRate",
"Total processing rate (MB/s)", nbin, xbins);
1012 fMBRate->SetMinimum(0.);
1013 fMBRate->SetStats(
kFALSE);
1014 fMBRate->SetFillColor(
kCyan-8);
1015 fMBRate->GetXaxis()->SetTitle(
"Query Processing Time (s)");
1016 if ((o =
gDirectory->FindObject(
"gMBRateAvg")))
delete o;
1017 fMBRateRun =
new TH1F(
"gMBRateAvg",
"Processing rate running average (MB/s)", nbin, xbins);
1030 for (
Long64_t k=0; k<entries; k++) {
1038 wi->fRateT =
new TGraph(100);
1039 wi->fRateRemoteT =
new TGraph(100);
1040 wi->fMBRateT =
new TGraph(100);
1041 wi->fMBRateRemoteT =
new TGraph(100);
1042 wi->fLatencyT =
new TGraph(100);
1047 if (wi->fPackets <= 0) {
1063 wi->fRateT->SetPoint(wi->fPackets, tt, ert);
1064 if (brt > 0.) wi->fMBRateT->SetPoint(wi->fPackets, tt, brt);
1065 wi->fLatencyT->SetPoint(wi->fPackets, tt, pe.
fLatency);
1067 wi->fRateRemoteT->SetPoint(wi->fRemotePackets, tt, ert);
1068 wi->fMBRateRemoteT->SetPoint(wi->fRemotePackets, tt, brt);
1069 wi->fRemotePackets++;
1073 if (brt > fMBRateMax) fMBRateMax = brt;
1077 for (kk = 1; kk <=
nbins; kk++) {
1079 if (mi > stop)
break;
1085 if (start > mi) olap = mx - start;
1105 Printf(
" +++ %s #:%d at:%fs lat:%fs proc:%fs evts:%lld bytes:%lld (rates:%f evt/s, %f MB/s)",
1110 Printf(
" +++ %s #:%d at:%fs lat:%fs proc:%fs rate:-- evt/s (-- bytes/s)",
1130 while ((gwl = (
TList *) nxw())) {
1134 while ((we = (TWrkEntry *) nxp())) {
1135 if (we->fProcTime > 0) {
1136 er += we->fEvtRate * we->fProcTime;
1137 br += we->fMBRate * we->fProcTime;
1138 pt += we->fProcTime;
1146 if (br > 0.) fMBRate->Fill(xx, br);
1153 for (kk = 1; kk <
nbins; kk++) {
1157 Double_t wbr = fMBRate->GetBinContent(kk);
1184 while ((wi = (TWrkInfo *) nxw())) {
1188 wi->fRateT->Set(wi->fPackets);
1189 wi->fRateRemoteT->Set(wi->fRemotePackets);
1190 wi->fLatencyT->Set(wi->fPackets);
1191 wi->fMBRateT->Set(wi->fPackets);
1192 wi->fMBRateRemoteT->Set(wi->fRemotePackets);
1201 while ((wi = (TWrkInfo *) nxsw())) {
1202 if (wi->fStop > 0.) ksw++;
1203 if (ksw == rsw)
break;
1213 fPackets->SetDirectory(0);
1216 while ((wi = (TWrkInfo *)nxwi())) {
1219 fPackets->GetXaxis()->SetBinLabel(j+1, wi->GetName());
1220 fPackets->Fill(j++, wi->fPackets);
1223 fPackets->SetMinimum(0.);
1225 fPackets->SetFillColor(38);
1228 fPackets->GetYaxis()->SetTitle(
"Packets");
1229 fPackets->GetXaxis()->SetTitle(
"Worker");
1250 if (!strcmp(opt,
"S")) {
1252 Printf(
"%d %f %f %f %f %f %f %f",
1258 Printf(
" +++ Total query time: %f secs (init: %f secs, merge: %f secs)",
1260 Printf(
" +++ Avg processing rates: %.4f evts/s, %.4f MB/s",
fEvtRateAvg, fMBRateAvg);
1286 for (
Long64_t k=0; k<entries; k++) {
1293 if (ifn !=
kNPOS) srv.Remove(ifn);
1297 fi =
new TFileInfo(uf.
GetFile(), srv.Data());
1299 fi->fSizeP =
new TGraph(10);
1300 fi->fRateP =
new TGraph(10);
1301 fi->fRatePRemote =
new TGraph(10);
1302 fi->fMBRateP =
new TGraph(10);
1303 fi->fMBRatePRemote =
new TGraph(10);
1308 if (fi->fPackets <= 0) {
1325 fi->fRateP->SetPoint(fi->fPackets, tt, ert);
1326 if (brt > 0.) fi->fMBRateP->SetPoint(fi->fPackets, tt, brt);
1329 fi->fRatePRemote->SetPoint(fi->fRPackets, tt, ert);
1330 fi->fMBRatePRemote->SetPoint(fi->fRPackets, tt, brt);
1335 fi->fMBRateAvg += brt;
1336 if (brt > fi->fMBRateMax || fi->fMBRateMax < 0.) fi->fMBRateMax = brt;
1337 if (brt < fi->fMBRateMin || fi->fMBRateMin < 0.) fi->fMBRateMin = brt;
1342 fi->fPackList.Add(pi);
1343 TWrkInfoFile *wif = 0;
1344 if (!(wif = (TWrkInfoFile *) fi->fWrkList.FindObject(pe.
fSlave))) {
1346 fi->fWrkList.Add(wif);
1348 wif->fPackets.Add(pi);
1353 Printf(
" +++ %s #:%d at:%fs lat:%fs proc:%fs evts:%lld bytes:%lld (rates:%f evt/s, %f MB/s)",
1358 Printf(
" +++ %s #:%d at:%fs lat:%fs proc:%fs rate:-- evt/s (-- bytes/s)",
1374 while ((fi = (TFileInfo *) nxf())) {
1377 fi->fRateP->Set(fi->fPackets);
1378 fi->fRatePRemote->Set(fi->fRPackets);
1379 fi->fMBRateP->Set(fi->fPackets);
1380 fi->fMBRatePRemote->Set(fi->fRPackets);
1413 const char *
n = (name && strlen(name) > 0) ? name : 0;
1435 Printf(
"Drawn objects saving disabled");
1453 Error(
"SetSaveResult",
"could not open file '%s' in mode '%s'",
1454 file ? file :
"(undefined)", mode);
1465 Printf(
"Drawn objects will be saved in file '%s'", file);
1482 Error(
"EventDist",
"distributions not initialized - do nothing");
1494 fPackets->SetStats(
kFALSE);
1508 TH1F *hrt1 = 0, *hrt2 = 0;
1515 if ((o =
gDirectory->FindObject(
"rt1")))
delete o;
1516 hrt1 =
new TH1F(
"rt1",
"Evt processing rate (evt/s)", 100, 0.,
fMaxTime);
1521 if ((o =
gDirectory->FindObject(
"rt2")))
delete o;
1522 hrt2 =
new TH1F(
"rt2",
"MB processing rate (MB/s)", 100, 0.,
fMaxTime);
1523 hrt2->SetMinimum(0.);
1524 hrt2->SetMaximum(1.05*fMBRateMax);
1526 hrt2->GetXaxis()->SetTitle(
"Query Processing Time (s)");
1549 if (!ww.
IsNull() && ww !=
"*" && ww !=
"all") {
1552 while ((ww.
Tokenize(w, from,
","))) {
1559 Int_t ci = 40, cir = 30, ic = 0;
1562 while ((wi = (TWrkInfo *) nxw())) {
1563 if (wl && !wl->
FindObject(wi->GetName()))
continue;
1564 if (wi->fRateT && wi->fRateT->GetN() > 0) {
1565 wi->fRateT->
SetNameTitle(wi->GetName(), wi->GetTitle());
1570 if (wi->fRateRemoteT && wi->fRateRemoteT->GetN() > 0) {
1571 wi->fRateRemoteT->SetNameTitle(wi->GetName(), wi->GetTitle());
1576 if (wi->fMBRateT && wi->fMBRateT->GetN() > 0) {
1577 wi->fMBRateT->SetNameTitle(wi->GetName(), wi->GetTitle());
1582 if (wi->fMBRateRemoteT && wi->fMBRateRemoteT->GetN() > 0) {
1583 wi->fMBRateRemoteT->SetNameTitle(wi->GetName(), wi->GetTitle());
1586 DoDraw(wi->fMBRateRemoteT,
"L",
TString::Format(
"MBRateRemoteT-%s", wi->fMBRateRemoteT->GetName()));
1609 if ((o =
gDirectory->FindObject(
"lt1")))
delete o;
1610 TH1F *hlt1 =
new TH1F(
"lt1",
"Packet retrieval latency", 100, 0.,
fMaxTime);
1626 if (!ww.
IsNull() && ww !=
"*" && ww !=
"all") {
1629 while ((ww.
Tokenize(w, from,
","))) {
1636 Int_t ci = 40, ic = 0;
1639 while ((wi = (TWrkInfo *) nxw())) {
1640 if (wl && !wl->
FindObject(wi->GetName()))
continue;
1641 if (wi->fLatencyT) {
1642 wi->fLatencyT->
SetNameTitle(wi->GetName(), wi->GetTitle());
1643 wi->fLatencyT->SetLineColor(ci);
1664 if (!fn || strlen(fn) <= 0) {
1665 Error(
"FileRatePlot",
"file name is mandatory!");
1671 Error(
"FileRatePlot",
"TFileInfo object for '%s' not found!", fn);
1677 if (out && strlen(out) > 0) {
1678 if (!(fo = fopen(out,
"w"))) {
1679 Warning(
"FileRatePlot",
"problems creating '%s': logging to stdout", out);
1682 Printf(
" Details logged to %s", out);
1691 TIter nxp(&(fi->fPackList));
1692 while ((pi = (TPackInfo *) nxp())) {
1694 xraw[jj++] = pi->fStart;
1695 xraw[jj++] = pi->fStop;
1698 memset(jidx, 0, nbins *
sizeof(
Int_t));
1702 for (kk = 0; kk <
nbins; kk++) {
1703 xbins[kk] = xraw[jidx[kk]];
1709 Int_t nbin = nbins - 1;
1711 if ((o =
gDirectory->FindObject(
"rt1")))
delete o;
1712 TH1F *hrt1 =
new TH1F(
"rt1",
"Total processing rate (MB/s)", nbins - 1, xbins);
1716 if ((o =
gDirectory->FindObject(
"rt2")))
delete o;
1717 TH1F *hrt2 =
new TH1F(
"rt2",
"Number of processing workers", nbins - 1, xbins);
1722 if ((o =
gDirectory->FindObject(
"rt3")))
delete o;
1723 TH1F *hrt3 =
new TH1F(
"rt3",
"Total processing events", nbins - 1, xbins);
1727 if ((o =
gDirectory->FindObject(
"rt4")))
delete o;
1728 TH1F *hrt4 =
new TH1F(
"rt4",
"Weighted processing rate (MB/s)", nbins - 1, xbins);
1737 for (ii = 1; ii <= nbin; ii++) {
1742 fprintf(fo,
" Bin: %d/%d [%f, %f]\n", ii, nbin, mi, mx);
1746 while ((pi = (TPackInfo *) nxp())) {
1749 if (pi->fStart > mi) olap = mx - pi->fStart;
1751 hrt1->
Fill(xx, pi->fMBRate);
1753 hrt3->
Fill(xx, pi->fSize);
1754 hrt4->
Fill(xx, pi->fMBRate * pi->fSize);
1755 fprintf(fo,
" %d: %s \t%lld \tevts \t%f \tMB/s\n", kk++, pi->GetName(), pi->fSize, pi->fMBRate);
1759 if (fo != stdout) fclose(fo);
1785 if ((o =
gDirectory->FindObject(
"rt1")))
delete o;
1786 TH1F *hrt1 =
new TH1F(
"rt1",
"Event processing rate per packet (evt/s)", 100, 0.,
fMaxTime);
1791 if ((o =
gDirectory->FindObject(
"rt2")))
delete o;
1792 TH1F *hrt2 =
new TH1F(
"rt2",
"I/O processing rate per packet (MB/s)", 100, 0.,
fMaxTime);
1813 if (!fw.
IsNull() && fw !=
"*" && fw !=
"all") {
1816 while ((fw.
Tokenize(w, from,
","))) {
1823 Int_t ci = 40, cir = 30, ic = 0;
1826 while ((fi = (TFileInfo *) nxf())) {
1827 if (fl && !fl->
FindObject(fi->GetName()))
continue;
1828 if (fi->fRateP && fi->fRateP->GetN() > 0) {
1829 fi->fRateP->SetNameTitle(fi->GetName(), fi->GetTitle());
1834 if (fi->fRatePRemote && fi->fRatePRemote->GetN() > 0) {
1835 fi->fRatePRemote->SetNameTitle(fi->GetName(), fi->GetTitle());
1840 if (fi->fMBRateP && fi->fMBRateP->GetN() > 0) {
1841 fi->fMBRateP->SetNameTitle(fi->GetName(), fi->GetTitle());
1846 if (fi->fMBRatePRemote && fi->fMBRatePRemote->GetN() > 0) {
1847 fi->fMBRatePRemote->SetNameTitle(fi->GetName(), fi->GetTitle());
void SetDebug(Int_t d=0)
Static setter for the verbosity level.
virtual void SetTitleOffset(Float_t offset=1)
Set distance between the axis and the axis title Offset is a correction factor with respect to the "s...
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root.
virtual const char * GetName() const
Returns name of object.
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
virtual Int_t Fill(Double_t x)
Increment bin with abscissa X by 1.
TVirtualPerfStats::EEventType fType
virtual TList * GetListOfKeys() const
virtual Double_t GetBinCenter(Int_t bin) const
Return bin center for 1D histogram.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
virtual ~TProofPerfAnalysis()
Destructor: detach the tree and close the file.
virtual void SetMaximum(Double_t maximum=-1111)
virtual TVirtualPad * GetPad(Int_t subpadnumber) const
Get a pointer to subpadnumber of this pad.
virtual TObject * Get(const char *namecycle)
Return pointer to object identified by namecycle.
virtual void Draw(Option_t *option="")=0
Default Draw method for all objects.
Collectable string class.
virtual Int_t Compare(const TObject *obj) const
Compare two TNamed objects.
virtual void SetDirectory(TDirectory *dir)
By default when an histogram is created, it is added to the list of histogram objects in the current ...
TString GetCanvasTitle(const char *t)
If defined, add '- <this title>="">' to the canvas title 't'.
void PrintFileInfo(Int_t showlast=10, const char *opt="", const char *out=0)
Print information for all or the slowest showlast workers.
void Print(Option_t *options="") const
Print information about this object.
This class represents a WWW compatible URL.
R__EXTERN TStyle * gStyle
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
THist< 1, float, THistStatContent, THistStatUncertainty > TH1F
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format...
TVirtualPad * cd(Int_t subpadnumber=0)
Set current canvas & pad.
Regular expression class.
virtual TObject * Get(const char *namecycle)
Return pointer to object identified by namecycle.
virtual void SetMinimum(Double_t minimum=-1111)
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all branches of entry and return total number of bytes read.
tomato 1-D histogram with a float per channel (see TH1 documentation)}
struct staticInitHelper gbl
virtual const char * DirName(const char *pathname)
Return the directory name in pathname.
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
virtual void Print(Option_t *option="") const
This method must be overridden when a class wants to print itself.
virtual Double_t GetBinLowEdge(Int_t bin) const
Return bin lower edge for 1D histogram.
TObject * FindObject(const char *name) const
Find object using its name.
void LoadTree(TDirectory *dir)
Load tree fTreeName from directory 'dir'.
virtual void SetNameTitle(const char *name, const char *title)
Set all the TNamed parameters (name and title).
const char * GetHostFQDN() const
Return fully qualified domain name of url host.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
const char * GetUrl(Bool_t withDeflt=kFALSE) const
Return full URL.
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
TString & Replace(Ssiz_t pos, Ssiz_t n, const char *s)
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=1, Int_t netopt=0)
Create / open a file.
void FileDist(Bool_t writedet=kFALSE)
Analyse the file distribution.
const char * GetFile() const
void FileProcPlot(const char *fn, const char *out=0)
Show event processing or MB processing rate plot vs time.
virtual void Clear(Option_t *option="")
Set name and title to empty strings ("").
Int_t CompareOrd(const char *ord1, const char *ord2)
Return -1 if ord1 comes before ord2, 0 i they are equal, 1 if ord1 comes after ord2.
TVirtualPad * cd(Int_t subpadnumber=0)
Set Current pad.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
THashList implements a hybrid collection class consisting of a hash table and a list to store TObject...
virtual Int_t SetBranchAddress(const char *bname, void *add, TBranch **ptr=0)
Change branch address, dealing with clone trees properly.
The TNamed class is the base class for all named ROOT classes.
void EventDist()
Display event and packet distribution.
static double p2(double t, double a, double b, double c)
virtual Double_t GetBinCenter(Int_t bin) const
Return center of bin.
void FileRatePlot(const char *fns=0)
Show MB processing rate plot per file vs time.
void Sort(Index n, const Element *a, Index *index, Bool_t down=kTRUE)
void RatePlot(const char *wrks=0)
Show event processing or MB processing rate plot vs time.
Book space in a file, create I/O buffers, to fill them, (un)compress them.
virtual void Print(Option_t *option="") const
Print TNamed name and title.
TProofPerfAnalysis(const char *perffile, const char *title="", const char *treename="PROOF_PerfStats")
Constructor: open the file and attach to the tree.
virtual Bool_t Divide(TF1 *f1, Double_t c1=1)
Performs the operation: this = this/(c1*f1) if errors are defined (see TH1::Sumw2), errors are also recalculated.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
Int_t SetSaveResult(const char *file="results.root", Option_t *mode="RECREATE")
Set save result mode and validate 'file' according to 'mode'.
R__EXTERN TSystem * gSystem
virtual void Draw(Option_t *option="")
Draw this histogram with options.
if object ctor succeeded but object should not be used
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
Long64_t fEventsProcessed
tomato 2-D histogram with a float per channel (see TH1 documentation)}
virtual TObject * Remove(TObject *obj)
Remove object from the list.
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
The most important graphics class in the ROOT system.
static void SetgDebug(Bool_t on=kTRUE)
Static setter for the verbosity level.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
static double p1(double t, double a, double b)
void SetName(const char *name)
void WorkerActivity()
Measure the worker activity.
virtual void AddBefore(const TObject *before, TObject *obj)
Insert object before object before in the list.
virtual Int_t FindBin(Double_t x)
Find bin number corresponding to abscissa x.
virtual Int_t RedirectOutput(const char *name, const char *mode="a", RedirectHandle_t *h=0)
Redirect standard output (stdout, stderr) to the specified file.
TString & Remove(Ssiz_t pos)
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
virtual Double_t GetBinWidth(Int_t bin) const
Return bin width for 1D histogram.
void GetWrkFileList(TList *wl, TList *sl)
Fill file info.
virtual void ls(Option_t *option="") const
List (ls) all objects in this collection.
Describe directory structure in memory.
void DoDraw(TObject *o, Option_t *opt="", const char *name=0)
Draw object 'o' with options 'opt' Save it with 'name' if in saving mode (see SetSaveResult) ...
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
you should not use this method at all Int_t Int_t Double_t Double_t Double_t e
virtual void SetBinLabel(Int_t bin, const char *label)
Set label for bin.
virtual void Clear(Option_t *option="")
Remove all objects from the list.
void FillFileDistOneSrv(TH1F *hx, Bool_t wdet=kFALSE)
Fill file info when there is only one file server.
virtual Long64_t GetEntries() const
Mother of all ROOT objects.
void FillFileDist(TH1F *hf, TH1F *hb, TH2F *hx, Bool_t wdet=kFALSE)
Fill file info.
virtual const char * GetTitle() const
Returns title of object.
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.
virtual void Add(TObject *obj)
A Graph is a graphics object made of two arrays X and Y with npoints each.
void SetOptStat(Int_t stat=1)
The type of information printed in the histogram statistics box can be selected via the parameter mod...
Int_t Atoi() const
Return integer value of string.
A TTree object has a header with a name and a title.
Class describing a generic file including meta information.
void Add(TObject *obj)
Add object in sorted list.
virtual Int_t GetNbinsX() const
void LatencyPlot(const char *wrks=0)
Show event processing or MB processing rate plot vs time Create the histograms.
virtual void Update()
Update canvas pad buffers.
virtual void Print(Option_t *option="") const
Default print for collections, calls Print(option, 1).
void FillFileInfo(Bool_t force=kFALSE)
Fill basic worker info; if 'force' rescan the TTree even already done.
virtual Int_t GetSize() const
Int_t Fill(Double_t)
Invalid Fill method.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
THist< 2, float, THistStatContent, THistStatUncertainty > TH2F
void FillWrkInfo(Bool_t force=kFALSE)
Fill basic worker info; if 'force' rescan the TTree even already done.
virtual void SetStats(Bool_t stats=kTRUE)
Set statistics option on/off.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
void Summary(Option_t *opt="", const char *out="")
Print summary of query.
virtual const char * GetTitle() const
Returns title of object.
virtual void Close(Option_t *option="")
Close a file.
const char * Data() const
void PrintWrkInfo(Int_t showlast=10)
Print information for all or the slowest showlast workers.