Re: [ROOT] Optimizing performance in Windows

From: Rene Brun (Rene.Brun@cern.ch)
Date: Sat Feb 23 2002 - 09:48:17 MET


Hi Ed,

You do not mention the size of your file nor the time it takes
to process the file (Real and Cpu time). To help me to understand
your problem, could you run the standard ROOT test program
in $ROOTSYS/test?
cd to this directory. Build Event (make or nmake)
then run the following sequence
  Event 2000 0 0 1
  Event 2000 0 0 20
  Event 2000 0 0 20

Send me the output of the 3 steps.
The first step should produce a 113 Mbytes file
The following steps read the file.
To give you an indication, here is the output on my small laptop
(DELL P III 600 Mhz with 256 Mbytes RAM) running Linux.

==>step 1
(pcnotebrun) #[182] Event 2000 0 0 1
event:0, rtime=0.640000 s
event:100, rtime=0.720000 s
event:200, rtime=0.710000 s
event:300, rtime=0.730000 s
event:400, rtime=0.710000 s
event:500, rtime=0.720000 s
event:600, rtime=0.730000 s
event:700, rtime=0.730000 s
event:800, rtime=0.730000 s
event:900, rtime=0.740000 s
event:1000, rtime=0.720000 s
event:1100, rtime=0.740000 s
event:1200, rtime=0.740000 s
event:1300, rtime=0.740000 s
event:1400, rtime=0.740000 s
event:1500, rtime=0.750000 s
event:1600, rtime=0.740000 s
event:1700, rtime=0.740000 s
event:1800, rtime=0.720000 s
event:1900, rtime=0.740000 s
******************************************************************************
*Tree    :T         : An example of a ROOT tree
*
*Entries :     2000 : Total =       113630291 bytes  File  Size =
113630291 *
*        :          : Tree compression factor =   1.00
*
******************************************************************************
*Br    0 :event     :
*
*Entries :     2000 : Total  Size=  113594552 bytes  File Size  =
113594552 *
*Baskets :     2000 : Basket Size=      64000 bytes  Compression=   1.00
*
*............................................................................*

2000 events and 113448552 bytes processed.
RealTime=18.320000 seconds, CpuTime=14.470000 seconds
compression level=0, split=0, arg4=1
You write 6.192607 Mbytes/Realtime seconds
You write 7.840260 Mbytes/Cputime seconds

==step 2
(pcnotebrun) #[183] Event 2000 0 0 20
event:0, rtime=0.070000 s
event:100, rtime=0.250000 s
event:200, rtime=0.250000 s
event:300, rtime=0.220000 s
event:400, rtime=0.230000 s
event:500, rtime=0.230000 s
event:600, rtime=0.500000 s
event:700, rtime=1.150000 s
event:800, rtime=0.240000 s
event:900, rtime=0.250000 s
event:1000, rtime=0.440000 s
event:1100, rtime=0.460000 s
event:1200, rtime=0.310000 s
event:1300, rtime=0.260000 s
event:1400, rtime=0.450000 s
event:1500, rtime=0.440000 s
event:1600, rtime=0.240000 s
event:1700, rtime=0.520000 s
event:1800, rtime=0.460000 s
event:1900, rtime=0.510000 s

2000 events and 113448552 bytes processed.
RealTime=8.510000 seconds, CpuTime=4.390000 seconds
You read 13.331205 Mbytes/Realtime seconds
You read 25.842495 Mbytes/Cputime seconds


==>step 3
(pcnotebrun) #[185] Event 2000 0 0 20
event:0, rtime=0.070000 s
event:100, rtime=0.210000 s
event:200, rtime=0.190000 s
event:300, rtime=0.180000 s
event:400, rtime=0.190000 s
event:500, rtime=0.190000 s
event:600, rtime=0.190000 s
event:700, rtime=0.190000 s
event:800, rtime=0.180000 s
event:900, rtime=0.190000 s
event:1000, rtime=0.190000 s
event:1100, rtime=0.190000 s
event:1200, rtime=0.180000 s
event:1300, rtime=0.190000 s
event:1400, rtime=0.190000 s
event:1500, rtime=0.180000 s
event:1600, rtime=0.200000 s
event:1700, rtime=0.180000 s
event:1800, rtime=0.190000 s
event:1900, rtime=0.190000 s

2000 events and 113448552 bytes processed.
RealTime=3.850000 seconds, CpuTime=3.750000 seconds
You read 29.467157 Mbytes/Realtime seconds
You read 30.252948 Mbytes/Cputime seconds

Could you also send me the result of TTree::Print on your ntuple?

Rene Brun

On Fri, 22 Feb 2002, Ed Oltman wrote:

> Hello,
> 
>   I would like to know if anybody has any advice on performance optimizing
> on Win2K - I am using qtRoot "version 3.02/06 25 January 2002".  My
> application analyzed a root file which consists of a TNtuple.  The analysis
> requires spinning though the TNtuple multiple times.  The TNtuple has 8-10
> branches and can contain up to 10's of millions of entries.  Note: I have a
> gigabyte of physical memory.  I have 2 questions: 
> 
> 1. When I first spin through the ntuple, it takes a long time - I can see
> that my root process is doing lots of I/O - fine.  when I do a .ls I see the
> input ntuple "in memory" that is, it shows up on a line starting w/ OBJ:.
> However my process memory is about the same size as it was before I read in
> the TNtuple.  When I spin through the TNtuple subsequent times, it takes
> just as long - I my process once again logs lots of I/O.  How can I read in
> the ntuple in such a way that it lives in memory?
> 
> 2.  At some point, I generate an output TNtuple.  When I do this, my root
> process starts page faulting like crazy but eventually the process memory
> size creeps up to the required size.  [Note: when I spin through the
> TNtuple, its quite a bit faster!]  How can I configure root to use start out
> with a larger allocated memory so that I don't need to page fault.
> 
> Thanks..
> 
> Ed Oltman
> 
> 



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:42 MET