Logo ROOT   6.18/05
Reference Guide
TFileCacheRead.h
Go to the documentation of this file.
1// @(#)root/io:$Id$
2// Author: Rene Brun 19/05/2006
3
4/*************************************************************************
5 * Copyright (C) 1995-2000, 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_TFileCacheRead
13#define ROOT_TFileCacheRead
14
15#include "TObject.h"
16
17#include "TFile.h"
18
19class TBranch;
20class TFilePrefetch;
21
22class TFileCacheRead : public TObject {
23
24protected:
25 TFilePrefetch *fPrefetch; ///<! Object that does the asynchronous reading in another thread
26 Int_t fBufferSizeMin; ///< Original size of fBuffer
27 Int_t fBufferSize; ///< Allocated size of fBuffer (at a given time)
28 Int_t fBufferLen; ///< Current buffer length (<= fBufferSize)
29
30 Long64_t fBytesRead; ///< Number of bytes read for this cache
31 Long64_t fBytesReadExtra; ///< Number of extra bytes (overhead) read by the readahead buffer
32 Int_t fReadCalls; ///< Number of read calls for this cache
33 Long64_t fNoCacheBytesRead; ///< Number of bytes read by basket to fill cached tree
34 Int_t fNoCacheReadCalls; ///< Number of read calls by basket to fill cached tree
35
37 Bool_t fEnablePrefetching;///< reading by prefetching asynchronously
38
39 Int_t fNseek; ///< Number of blocks to be prefetched
40 Int_t fNtot; ///< Total size of prefetched blocks
41 Int_t fNb; ///< Number of long buffers
42 Int_t fSeekSize; ///< Allocated size of fSeek
43 Long64_t *fSeek; ///<[fNseek] Position on file of buffers to be prefetched
44 Long64_t *fSeekSort; ///<[fNseek] Position on file of buffers to be prefetched (sorted)
45 Int_t *fSeekIndex; ///<[fNseek] sorted index table of fSeek
46 Long64_t *fPos; ///<[fNb] start of long buffers
47 Int_t *fSeekLen; ///<[fNseek] Length of buffers to be prefetched
48 Int_t *fSeekSortLen; ///<[fNseek] Length of buffers to be prefetched (sorted)
49 Int_t *fSeekPos; ///<[fNseek] Position of sorted blocks in fBuffer
50 Int_t *fLen; ///<[fNb] Length of long buffers
51 TFile *fFile; ///< Pointer to file
52 char *fBuffer; ///<[fBufferSize] buffer of contiguous prefetched blocks
53 Bool_t fIsSorted; ///< True if fSeek array is sorted
54 Bool_t fIsTransferred; ///< True when fBuffer contains something valid
55 Long64_t fPrefetchedBlocks; ///< Number of blocks prefetched.
56
57 //variables for the second block prefetched with the same semantics as for the first one
62 Long64_t *fBSeek; ///<[fBNseek]
63 Long64_t *fBSeekSort; ///<[fBNseek]
64 Int_t *fBSeekIndex; ///<[fBNseek]
65 Long64_t *fBPos; ///<[fBNb]
66 Int_t *fBSeekLen; ///<[fBNseek]
67 Int_t *fBSeekSortLen; ///<[fBNseek]
68 Int_t *fBSeekPos; ///<[fBNseek]
69 Int_t *fBLen; ///<[fBNb]
72
73 void SetEnablePrefetchingImpl(Bool_t setPrefetching = kFALSE); // Can not be virtual as it is called from the constructor.
74
75private:
76 TFileCacheRead(const TFileCacheRead &); //cannot be copied
78
79public:
81 TFileCacheRead(TFile *file, Int_t buffersize, TObject *tree = 0);
82 virtual ~TFileCacheRead();
83 virtual Int_t AddBranch(TBranch * /*b*/, Bool_t /*subbranches*/ = kFALSE) { return 0; }
84 virtual Int_t AddBranch(const char * /*branch*/, Bool_t /*subbranches*/ = kFALSE) { return 0; }
85 virtual void AddNoCacheBytesRead(Long64_t len) { fNoCacheBytesRead += len; }
86 virtual void AddNoCacheReadCalls(Int_t reads) { fNoCacheReadCalls += reads; }
87 virtual void Close(Option_t *option="");
88 virtual Int_t GetBufferSize() const { return fBufferSize; };
89 virtual Long64_t GetBytesRead() const { return fBytesRead; }
91 virtual Long64_t GetBytesReadExtra() const { return fBytesReadExtra; }
92 TFile *GetFile() const { return fFile; } // Return the TFile being cached.
93 Int_t GetNseek() const { return fNseek; } // Return the number of blocks in the current cache.
94 Int_t GetNtot() const { return fNtot; } // Return the total size of the prefetched blocks.
95 virtual Int_t GetReadCalls() const { return fReadCalls; }
96 virtual Int_t GetNoCacheReadCalls() const { return fNoCacheReadCalls; }
97 virtual Int_t GetUnzipBuffer(char ** /*buf*/, Long64_t /*pos*/, Int_t /*len*/, Bool_t * /*free*/) { return -1; }
99 virtual Bool_t IsAsyncReading() const { return fAsyncReading; };
100 virtual void SetEnablePrefetching(Bool_t setPrefetching = kFALSE);
101 virtual Bool_t IsEnablePrefetching() const { return fEnablePrefetching; };
102 virtual Bool_t IsLearning() const {return kFALSE;}
103 virtual Int_t LearnBranch(TBranch * /*b*/, Bool_t /*subbranches*/ = kFALSE) { return 0; }
104 virtual void Prefetch(Long64_t pos, Int_t len);
105 virtual void Print(Option_t *option="") const;
106 virtual Int_t ReadBufferExt(char *buf, Long64_t pos, Int_t len, Int_t &loc);
107 virtual Int_t ReadBufferExtNormal(char *buf, Long64_t pos, Int_t len, Int_t &loc);
108 virtual Int_t ReadBufferExtPrefetch(char *buf, Long64_t pos, Int_t len, Int_t &loc);
109 virtual Int_t ReadBuffer(char *buf, Long64_t pos, Int_t len);
110 virtual Int_t SetBufferSize(Int_t buffersize);
112 virtual void SetSkipZip(Bool_t /*skip*/ = kTRUE) {} // This function is only used by TTreeCacheUnzip (ignore it)
113 virtual void Sort();
114 virtual void SecondSort(); //Method used to sort and merge the chunks in the second block
115 virtual void SecondPrefetch(Long64_t, Int_t); //Used to add chunks to the second block
116 virtual TFilePrefetch* GetPrefetchObj();
117 virtual void WaitFinishPrefetch(); //Gracefully join the prefetching thread
118
119 ClassDef(TFileCacheRead,2) //TFile cache when reading
120};
121
122#endif
int Int_t
Definition: RtypesCore.h:41
const Bool_t kFALSE
Definition: RtypesCore.h:88
bool Bool_t
Definition: RtypesCore.h:59
long long Long64_t
Definition: RtypesCore.h:69
const Bool_t kTRUE
Definition: RtypesCore.h:87
const char Option_t
Definition: RtypesCore.h:62
#define ClassDef(name, id)
Definition: Rtypes.h:326
A TTree is a list of TBranches.
Definition: TBranch.h:65
A cache when reading files over the network.
virtual Long64_t GetBytesRead() const
virtual Int_t AddBranch(const char *, Bool_t=kFALSE)
Long64_t fBytesReadExtra
Number of extra bytes (overhead) read by the readahead buffer.
virtual Bool_t IsEnablePrefetching() const
virtual Long64_t GetBytesReadExtra() const
virtual Long64_t GetNoCacheBytesRead() const
Int_t fBufferSize
Allocated size of fBuffer (at a given time)
char * fBuffer
[fBufferSize] buffer of contiguous prefetched blocks
Long64_t * fBSeekSort
[fBNseek]
Long64_t * fPos
[fNb] start of long buffers
virtual Int_t SetBufferSize(Int_t buffersize)
Sets the buffer size.
virtual Int_t GetUnzipBuffer(char **, Long64_t, Int_t, Bool_t *)
Bool_t fIsSorted
True if fSeek array is sorted.
virtual Int_t GetReadCalls() const
TFileCacheRead(const TFileCacheRead &)
Int_t * fSeekIndex
[fNseek] sorted index table of fSeek
virtual Int_t ReadBufferExt(char *buf, Long64_t pos, Int_t len, Int_t &loc)
Long64_t * fSeekSort
[fNseek] Position on file of buffers to be prefetched (sorted)
virtual Int_t ReadBuffer(char *buf, Long64_t pos, Int_t len)
Read buffer at position pos.
TFilePrefetch * fPrefetch
! Object that does the asynchronous reading in another thread
Int_t * fBSeekPos
[fBNseek]
virtual void SecondPrefetch(Long64_t, Int_t)
virtual void Print(Option_t *option="") const
Print cache statistics.
virtual Bool_t IsAsyncReading() const
Bool_t fBIsTransferred
Long64_t fBytesRead
Number of bytes read for this cache.
virtual void SecondSort()
Sort buffers to be prefetched in increasing order of positions.
virtual TFilePrefetch * GetPrefetchObj()
virtual Int_t ReadBufferExtPrefetch(char *buf, Long64_t pos, Int_t len, Int_t &loc)
prefetch the first block
virtual void Sort()
Sort buffers to be prefetched in increasing order of positions.
virtual void AddNoCacheReadCalls(Int_t reads)
virtual Int_t ReadBufferExtNormal(char *buf, Long64_t pos, Int_t len, Int_t &loc)
Base function for ReadBuffer.
virtual void SetSkipZip(Bool_t=kTRUE)
TFileCacheRead()
Default Constructor.
Long64_t GetPrefetchedBlocks() const
virtual ~TFileCacheRead()
Destructor.
void SetEnablePrefetchingImpl(Bool_t setPrefetching=kFALSE)
TFileCacheRead implementation of SetEnablePrefetching.
virtual void AddNoCacheBytesRead(Long64_t len)
Bool_t fEnablePrefetching
reading by prefetching asynchronously
Int_t GetNseek() const
Int_t * fSeekLen
[fNseek] Length of buffers to be prefetched
Int_t fNtot
Total size of prefetched blocks.
virtual void Prefetch(Long64_t pos, Int_t len)
Add block of length len at position pos in the list of blocks to be prefetched.
Int_t * fSeekSortLen
[fNseek] Length of buffers to be prefetched (sorted)
virtual void SetEnablePrefetching(Bool_t setPrefetching=kFALSE)
Set the prefetching mode of this file.
Int_t fBufferSizeMin
Original size of fBuffer.
virtual Bool_t IsLearning() const
Int_t * fBSeekIndex
[fBNseek]
virtual void Close(Option_t *option="")
Close out any threads or asynchronous fetches used by the underlying implementation.
Int_t fNb
Number of long buffers.
Int_t fReadCalls
Number of read calls for this cache.
Int_t fBufferLen
Current buffer length (<= fBufferSize)
virtual Int_t AddBranch(TBranch *, Bool_t=kFALSE)
Long64_t fPrefetchedBlocks
Number of blocks prefetched.
Long64_t fNoCacheBytesRead
Number of bytes read by basket to fill cached tree.
Long64_t * fSeek
[fNseek] Position on file of buffers to be prefetched
Int_t GetNtot() const
virtual Int_t GetNoCacheReadCalls() const
Bool_t fIsTransferred
True when fBuffer contains something valid.
TFile * fFile
Pointer to file.
virtual void WaitFinishPrefetch()
Int_t * fBLen
[fBNb]
Int_t * fBSeekLen
[fBNseek]
Int_t fNseek
Number of blocks to be prefetched.
Bool_t fAsyncReading
Int_t * fLen
[fNb] Length of long buffers
Int_t * fBSeekSortLen
[fBNseek]
Int_t fNoCacheReadCalls
Number of read calls by basket to fill cached tree.
Int_t * fSeekPos
[fNseek] Position of sorted blocks in fBuffer
virtual Int_t LearnBranch(TBranch *, Bool_t=kFALSE)
virtual Int_t GetBufferSize() const
Long64_t * fBPos
[fBNb]
Int_t fSeekSize
Allocated size of fSeek.
Long64_t * fBSeek
[fBNseek]
TFile * GetFile() const
virtual void SetFile(TFile *file, TFile::ECacheAction action=TFile::kDisconnect)
Set the file using this cache and reset the current blocks (if any).
TFileCacheRead & operator=(const TFileCacheRead &)
The prefetching mechanism uses two classes (TFilePrefetch and TFPBlock) to prefetch in advance a bloc...
Definition: TFilePrefetch.h:31
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
Definition: TFile.h:48
ECacheAction
TTreeCache flushing semantics.
Definition: TFile.h:65
@ kDisconnect
Definition: TFile.h:65
Mother of all ROOT objects.
Definition: TObject.h:37
Definition: file.py:1
Definition: tree.py:1