class TPacketizerAdaptive: public TVirtualPacketizer


TPacketizerAdaptive

This packetizer is based on TPacketizer but uses different
load-balancing algorithms and data structures.
Two main improvements in the load-balancing strategy:
- First one was to change the order in which the files are assigned
to the computing nodes in such a way that network transfers are
evenly distributed in the query time. Transfer of the remote files
was often becoming a bottleneck at the end of a query.
- The other improvement is the use of time-based packet size. We
measure the processing rate of all the nodes and calculate the
packet size, so that it takes certain amount of time. In this way
packetizer prevents the situation where the query can't finish
because of one slow node.

The data structures: TFileStat, TFileNode and TSlaveStat are
enriched + changed and TFileNode::Compare method is changed.


Function Members (Methods)

public:
TPacketizerAdaptive(TDSet* dset, TList* slaves, Long64_t first, Long64_t num, TList* input)
virtual~TPacketizerAdaptive()
voidTObject::AbstractMethod(const char* method) const
virtual voidTObject::AppendPad(Option_t* option = "")
virtual voidTObject::Browse(TBrowser* b)
Int_tCalculatePacketSize(TObject* slstat)
static TClass*Class()
virtual const char*TObject::ClassName() const
virtual voidTObject::Clear(Option_t* = "")
virtual TObject*TObject::Clone(const char* newname = "") const
virtual Int_tTObject::Compare(const TObject* obj) const
virtual voidTObject::Copy(TObject& object) const
virtual voidTObject::Delete(Option_t* option = "")
virtual Int_tTObject::DistancetoPrimitive(Int_t px, Int_t py)
virtual voidTObject::Draw(Option_t* option = "")
virtual voidTObject::DrawClass() const
virtual TObject*TObject::DrawClone(Option_t* option = "") const
virtual voidTObject::Dump() const
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
Long64_tTVirtualPacketizer::GetBytesRead() const
virtual Option_t*TObject::GetDrawOption() const
static Long_tTObject::GetDtorOnly()
virtual Long64_tGetEntriesProcessed(TSlave* sl) const
virtual Int_tGetEstEntriesProcessed(Float_t t, Long64_t& ent, Long64_t& bytes)
virtual const char*TObject::GetIconName() const
Float_tTVirtualPacketizer::GetInitTime() const
virtual const char*TObject::GetName() const
virtual TDSetElement*GetNextPacket(TSlave* sl, TMessage* r)
virtual char*TObject::GetObjectInfo(Int_t px, Int_t py) const
static Bool_tTObject::GetObjectStat()
virtual Option_t*TObject::GetOption() const
Float_tTVirtualPacketizer::GetProcTime() const
virtual const char*TObject::GetTitle() const
Long64_tTVirtualPacketizer::GetTotalEntries() const
virtual UInt_tTObject::GetUniqueID() const
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() const
voidTObject::InvertBit(UInt_t f)
virtual TClass*IsA() const
virtual Bool_tTObject::IsEqual(const TObject* obj) const
virtual Bool_tTObject::IsFolder() const
Bool_tTObject::IsOnHeap() const
virtual Bool_tTObject::IsSortable() const
Bool_tTVirtualPacketizer::IsValid() const
Bool_tTObject::IsZombie() const
virtual voidTObject::ls(Option_t* option = "") const
voidTObject::MayNotUse(const char* method) const
virtual Bool_tTObject::Notify()
static voidTObject::operator delete(void* ptr)
static voidTObject::operator delete(void* ptr, void* vp)
static voidTObject::operator delete[](void* ptr)
static 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 voidTObject::Print(Option_t* option = "") const
virtual Int_tTObject::Read(const char* name)
virtual voidTObject::RecursiveRemove(TObject* obj)
voidTObject::ResetBit(UInt_t f)
virtual voidTObject::SaveAs(const char* filename = "", Option_t* option = "") const
virtual voidTObject::SavePrimitive(basic_ostream<char,char_traits<char> >& out, Option_t* option = "")
voidTObject::SetBit(UInt_t f)
voidTObject::SetBit(UInt_t f, Bool_t set)
virtual voidTObject::SetDrawOption(Option_t* option = "")
static voidTObject::SetDtorOnly(void* obj)
virtual voidTVirtualPacketizer::SetInitTime()
static voidTObject::SetObjectStat(Bool_t stat)
virtual voidTObject::SetUniqueID(UInt_t uid)
virtual voidShowMembers(TMemberInspector& insp, char* parent)
virtual voidTVirtualPacketizer::StopProcess(Bool_t abort)
virtual voidStreamer(TBuffer& b)
voidStreamerNVirtual(TBuffer& 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
virtual voidTObject::UseCurrentStyle()
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
Long64_tTVirtualPacketizer::GetEntries(Bool_t tree, TDSetElement* e)
voidTObject::MakeZombie()
private:
TPacketizerAdaptive()
TPacketizerAdaptive(const TPacketizerAdaptive&)
TPacketizerAdaptive::TFileStat*GetNextActive()
TPacketizerAdaptive::TFileStat*GetNextUnAlloc(TPacketizerAdaptive::TFileNode* node = 0)
TPacketizerAdaptive::TFileNode*NextActiveNode()
TPacketizerAdaptive::TFileNode*NextNode()
voidoperator=(const TPacketizerAdaptive&)
voidRemoveActive(TPacketizerAdaptive::TFileStat* file)
voidRemoveActiveNode(TPacketizerAdaptive::TFileNode*)
voidRemoveUnAllocNode(TPacketizerAdaptive::TFileNode*)
voidReset()
voidValidateFiles(TDSet* dset, TList* slaves)

Data Members

public:
enum TVirtualPacketizer::EUseEstOpt { kEstOff
kEstCurrent
kEstAverage
};
enum TVirtualPacketizer::EStatusBits { kIsInitializing
};
enum TObject::EStatusBits { kCanDelete
kMustCleanup
kObjInCanvas
kIsReferenced
kHasUUID
kCannotPick
kNoContextMenu
kInvalidObject
};
enum TObject::[unnamed] { kIsOnHeap
kNotDeleted
kZombie
kBitMask
kSingleKey
kOverwrite
kWriteDelete
};
public:
static Int_tfgMaxSlaveCntmaximum number of slaves per filenode
static Double_tfgMinPacketTimeminimum packet time
static Int_tfgNetworkFasterThanHD1 if network faster than hard disk
static Int_tfgPacketAsAFractionused to calculate the packet size
protected:
Bool_tTVirtualPacketizer::fStopTermination of Process() requested?
Bool_tTVirtualPacketizer::fValidConstructed properly?
private:
TList*fActivenodes with unfinished files
Float_tfBaseLocalPreferenceindicates how much more likely
Float_tfCumProcTimesum of proc time of all packets so far
TList*fFileNodesnodes with files
Bool_tfForceLocalif 1 - eliminate the remote processing
Float_tfFractionOfRemoteFilesfraction of TDSetElements
Int_tfMaxPerfIdxmaximum of our slaves' performance index
Long64_tfNEventsOnRemLocnumber of events in currently
TMap*fSlaveStatsslave status, keyed by correspondig TSlave
TList*fUnAllocatednodes with unallocated files

Class Charts

Inheritance Inherited Members Includes Libraries
Class Charts

Function documentation

TPacketizerAdaptive(TDSet* dset, TList* slaves, Long64_t first, Long64_t num, TList* input)
 Constructor
~TPacketizerAdaptive()
 Destructor.
void RemoveUnAllocNode(TPacketizerAdaptive::TFileNode* )
 Remove unallocated node.
void RemoveActive(TPacketizerAdaptive::TFileStat* file)
 Remove file from the list of actives.
void RemoveActiveNode(TPacketizerAdaptive::TFileNode* )
 Remove node from the list of actives.
void Reset()
 Reset the internal datastructure for packet distribution.
void ValidateFiles(TDSet* dset, TList* slaves)
 Check existence of file/dir/tree an get number of entries.
 Assumes the files have been setup.
Long64_t GetEntriesProcessed(TSlave* sl) const
 Get entries processed by the specified slave.
Int_t CalculatePacketSize(TObject* slstat)
 Calculates the packet size based on performance of this slave
 and est. time left untill the end of the query.
TDSetElement * GetNextPacket(TSlave* sl, TMessage* r)
 Get next packet;
 A meaningfull difference to TPacketizer is the fact that this
 packetizer, for each worker, tries to predict whether the worker
 will finish processing it's local files before the end of the query.
 If yes, it allocates, to those workers, files from non-slave filenodes
 or from slaves that are overloaded. The check is done every time a new
 file needs to be assigned.
Int_t GetEstEntriesProcessed(Float_t t, Long64_t& ent, Long64_t& bytes)
 Get estimation for the number of processed entries and bytes read at time t,
 based on the numbers already processed and the latests worker measured speeds.
 Only the estimation for the entries is currently implemented.
 This is needed to smooth the instantaneous rate plot.
TPacketizerAdaptive(const TPacketizerAdaptive& )
TPacketizerAdaptive(const TPacketizerAdaptive& )
void operator=(const TPacketizerAdaptive& )
TFileNode * NextNode()
TFileNode * NextActiveNode()
TFileStat * GetNextUnAlloc(TPacketizerAdaptive::TFileNode* node = 0)
TFileStat * GetNextActive()

Author: Jan Iwaszkiewicz 11/12/06
Last update: root/proofplayer:$Id: TPacketizerAdaptive.h 20882 2007-11-19 11:31:26Z rdm $
Copyright (C) 1995-2006, Rene Brun and Fons Rademakers. *

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.