[ROOT] Writing large TTree causes lots of page faults...

From: Ed Oltman (eoltman@imago.com)
Date: Mon Jun 30 2003 - 16:44:59 MEST


Hello,

 I have a program that writes a "large" TTree - 7 branches: 6 hold a float,
the 7th a short,  with about 20E6 entries.  This TTree holds data that I
spin through multiple time to obtain calibration factors.  The current
directory is NOT writable - e.g. gFile->IsWritable() returns 0.  This forces
the TTree to remain memory resident saving me the I/O overhead on subsequent
spins through the data.  I have 1 GB of ram - more than enough to hold the
entire TTree.

My question is: Is it possible to pre-allocate the memory required for this
TTree?  What happens is that my program page faults about 800 times/second,
each time increasing the memory used by my program by about 3 MB -
eventually gets about 540 MB - its very slow!  subsequent spins through the
tree, however are much quicker then what it would take if TTree is on disk.

I am using the Win32 version of root version 3.05/3 on Win2K.  I compiled my
program using VC++ 6.0

One other thing: TTree::Print() causes:

Fatal in <TStorage::ReAllocChar>: storage exhausted
aborting
Warning in <TWinNTSystem::StackTrace>: this method must be overridden!

abnormal program termination


I can see that my program tries to allocate too much memory - the peak is
about 850MB - why should TTree::Print() allocate memory?


Thanks,
 Ed Oltman 





This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:12 MET