Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
readspeed Directory Reference
Directory dependency graph for readspeed:

Directories

 inc
 
 src
 

Detailed Description

rootreadspeed is a tool used to help identify bottlenecks in root analysis programs by providing an idea of what throughput you can expect when reading ROOT files in certain configurations.

It does this by providing information about the number of bytes read from your files, how long this takes, and the different throughputs in MB/s, both in total and per thread.

Compressed vs Uncompressed Throughput:

Throughput speeds are provided as compressed and uncompressed - ROOT files are usually saved in compressed format, so these will often differ. Compressed bytes is the total number of bytes read from TFiles during the readspeed test (possibly including meta-data). Uncompressed bytes is the number of bytes processed by reading the branch values in the TTree. Throughput is calculated as the total number of bytes over the total runtime (including decompression time) in the uncompressed and compressed cases.

Interpreting results:

There are three possible scenarios when using rootreadspeed, namely:

A note on caching

If your data is stored on a local disk, the system may cache some/all of the file in memory after it is first read. If this is realistic of how your analysis will run - then there is no concern. However, if you expect to only read files once in a while - and as such the files are unlikely to be in the cache - consider clearing the cache before running rootreadspeed. On Linux this can be done by running 'echo 3 > /proc/sys/vm/drop_caches' as a superuser, or a specific file can be dropped from the cache with dd of=<FILENAME> oflag=nocache conv=notrunc,fdatasync count=0 > /dev/null 2>&1.

Known overhead of TTreeReader, RDataFrame

rootreadspeed is designed to read all data present in the specified branches, trees and files at the highest possible speed. When the application bottleneck is not in the computations performed by analysis logic, higher-level interfaces built on top of TTree such as TTreeReader and RDataFrame are known to add a significant runtime overhead with respect to the runtimes reported by rootreadspeed (up to a factor 2). In realistic analysis applications it has been observed that a large part of that overhead is compensated by the ability of TTreeReader and RDataFrame to read branch values selectively, based on event cuts, and this overhead will be reduced significantly when using RDataFrame in conjunction with RNTuple. See also this talk (slides 16 to 19).