The table below (also available in Postscript format) shows the result of a ROOT benchmark run on a Pentium Pro 200 Mhz (HP Vectra XU) running RedHat Linux v4.0 (kernel 2.0.27). The machine has 256 Mbytes of RAM and I/O is on the local disk (Seagate Barracuda 9GB Ultra SCSI).
The standard test program Event has been used to generate the ROOT data file. Results of running this program in many different configurations are presented in ROOT I/O benchmarks. This program generates 10,000 events. Each event has an average of 600 tracks. Eack track has 17 data members. In addition each event includes an event-header object and an histogram object. The program Event was run with the option no compression and no split in order to compare with the only possibility offered by the ZEBRA Input/Output system. This program has been run in different configurations selected by a program argument to test the amount of time spent in creating and filling the event/track objects, the time to fill 20 histograms (about 120,000,000 fills). The time to write the file is computed as the total real time to run the program minus the time to create the objects (essentially the random number generator). The macro eventa is used to compute the total real time to read this file. Reading is via the interpreter. Both the ROOT file and ZEBRA files are written in a machine independent format. The ROOT library and the test program were compiled with the default level of optimisation.
A Fortran program zEvent has been written to perform exactly the same tasks as the ROOT C++ program. This program creates a top level ZEBRA bank lEvent with 3 down links: one bank to describe the event header, one bank to contain one histogram, one bank with a number of down links corresponding to the number of tracks per event. Each track bank has 17 data members. Histograms are created and filled using the HBOOK histogram package. The program includes options to compute the total time in creating and filling the ZEBRA data structures, the time to fill histograms and the total I/O time. Both the sequential I/O via FZ and direct access via RZ have been investigated.
From this table, we see that:
Note that this test has been done with a very large file to avoid the system mapping the file into memory. A test with only 1000 events shows that ROOT can read 1000 events in 3.4 seconds when the file is mapped to memory. This corresponds to 13 Mbytes per real time second.
The table below (also available in Postscript format) shows the results when running on the same machine with the same hardware configuration and under the Windows/NT operating system. In this case, Microsoft VisualC++ is used for ROOT and CERNLIB96a compiled with Microsoft Fortran for the ZEBRA and HBOOK test. The ROOT library and the test program were compiled with the maximum level of optimisation. The very bad performance of CERNLIB96a is under investigation.
The table below (also available in Postscript format) shows the results when running on a Pentium PRO 200 Mhz with 128 Mbytes of memory running the SOLARIS operating system. The machine has an Adaptec 2940 Ultra Wide SCSI adapter. The disk used is 1 Gbyte Seagate Hawk 2XL Wide. In this case, SUN C++ is used for ROOT and SUN Fortran77 for the ZEBRA and HBOOK test (CERNLIB96a). The ROOT library and the test program were compiled with the default level of optimisation.