Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TPerfStats.h
Go to the documentation of this file.
1 // @(#)root/proofplayer:$Id$
2 // Author: Kristjan Gulbrandsen 11/05/04
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2004, 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 #ifndef ROOT_TPerfStats
13 #define ROOT_TPerfStats
14 
15 //////////////////////////////////////////////////////////////////////////
16 // //
17 // TPerfStats //
18 // //
19 // Provides the interface for the PROOF internal performance measurment //
20 // and event tracing. //
21 // //
22 //////////////////////////////////////////////////////////////////////////
23 
24 
25 #include "TObject.h"
26 #include "TObjArray.h"
27 #include "TTimeStamp.h"
28 #include "TString.h"
29 #include "TVirtualPerfStats.h"
30 
31 
32 class TDSet;
33 class TH1D;
34 class TH1I;
35 class TH2D;
36 class TList;
37 class TTree;
38 
39 class TPerfEvent : public TObject {
40 
41 public:
42  TString fEvtNode; // node on which the event was generated
43  TTimeStamp fTimeStamp; // time offset from start of run
44  TVirtualPerfStats::EEventType fType;
45  TString fSlaveName;
46  TString fNodeName;
47  TString fFileName;
48  TString fFileClass;
49  TString fSlave;
50  Long64_t fEventsProcessed;
51  Long64_t fBytesRead;
52  Long64_t fLen;
53  Double_t fLatency;
54  Double_t fProcTime;
55  Double_t fCpuTime;
56  Bool_t fIsStart;
57  Bool_t fIsOk;
58 
59  TPerfEvent(TTimeStamp *offset = 0);
60  virtual ~TPerfEvent() {}
61 
62  Bool_t IsSortable() const { return kTRUE; }
63  Int_t Compare(const TObject *obj) const;
64  void Print(Option_t *option="") const;
65 
66  ClassDef(TPerfEvent,3) // Class holding TProof Event Info
67 };
68 
69 
70 class TPerfStats : public TVirtualPerfStats {
71 
72 friend class TProofMonSender;
73 
74 private:
75  TTree *fTrace; //!TTree with trace events
76  TTimeStamp fTzero; //!start time of this run
77  TPerfEvent *fPerfEvent; //!TPerfEvent used to fill tree
78  TH1D *fPacketsHist; //!histogram of packets processed per slave
79  TH1I *fProcPcktHist; //!histogram of packets being processed per slave
80  TH1D *fEventsHist; //!histogram of events processed per slave
81  TH1D *fNodeHist; //!histogram of slaves per file serving node
82  TH2D *fLatencyHist; //!histogram of latency due to packet requests
83  TH2D *fProcTimeHist; //!histogram of real time spent processing packets
84  TH2D *fCpuTimeHist; //!histogram of cpu time spent processing packets
85  Long64_t fBytesRead; //!track bytes read of main file
86  Double_t fTotCpuTime; //!total cpu time of all slaves
87  Long64_t fTotBytesRead; //!total bytes read on all slaves
88  Long64_t fTotEvents; //!total number of events processed
89  Long64_t fNumEvents; //!total number of events to be processed
90  Int_t fSlaves; //!number of active slaves
91 
92  Bool_t fDoHist; //!Fill histos
93  Bool_t fDoTrace; //!Trace details in master
94  Bool_t fDoTraceRate; //!Trace processing rate in master
95  Bool_t fDoSlaveTrace; //!Full tracing in workers
96  Bool_t fDoQuota; //!Save stats on SQL server for quota management
97 
98  Bool_t fMonitorPerPacket; //!Whether to send the full entry per each packet
99 
100  TObjArray fMonSenders; //!Monitoring engines
101 
102  TString fDataSet; //!Dataset string
103  Int_t fDataSetLen; //!Maximum size of the dataset string fDataSet
104  Int_t fDataSetSize; //!# of files in the dataset
105  TDSet *fDSet; //!Saved pointer to the TDSet object
106  TList *fOutput; //!Saved pointer to the output list
107 
108  static Long_t fgVirtMemMax; //! Max virtual memory used by this process
109  static Long_t fgResMemMax; //! Max resident memory used by this process
110 
111  TPerfStats(TList *input, TList *output);
112  void WriteQueryLog();
113 
114 public:
115  virtual ~TPerfStats();
116 
117  void SimpleEvent(EEventType type);
118  void PacketEvent(const char *slave, const char *slavename, const char *filename,
119  Long64_t eventsprocessed, Double_t latency,
120  Double_t proctime, Double_t cputime, Long64_t bytesRead);
121  void FileEvent(const char *slave, const char *slavename, const char *nodename, const char *filename,
122  Bool_t isStart);
123 
124  void FileOpenEvent(TFile *file, const char *filename, Double_t start);
125  void FileReadEvent(TFile *file, Int_t len, Double_t start);
126  void UnzipEvent(TObject *tree, Long64_t pos, Double_t start, Int_t complen, Int_t objlen);
127  void RateEvent(Double_t proctime, Double_t deltatime,
128  Long64_t eventsprocessed, Long64_t bytesRead);
129  void SetBytesRead(Long64_t num);
130  Long64_t GetBytesRead() const;
131  void SetNumEvents(Long64_t num) { fNumEvents = num; }
132  Long64_t GetNumEvents() const { return fNumEvents; }
133 
134  void PrintBasketInfo(Option_t * = "") const {}
135  void SetLoaded(TBranch *, size_t) {}
136  void SetLoaded(size_t, size_t) {}
137  void SetLoadedMiss(TBranch *, size_t) {}
138  void SetLoadedMiss(size_t, size_t) {}
139  void SetMissed(TBranch *, size_t) {}
140  void SetMissed(size_t, size_t) {}
141  void SetUsed(TBranch *, size_t) {}
142  void SetUsed(size_t, size_t) {}
143  void UpdateBranchIndices(TObjArray *) {}
144 
145  static void Start(TList *input, TList *output);
146  static void Stop();
147  static void Setup(TList *input);
148  static void SetMemValues();
149  static void GetMemValues(Long_t &vmax, Long_t &rmax);
150 
151  ClassDef(TPerfStats,0) // Class for collecting PROOF statistics
152 };
153 
154 
155 #endif