ROOT » IO » IO » TFileCacheRead

class TFileCacheRead: public TObject


TFileCacheRead : a cache when reading files over the network

A caching system to speed up network I/O, i.e. when there is
no operating system caching support (like the buffer cache for
local disk I/O). The cache makes sure that every I/O is done with
a (large) fixed length buffer thereby avoiding many small I/O's.
Currently the read cache system is used by the classes TNetFile,
TXNetFile and TWebFile (via TFile::ReadBuffers()).

When processing TTree, TChain, a specialized class TTreeCache that
derives from this class is automatically created.


Function Members (Methods)

public:
virtual~TFileCacheRead()
voidTObject::AbstractMethod(const char* method) const
virtual voidAddBranch(TBranch*, Bool_t = kFALSE)
virtual voidAddBranch(const char*, Bool_t = kFALSE)
virtual voidAddNoCacheBytesRead(Long64_t len)
virtual voidAddNoCacheReadCalls(Int_t reads)
virtual voidTObject::AppendPad(Option_t* option = "")
virtual voidTObject::Browse(TBrowser* b)
static TClass*Class()
virtual const char*TObject::ClassName() const
virtual voidTObject::Clear(Option_t* = "")
virtual TObject*TObject::Clone(const char* newname = "") const
virtual voidClose(Option_t* option = "")
virtual Int_tTObject::Compare(const TObject* obj) const
virtual voidTObject::Copy(TObject& object) const
virtual voidTObject::Delete(Option_t* option = "")MENU
virtual Int_tTObject::DistancetoPrimitive(Int_t px, Int_t py)
virtual voidTObject::Draw(Option_t* option = "")
virtual voidTObject::DrawClass() constMENU
virtual TObject*TObject::DrawClone(Option_t* option = "") constMENU
virtual voidTObject::Dump() constMENU
virtual voidTObject::Error(const char* method, const char* msgfmt) const
virtual voidTObject::Execute(const char* method, const char* params, Int_t* error = 0)
virtual voidTObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0)
virtual voidTObject::ExecuteEvent(Int_t event, Int_t px, Int_t py)
virtual voidTObject::Fatal(const char* method, const char* msgfmt) const
virtual TObject*TObject::FindObject(const char* name) const
virtual TObject*TObject::FindObject(const TObject* obj) const
virtual Int_tGetBufferSize() const
virtual Long64_tGetBytesRead() const
virtual Long64_tGetBytesReadExtra() const
virtual Option_t*TObject::GetDrawOption() const
static Long_tTObject::GetDtorOnly()
TFile*GetFile() const
virtual const char*TObject::GetIconName() const
virtual const char*TObject::GetName() const
virtual Long64_tGetNoCacheBytesRead() const
virtual Int_tGetNoCacheReadCalls() const
Int_tGetNseek() const
Int_tGetNtot() const
virtual char*TObject::GetObjectInfo(Int_t px, Int_t py) const
static Bool_tTObject::GetObjectStat()
virtual Option_t*TObject::GetOption() const
Long64_tGetPrefetchedBlocks() const
virtual TFilePrefetch*GetPrefetchObj()
virtual Int_tGetReadCalls() const
virtual const char*TObject::GetTitle() const
virtual UInt_tTObject::GetUniqueID() const
virtual Int_tGetUnzipBuffer(char**, Long64_t, Int_t, Bool_t*)
virtual Bool_tTObject::HandleTimer(TTimer* timer)
virtual ULong_tTObject::Hash() const
virtual voidTObject::Info(const char* method, const char* msgfmt) const
virtual Bool_tTObject::InheritsFrom(const char* classname) const
virtual Bool_tTObject::InheritsFrom(const TClass* cl) const
virtual voidTObject::Inspect() constMENU
voidTObject::InvertBit(UInt_t f)
virtual TClass*IsA() const
virtual Bool_tIsAsyncReading() const
virtual Bool_tIsEnablePrefetching() const
virtual Bool_tTObject::IsEqual(const TObject* obj) const
virtual Bool_tTObject::IsFolder() const
virtual Bool_tIsLearning() const
Bool_tTObject::IsOnHeap() const
virtual Bool_tTObject::IsSortable() const
Bool_tTObject::IsZombie() const
virtual voidTObject::ls(Option_t* option = "") const
voidTObject::MayNotUse(const char* method) const
virtual Bool_tTObject::Notify()
voidTObject::Obsolete(const char* method, const char* asOfVers, const char* removedFromVers) const
voidTObject::operator delete(void* ptr)
voidTObject::operator delete(void* ptr, void* vp)
voidTObject::operator delete[](void* ptr)
voidTObject::operator delete[](void* ptr, void* vp)
void*TObject::operator new(size_t sz)
void*TObject::operator new(size_t sz, void* vp)
void*TObject::operator new[](size_t sz)
void*TObject::operator new[](size_t sz, void* vp)
virtual voidTObject::Paint(Option_t* option = "")
virtual voidTObject::Pop()
virtual voidPrefetch(Long64_t pos, Int_t len)
virtual voidPrint(Option_t* option = "") const
virtual Int_tTObject::Read(const char* name)
virtual Int_tReadBuffer(char* buf, Long64_t pos, Int_t len)
virtual Int_tReadBufferExt(char* buf, Long64_t pos, Int_t len, Int_t& loc)
virtual Int_tReadBufferExtNormal(char* buf, Long64_t pos, Int_t len, Int_t& loc)
virtual Int_tReadBufferExtPrefetch(char* buf, Long64_t pos, Int_t len, Int_t& loc)
virtual voidTObject::RecursiveRemove(TObject* obj)
voidTObject::ResetBit(UInt_t f)
virtual voidTObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU
virtual voidTObject::SavePrimitive(ostream& out, Option_t* option = "")
virtual voidSecondPrefetch(Long64_t, Int_t)
virtual voidSecondSort()
voidTObject::SetBit(UInt_t f)
voidTObject::SetBit(UInt_t f, Bool_t set)
virtual voidTObject::SetDrawOption(Option_t* option = "")MENU
static voidTObject::SetDtorOnly(void* obj)
virtual voidSetEnablePrefetching(Bool_t setPrefetching = kFALSE)
virtual voidSetFile(TFile* file, TFile::ECacheAction action = TFile::kDisconnect)
static voidTObject::SetObjectStat(Bool_t stat)
virtual voidSetSkipZip(Bool_t = kTRUE)
virtual voidTObject::SetUniqueID(UInt_t uid)
virtual voidShowMembers(TMemberInspector& insp) const
virtual voidSort()
virtual voidStreamer(TBuffer&)
voidStreamerNVirtual(TBuffer& ClassDef_StreamerNVirtual_b)
virtual voidTObject::SysError(const char* method, const char* msgfmt) const
Bool_tTObject::TestBit(UInt_t f) const
Int_tTObject::TestBits(UInt_t f) const
TFileCacheRead()
TFileCacheRead(TFile* file, Int_t buffersize, TObject* tree = 0)
virtual voidTObject::UseCurrentStyle()
virtual voidWaitFinishPrefetch()
virtual voidTObject::Warning(const char* method, const char* msgfmt) const
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0)
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const
protected:
virtual voidTObject::DoError(int level, const char* location, const char* fmt, va_list va) const
voidTObject::MakeZombie()
voidSetEnablePrefetchingImpl(Bool_t setPrefetching = kFALSE)

Data Members

public:
static TObject::(anonymous)TObject::kBitMask
static TObject::EStatusBitsTObject::kCanDelete
static TObject::EStatusBitsTObject::kCannotPick
static TObject::EStatusBitsTObject::kHasUUID
static TObject::EStatusBitsTObject::kInvalidObject
static TObject::(anonymous)TObject::kIsOnHeap
static TObject::EStatusBitsTObject::kIsReferenced
static TObject::EStatusBitsTObject::kMustCleanup
static TObject::EStatusBitsTObject::kNoContextMenu
static TObject::(anonymous)TObject::kNotDeleted
static TObject::EStatusBitsTObject::kObjInCanvas
static TObject::(anonymous)TObject::kOverwrite
static TObject::(anonymous)TObject::kSingleKey
static TObject::(anonymous)TObject::kWriteDelete
static TObject::(anonymous)TObject::kZombie
protected:
Bool_tfAsyncReading
Bool_tfBIsSorted
Bool_tfBIsTransferred
Int_t*fBLen[fBNb]
Int_tfBNb
Int_tfBNseek
Int_tfBNtot
Long64_t*fBPos[fBNb]
Long64_t*fBSeek[fBNseek]
Int_t*fBSeekIndex[fBNseek]
Int_t*fBSeekLen[fBNseek]
Int_t*fBSeekPos[fBNseek]
Int_tfBSeekSize
Long64_t*fBSeekSort[fBNseek]
Int_t*fBSeekSortLen[fBNseek]
char*fBuffer[fBufferSize] buffer of contiguous prefetched blocks
Int_tfBufferLenCurrent buffer length (<= fBufferSize)
Int_tfBufferSizeAllocated size of fBuffer (at a given time)
Int_tfBufferSizeMinOriginal size of fBuffer
Long64_tfBytesReadNumber of bytes read for this cache
Long64_tfBytesReadExtraNumber of extra bytes (overhead) read by the readahead buffer
Bool_tfEnablePrefetchingreading by prefetching asynchronously
TFile*fFilePointer to file
Bool_tfIsSortedTrue if fSeek array is sorted
Bool_tfIsTransferredTrue when fBuffer contains something valid
Int_t*fLen[fNb] Length of long buffers
Int_tfNbNumber of long buffers
Long64_tfNoCacheBytesReadNumber of bytes read by basket to fill cached tree
Int_tfNoCacheReadCallsNumber of read calls by basket to fill cached tree
Int_tfNseekNumber of blocks to be prefetched
Int_tfNtotTotal size of prefetched blocks
Long64_t*fPos[fNb] start of long buffers
TFilePrefetch*fPrefetch! Object that does the asynchronous reading in another thread
Long64_tfPrefetchedBlocksNumber of blocks prefetched.
Int_tfReadCallsNumber of read calls for this cache
Long64_t*fSeek[fNseek] Position on file of buffers to be prefetched
Int_t*fSeekIndex[fNseek] sorted index table of fSeek
Int_t*fSeekLen[fNseek] Length of buffers to be prefetched
Int_t*fSeekPos[fNseek] Position of sorted blocks in fBuffer
Int_tfSeekSizeAllocated size of fSeek
Long64_t*fSeekSort[fNseek] Position on file of buffers to be prefetched (sorted)
Int_t*fSeekSortLen[fNseek] Length of buffers to be prefetched (sorted)

Class Charts

Inheritance Inherited Members Includes Libraries
Class Charts

Function documentation

TFileCacheRead()
 Default Constructor.
TFileCacheRead(TFile* file, Int_t buffersize, TObject* tree = 0)
 Creates a TFileCacheRead data structure.
~TFileCacheRead()
 Destructor.
void Close(Option_t* option = "")
 Close out any threads or asynchronous fetches used by the underlying
 implementation.
 This is called by TFile::Close to prevent usage of the file handles
 after the closing of the file.
void Prefetch(Long64_t pos, Int_t len)
 Add block of length len at position pos in the list of blocks to
 be prefetched. If pos <= 0 the current blocks (if any) are reset.
void SecondPrefetch(Long64_t , Int_t )
void Print(Option_t* option = "") const
 Print cache statistics, like
   ******TreeCache statistics for file: cms2.root ******
   Reading............................: 72761843 bytes in 7 transactions
   Readahead..........................: 256000 bytes with overhead = 0 bytes
   Average transaction................: 10394.549000 Kbytes
   Number of blocks in current cache..: 210, total size: 6280352

 if option = "a" the list of blocks in the cache is printed
 NB: this function is automatically called by TTreeCache::Print
Int_t ReadBuffer(char* buf, Long64_t pos, Int_t len)
 Read buffer at position pos.
 If pos is in the list of prefetched blocks read from fBuffer,
 otherwise need to make a normal read from file. Returns -1 in case of
 read error, 0 in case not in cache, 1 in case read from cache.
Int_t ReadBufferExt(char* buf, Long64_t pos, Int_t len, Int_t& loc)
Int_t ReadBufferExtPrefetch(char* buf, Long64_t pos, Int_t len, Int_t& loc)
prefetch the first block
Int_t ReadBufferExtNormal(char* buf, Long64_t pos, Int_t len, Int_t& loc)
 Base function for ReadBuffer. Also gives out the position
 of the block in the internal buffer. This helps TTreeCacheUnzip to avoid
 doing twice the binary search
void SetFile(TFile* file, TFile::ECacheAction action = TFile::kDisconnect)
 Set the file using this cache and reset the current blocks (if any).
void Sort()
 Sort buffers to be prefetched in increasing order of positions.
 Merge consecutive blocks if necessary.
void SecondSort()
 Sort buffers to be prefetched in increasing order of positions.
 Merge consecutive blocks if necessary.
 Sort buffers to be prefetched in increasing order of positions.
 Merge consecutive blocks if necessary.
TFilePrefetch* GetPrefetchObj()
void WaitFinishPrefetch()
void SetEnablePrefetching(Bool_t setPrefetching = kFALSE)
 Set the prefetching mode of this file.
 if 'setPrefetching', enable the asynchronous prefetching
 (using TFilePrefetch) and if the gEnv and rootrc
 variable Cache.Directory is set, also enable the local
 caching of the prefetched blocks.
 if 'setPrefetching', the old prefetcher is enabled is
 the gEnv and rootrc variable is TFile.AsyncReading
void SetEnablePrefetchingImpl(Bool_t setPrefetching = kFALSE)
 TFileCacheRead implementation of SetEnablePrefetching.

 This function is called from the constructor and should not be virtual.
TFileCacheRead(const TFileCacheRead& )
TFileCacheRead& operator=(const TFileCacheRead& )
void AddBranch(TBranch* , Bool_t = kFALSE)
{}
void AddBranch(const char* , Bool_t = kFALSE)
{}
void AddNoCacheBytesRead(Long64_t len)
{ fNoCacheBytesRead += len; }
void AddNoCacheReadCalls(Int_t reads)
{ fNoCacheReadCalls += reads; }
Int_t GetBufferSize() const
{ return fBufferSize; }
Long64_t GetBytesRead() const
{ return fBytesRead; }
Long64_t GetNoCacheBytesRead() const
{ return fNoCacheBytesRead; }
Long64_t GetBytesReadExtra() const
{ return fBytesReadExtra; }
TFile * GetFile() const
{ return fFile; }
Int_t GetNseek() const
{ return fNseek; }
Int_t GetNtot() const
{ return fNtot; }
Int_t GetReadCalls() const
{ return fReadCalls; }
Int_t GetNoCacheReadCalls() const
{ return fNoCacheReadCalls; }
Int_t GetUnzipBuffer(char** , Long64_t , Int_t , Bool_t* )
{ return -1; }
Long64_t GetPrefetchedBlocks() const
{ return fPrefetchedBlocks; }
Bool_t IsAsyncReading() const
{ return fAsyncReading; }
Bool_t IsEnablePrefetching() const
{ return fEnablePrefetching; }
Bool_t IsLearning() const
{return kFALSE;}
void SetSkipZip(Bool_t = kTRUE)
{}