Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

groot: question about mmap use / large RSS #1019

Closed
bburghgr opened this issue Nov 8, 2024 · 6 comments · Fixed by #1022
Closed

groot: question about mmap use / large RSS #1019

bburghgr opened this issue Nov 8, 2024 · 6 comments · Fixed by #1022

Comments

@bburghgr
Copy link

bburghgr commented Nov 8, 2024

Forgive me if this is a stupid question, but what is the motivation for using mmap in groot/riofs to read files, instead of just a plain os.Open? A side effect of using mmap is that the resident set size in memory to keep growing, if the system isn't under enough pressure to drop unused pages. AFAIK this is normally a harmless accounting error, but it may become important if RSS is monitored and used for anything.

Context:
I was just running some microbenchmarks comparing ROOT I/O to uproot to groot, and I noticed higher than expected RSS on the groot side. This reminded me that in #885 there was a test commit (sbinet-hep@839e08f) where os.Open was used. Testing it out again, this reduces the RSS as I would naive expect, and it doesn't seem to cause any performance regressions, but linux's disk I/O cache makes this annoyingly hard to test properly. I thought I should just ask before I get too carried away trying to test it, in case I'm overlooking some need to use mmap here.

My theoretical concern is that high RSS may cause monitoring tools (like the ones used in batch systems at HEP computing sites) to incorrectly flag the program as being over its memory budget, and preemptively kill it, before the system is under enough pressure for the mmaped pages to be dropped. Or reschedule it to a slot with a needlessly large memory allocation, leading to a less efficient use of computing resource (in a way which may be hard to detect). Using os.Open for regular file access, and letting the OS disk I/O cache speed up subsequent reads, may avoid triggering false positives in such cases. That being said, most batch systems probably rely on network I/O, which ideally wouldn't be mmaped (if files aren't be accessed through a FUSE mount or something), so this example may be a moot point.

@sbinet
Copy link
Member

sbinet commented Nov 9, 2024

It's possible I introduced mmap for (reading) performances but before I implemented the readahead mechanism.

I'll have a look on Tuesday.

@sbinet
Copy link
Member

sbinet commented Nov 14, 2024

ok, so, I dug up my old groot-bench and played a bit.

here are the results:

$> benchstat ./testdata/log-groot-ref.txt  ./testdata/log-groot-nxt-41300032.txt ./testdata/log-groot-nxt-nommap.txt 
goos: linux
goarch: amd64
pkg: github.com/go-hep/groot-bench
cpu: Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz
                             │ ./testdata/log-groot-ref.txt │ ./testdata/log-groot-nxt-41300032.txt │ ./testdata/log-groot-nxt-nommap.txt │
                             │            sec/op            │     sec/op      vs base               │    sec/op     vs base               │
ReadScalar/GoHEP/None-8                         649.0m ± 2%      655.5m ± 2%       ~ (p=0.081 n=20)    696.5m ± 3%  +7.33% (p=0.000 n=20)
ReadScalar/GoHEP/LZ4-8                          656.4m ± 1%      655.7m ± 2%       ~ (p=0.841 n=20)    672.2m ± 3%  +2.41% (p=0.006 n=20)
ReadScalar/GoHEP/Zlib-Lvl1-8                    648.6m ± 3%      654.7m ± 3%       ~ (p=0.445 n=20)    682.2m ± 4%  +5.19% (p=0.000 n=20)
ReadScalar/GoHEP/Zlib-Lvl6-8                    658.8m ± 2%      669.8m ± 1%  +1.68% (p=0.018 n=20)    696.0m ± 2%  +5.65% (p=0.000 n=20)
ReadScalar/GoHEP/Zlib-Lvl9-8                     1.338 ± 0%       1.337 ± 1%       ~ (p=0.989 n=20)     1.338 ± 0%       ~ (p=1.000 n=20)
ReadSlices/GoHEP/None-8                         220.7m ± 1%      220.9m ± 1%       ~ (p=0.738 n=20)    241.0m ± 1%  +9.20% (p=0.000 n=20)
ReadSlices/GoHEP/LZ4-8                          220.2m ± 1%      220.0m ± 2%       ~ (p=0.968 n=20)    239.3m ± 1%  +8.66% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl1-8                    219.4m ± 2%      218.5m ± 2%       ~ (p=0.461 n=20)    238.0m ± 2%  +8.47% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl6-8                    224.3m ± 2%      234.2m ± 9%  +4.38% (p=0.004 n=20)    241.9m ± 1%  +7.83% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl9-8                    710.8m ± 0%      712.2m ± 0%  +0.20% (p=0.017 n=20)    713.2m ± 0%  +0.34% (p=0.000 n=20)
ReadCMSAll/GoHEP/Zlib-8                          13.14 ± 1%       13.07 ± 2%       ~ (p=0.758 n=20)     13.16 ± 1%       ~ (p=0.414 n=20)
ReadCMSScalar/GoHEP/Zlib-8                       2.928 ± 1%       2.920 ± 1%       ~ (p=0.102 n=20)     2.954 ± 1%  +0.86% (p=0.008 n=20)
geomean                                         708.2m           712.2m       +0.57%                   740.9m       +4.62%

                             │ ./testdata/log-groot-ref.txt │ ./testdata/log-groot-nxt-41300032.txt │ ./testdata/log-groot-nxt-nommap.txt  │
                             │            rss/op            │     rss/op      vs base               │    rss/op     vs base                │
ReadScalar/GoHEP/None-8                        324.00M ± 0%     324.39M ± 0%       ~ (p=0.968 n=20)   12.39M ±  1%  -96.18% (p=0.000 n=20)
ReadScalar/GoHEP/LZ4-8                         323.65M ± 0%     323.69M ± 0%       ~ (p=0.846 n=20)   12.43M ±  1%  -96.16% (p=0.000 n=20)
ReadScalar/GoHEP/Zlib-Lvl1-8                   323.57M ± 0%     324.39M ± 1%       ~ (p=0.565 n=20)   12.40M ±  1%  -96.17% (p=0.000 n=20)
ReadScalar/GoHEP/Zlib-Lvl6-8                   324.06M ± 0%     324.39M ± 1%       ~ (p=0.738 n=20)   14.63M ± 13%  -95.48% (p=0.000 n=20)
ReadScalar/GoHEP/Zlib-Lvl9-8                   307.28M ± 0%     307.54M ± 0%       ~ (p=0.314 n=20)   13.71M ± 10%  -95.54% (p=0.000 n=20)
ReadSlices/GoHEP/None-8                        201.26M ± 1%     202.12M ± 1%       ~ (p=0.449 n=20)   11.93M ±  1%  -94.07% (p=0.000 n=20)
ReadSlices/GoHEP/LZ4-8                         201.06M ± 1%     201.54M ± 1%       ~ (p=0.989 n=20)   12.53M ± 15%  -93.77% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl1-8                   201.07M ± 0%     201.83M ± 1%       ~ (p=0.490 n=20)   14.93M ±  3%  -92.58% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl6-8                   201.95M ± 1%     201.81M ± 0%       ~ (p=0.640 n=20)   14.89M ± 10%  -92.63% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl9-8                   184.91M ± 0%     184.90M ± 0%       ~ (p=0.820 n=20)   15.06M ±  7%  -91.86% (p=0.000 n=20)
ReadCMSAll/GoHEP/Zlib-8                        1751.5M ± 0%     1751.6M ± 0%       ~ (p=0.292 n=20)   115.4M ±  1%  -93.41% (p=0.000 n=20)
ReadCMSScalar/GoHEP/Zlib-8                     389.41M ± 0%     388.04M ± 1%       ~ (p=0.127 n=20)   28.14M ±  5%  -92.77% (p=0.000 n=20)
geomean                                         307.0M           307.3M       +0.10%                  17.09M        -94.43%

                             │ ./testdata/log-groot-ref.txt │ ./testdata/log-groot-nxt-41300032.txt │ ./testdata/log-groot-nxt-nommap.txt │
                             │           vmem/op            │    vmem/op      vs base               │   vmem/op    vs base                │
ReadScalar/GoHEP/None-8                         1.546G ± 0%      1.546G ± 0%       ~ (p=0.523 n=20)   1.232G ± 0%  -20.28% (p=0.000 n=20)
ReadScalar/GoHEP/LZ4-8                          1.546G ± 0%      1.545G ± 0%       ~ (p=0.238 n=20)   1.233G ± 0%  -20.25% (p=0.000 n=20)
ReadScalar/GoHEP/Zlib-Lvl1-8                    1.545G ± 0%      1.545G ± 0%       ~ (p=0.799 n=20)   1.232G ± 0%  -20.27% (p=0.000 n=20)
ReadScalar/GoHEP/Zlib-Lvl6-8                    1.546G ± 0%      1.546G ± 0%       ~ (p=0.855 n=20)   1.233G ± 0%  -20.26% (p=0.000 n=20)
ReadScalar/GoHEP/Zlib-Lvl9-8                    1.528G ± 0%      1.528G ± 0%       ~ (p=0.819 n=20)   1.233G ± 0%  -19.28% (p=0.000 n=20)
ReadSlices/GoHEP/None-8                         1.424G ± 0%      1.424G ± 0%       ~ (p=0.273 n=20)   1.232G ± 0%  -13.48% (p=0.000 n=20)
ReadSlices/GoHEP/LZ4-8                          1.422G ± 0%      1.422G ± 0%       ~ (p=0.841 n=20)   1.233G ± 0%  -13.32% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl1-8                    1.422G ± 0%      1.422G ± 0%       ~ (p=0.815 n=20)   1.233G ± 0%  -13.29% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl6-8                    1.422G ± 0%      1.422G ± 0%       ~ (p=0.084 n=20)   1.233G ± 0%  -13.26% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl9-8                    1.405G ± 0%      1.405G ± 0%       ~ (p=0.515 n=20)   1.233G ± 0%  -12.22% (p=0.000 n=20)
ReadCMSAll/GoHEP/Zlib-8                         3.075G ± 0%      3.075G ± 0%       ~ (p=0.120 n=20)   1.299G ± 0%  -57.74% (p=0.000 n=20)
ReadCMSScalar/GoHEP/Zlib-8                      3.009G ± 0%      3.009G ± 0%       ~ (p=0.323 n=20)   1.234G ± 0%  -59.00% (p=0.000 n=20)
geomean                                         1.668G           1.668G       -0.00%                  1.238G       -25.77%

                             │ ./testdata/log-groot-ref.txt │ ./testdata/log-groot-nxt-41300032.txt │ ./testdata/log-groot-nxt-nommap.txt │
                             │           wall/op            │    wall/op      vs base               │   wall/op     vs base               │
ReadScalar/GoHEP/None-8                         650.5m ± 3%      662.4m ± 1%       ~ (p=0.180 n=20)    693.4m ± 3%  +6.59% (p=0.000 n=20)
ReadScalar/GoHEP/LZ4-8                          655.1m ± 3%      656.0m ± 3%       ~ (p=0.565 n=20)    675.1m ± 4%  +3.05% (p=0.033 n=20)
ReadScalar/GoHEP/Zlib-Lvl1-8                    654.3m ± 5%      641.8m ± 3%       ~ (p=0.698 n=20)    695.1m ± 4%  +6.24% (p=0.000 n=20)
ReadScalar/GoHEP/Zlib-Lvl6-8                    661.2m ± 3%      669.4m ± 3%       ~ (p=0.324 n=20)    700.3m ± 4%  +5.91% (p=0.000 n=20)
ReadScalar/GoHEP/Zlib-Lvl9-8                     1.337 ± 0%       1.337 ± 1%       ~ (p=0.995 n=20)     1.337 ± 0%       ~ (p=0.984 n=20)
ReadSlices/GoHEP/None-8                         223.2m ± 3%      221.2m ± 5%       ~ (p=0.974 n=20)    239.4m ± 5%  +7.28% (p=0.002 n=20)
ReadSlices/GoHEP/LZ4-8                          220.3m ± 5%      216.7m ± 5%       ~ (p=0.799 n=20)    239.5m ± 2%  +8.71% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl1-8                    219.5m ± 5%      218.2m ± 4%       ~ (p=0.683 n=20)    237.3m ± 4%  +8.11% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl6-8                    228.8m ± 3%      230.6m ± 9%       ~ (p=0.387 n=20)    245.1m ± 3%  +7.12% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl9-8                    711.1m ± 0%      711.2m ± 0%       ~ (p=0.239 n=20)    713.5m ± 0%  +0.34% (p=0.000 n=20)
ReadCMSAll/GoHEP/Zlib-8                          13.13 ± 1%       13.07 ± 2%       ~ (p=0.753 n=20)     13.16 ± 1%       ~ (p=0.425 n=20)
ReadCMSScalar/GoHEP/Zlib-8                       2.928 ± 1%       2.920 ± 1%       ~ (p=0.092 n=20)     2.954 ± 0%  +0.87% (p=0.007 n=20)
geomean                                         710.9m           709.7m       -0.16%                   742.8m       +4.49%

where:

there's a sizeable performance drop in terms of CPU and wall-clock.
but we're still faster than C++/ROOT.
and we do get a sizeable improvement in terms of RSS+VMem usage.

the CPU performance drop may indicate the read ahead code could be improved (and/or somewhat improved through your suggestion in #1020)

@sbinet
Copy link
Member

sbinet commented Nov 14, 2024

one could recoup some of the original CPU perfs by increasing the read-ahead buffer (with e.g.: rtree.WithPrefetchBaskets(10)), at the price of some VMem+RSS increase.

there's definitely some amount of heuristics to put in place.

@sbinet
Copy link
Member

sbinet commented Nov 15, 2024

for completeness, here is a benchmark report for multiple values of the "prefetch basket":

$> benchstat ./testdata/log-groot-ref.txt ./testdata/log-groot-nxt-2bk.txt ./testdata/log-groot-nxt-4bk.txt   testdata/log-groot-nxt-16bk.txt  testdata/log-groot-nxt-64bk.txt  testdata/log-groot-nxt-1024bk.txt
goos: linux
goarch: amd64
pkg: github.com/go-hep/groot-bench
cpu: Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz
                             │ ./testdata/log-groot-ref.txt │   ./testdata/log-groot-nxt-2bk.txt   │   ./testdata/log-groot-nxt-4bk.txt    │   testdata/log-groot-nxt-16bk.txt    │   testdata/log-groot-nxt-64bk.txt   │  testdata/log-groot-nxt-1024bk.txt  │
                             │            sec/op            │    sec/op     vs base                │    sec/op      vs base                │    sec/op     vs base                │   sec/op     vs base                │   sec/op     vs base                │
ReadScalar/GoHEP/None-8                         649.0m ± 2%    714.2m ± 3%  +10.05% (p=0.000 n=20)    709.7m ±  3%   +9.36% (p=0.000 n=20)    730.5m ± 2%  +12.57% (p=0.000 n=20)   729.7m ± 1%  +12.43% (p=0.000 n=20)   674.1m ± 2%   +3.87% (p=0.000 n=20)
ReadScalar/GoHEP/LZ4-8                          656.4m ± 1%    710.3m ± 3%   +8.21% (p=0.000 n=20)    726.0m ±  3%  +10.60% (p=0.000 n=20)    724.1m ± 2%  +10.31% (p=0.000 n=20)   723.0m ± 3%  +10.15% (p=0.000 n=20)   662.5m ± 2%        ~ (p=0.096 n=20)
ReadScalar/GoHEP/Zlib-Lvl1-8                    648.6m ± 3%    716.3m ± 2%  +10.44% (p=0.000 n=20)    723.1m ±  2%  +11.49% (p=0.000 n=20)    715.8m ± 3%  +10.36% (p=0.000 n=20)   712.3m ± 3%   +9.82% (p=0.000 n=20)   649.2m ± 2%        ~ (p=0.925 n=20)
ReadScalar/GoHEP/Zlib-Lvl6-8                    658.8m ± 2%    718.0m ± 3%   +8.99% (p=0.000 n=20)    709.3m ±  2%   +7.66% (p=0.000 n=20)    730.4m ± 4%  +10.87% (p=0.000 n=20)   735.7m ± 3%  +11.68% (p=0.000 n=20)   640.8m ± 2%   -2.73% (p=0.001 n=20)
ReadScalar/GoHEP/Zlib-Lvl9-8                   1337.5m ± 0%   1350.8m ± 0%   +0.99% (p=0.000 n=20)   1205.8m ± 12%   -9.85% (p=0.026 n=20)   1034.3m ± 1%  -22.67% (p=0.000 n=20)   991.5m ± 1%  -25.87% (p=0.000 n=20)   964.8m ± 2%  -27.86% (p=0.000 n=20)
ReadSlices/GoHEP/None-8                         220.7m ± 1%    242.5m ± 1%   +9.89% (p=0.000 n=20)    250.4m ±  2%  +13.45% (p=0.000 n=20)    220.3m ± 3%        ~ (p=0.565 n=20)   217.3m ± 2%   -1.57% (p=0.028 n=20)   161.3m ± 1%  -26.93% (p=0.000 n=20)
ReadSlices/GoHEP/LZ4-8                          220.2m ± 1%    242.7m ± 1%  +10.21% (p=0.000 n=20)    217.4m ±  4%        ~ (p=0.060 n=20)    213.6m ± 5%        ~ (p=0.060 n=20)   211.7m ± 3%   -3.85% (p=0.007 n=20)   161.9m ± 2%  -26.50% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl1-8                    219.4m ± 2%    242.5m ± 1%  +10.55% (p=0.000 n=20)    218.5m ±  3%        ~ (p=0.383 n=20)    214.3m ± 4%   -2.33% (p=0.046 n=20)   213.6m ± 3%   -2.64% (p=0.006 n=20)   168.7m ± 1%  -23.10% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl6-8                    224.3m ± 2%    245.4m ± 1%   +9.38% (p=0.000 n=20)    233.1m ±  2%   +3.89% (p=0.000 n=20)    220.0m ± 2%   -1.92% (p=0.008 n=20)   216.4m ± 4%   -3.55% (p=0.002 n=20)   167.7m ± 2%  -25.25% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl9-8                    710.8m ± 0%    713.7m ± 0%   +0.41% (p=0.000 n=20)    660.9m ±  1%   -7.01% (p=0.000 n=20)    613.1m ± 1%  -13.74% (p=0.000 n=20)   593.5m ± 1%  -16.50% (p=0.000 n=20)   619.0m ± 3%  -12.92% (p=0.000 n=20)
ReadCMSAll/GoHEP/Zlib-8                          13.14 ± 1%     13.42 ± 1%   +2.13% (p=0.000 n=20)     13.77 ±  1%   +4.81% (p=0.000 n=20)     14.43 ± 1%   +9.87% (p=0.000 n=20)    15.57 ± 6%  +18.50% (p=0.000 n=20)    16.86 ± 2%  +28.36% (p=0.000 n=20)
ReadCMSScalar/GoHEP/Zlib-8                       2.928 ± 1%     3.069 ± 0%   +4.80% (p=0.000 n=20)     2.923 ±  1%        ~ (p=0.149 n=20)     2.931 ± 1%        ~ (p=0.659 n=20)    2.927 ± 1%        ~ (p=0.678 n=20)    2.873 ± 2%   -1.89% (p=0.000 n=20)
geomean                                         708.2m         758.5m        +7.10%                   731.5m         +3.30%                   710.2m        +0.28%                  707.6m        -0.08%                  630.8m       -10.93%

                             │ ./testdata/log-groot-ref.txt │   ./testdata/log-groot-nxt-2bk.txt   │   ./testdata/log-groot-nxt-4bk.txt   │    testdata/log-groot-nxt-16bk.txt    │   testdata/log-groot-nxt-64bk.txt    │   testdata/log-groot-nxt-1024bk.txt    │
                             │            rss/op            │    rss/op     vs base                │    rss/op     vs base                │    rss/op      vs base                │    rss/op     vs base                │    rss/op      vs base                 │
ReadScalar/GoHEP/None-8                        324.00M ± 0%   12.40M ±  1%  -96.17% (p=0.000 n=20)   12.56M ± 15%  -96.12% (p=0.000 n=20)    14.85M ± 12%  -95.42% (p=0.000 n=20)    22.95M ± 0%  -92.92% (p=0.000 n=20)    179.80M ± 0%   -44.51% (p=0.000 n=20)
ReadScalar/GoHEP/LZ4-8                         323.65M ± 0%   12.41M ±  1%  -96.16% (p=0.000 n=20)   12.44M ±  1%  -96.16% (p=0.000 n=20)    14.67M ±  2%  -95.47% (p=0.000 n=20)    23.05M ± 1%  -92.88% (p=0.000 n=20)    179.76M ± 0%   -44.46% (p=0.000 n=20)
ReadScalar/GoHEP/Zlib-Lvl1-8                   323.57M ± 0%   12.40M ±  0%  -96.17% (p=0.000 n=20)   12.36M ±  1%  -96.18% (p=0.000 n=20)    14.79M ±  2%  -95.43% (p=0.000 n=20)    22.98M ± 0%  -92.90% (p=0.000 n=20)    179.78M ± 0%   -44.44% (p=0.000 n=20)
ReadScalar/GoHEP/Zlib-Lvl6-8                   324.06M ± 0%   14.94M ± 13%  -95.39% (p=0.000 n=20)   15.98M ± 10%  -95.07% (p=0.000 n=20)    16.94M ±  1%  -94.77% (p=0.000 n=20)    25.37M ± 1%  -92.17% (p=0.000 n=20)    182.08M ± 0%   -43.81% (p=0.000 n=20)
ReadScalar/GoHEP/Zlib-Lvl9-8                   307.28M ± 0%   13.79M ±  9%  -95.51% (p=0.000 n=20)   16.13M ± 14%  -94.75% (p=0.000 n=20)    19.17M ±  1%  -93.76% (p=0.000 n=20)    31.76M ± 6%  -89.66% (p=0.000 n=20)    278.58M ± 2%    -9.34% (p=0.000 n=20)
ReadSlices/GoHEP/None-8                        201.26M ± 1%   11.93M ±  0%  -94.07% (p=0.000 n=20)   12.54M ±  1%  -93.77% (p=0.000 n=20)    14.65M ±  8%  -92.72% (p=0.000 n=20)    27.34M ± 1%  -86.42% (p=0.000 n=20)    196.61M ± 1%    -2.31% (p=0.000 n=20)
ReadSlices/GoHEP/LZ4-8                         201.06M ± 1%   13.32M ±  8%  -93.37% (p=0.000 n=20)   13.74M ±  7%  -93.17% (p=0.000 n=20)    16.74M ±  4%  -91.67% (p=0.000 n=20)    27.41M ± 1%  -86.37% (p=0.000 n=20)    196.50M ± 0%    -2.27% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl1-8                   201.07M ± 0%   15.03M ±  1%  -92.52% (p=0.000 n=20)   15.18M ±  4%  -92.45% (p=0.000 n=20)    19.16M ±  2%  -90.47% (p=0.000 n=20)    31.73M ± 6%  -84.22% (p=0.000 n=20)    196.86M ± 1%    -2.09% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl6-8                   201.95M ± 1%   14.99M ±  9%  -92.58% (p=0.000 n=20)   15.06M ± 11%  -92.54% (p=0.000 n=20)    19.14M ±  1%  -90.52% (p=0.000 n=20)    31.82M ± 1%  -84.24% (p=0.000 n=20)    197.77M ± 1%    -2.07% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl9-8                   184.91M ± 0%   13.90M ± 10%  -92.48% (p=0.000 n=20)   15.00M ±  8%  -91.89% (p=0.000 n=20)    21.50M ±  1%  -88.38% (p=0.000 n=20)    44.36M ± 0%  -76.01% (p=0.000 n=20)    327.72M ± 4%   +77.23% (p=0.000 n=20)
ReadCMSAll/GoHEP/Zlib-8                        1751.5M ± 0%   114.5M ±  0%  -93.46% (p=0.000 n=20)   205.3M ±  1%  -88.28% (p=0.000 n=20)    699.7M ±  5%  -60.05% (p=0.000 n=20)   2137.8M ± 2%  +22.06% (p=0.000 n=20)    6722.4M ± 1%  +283.82% (p=0.000 n=20)
ReadCMSScalar/GoHEP/Zlib-8                     389.41M ± 0%   27.20M ±  6%  -93.02% (p=0.000 n=20)   39.97M ±  0%  -89.74% (p=0.000 n=20)   118.13M ±  2%  -69.67% (p=0.000 n=20)   326.39M ± 4%  -16.18% (p=0.000 n=20)   1042.57M ± 1%  +167.73% (p=0.000 n=20)
geomean                                         307.0M        17.06M        -94.44%                  19.14M        -93.77%                   27.24M        -91.12%                   49.74M       -83.80%                    316.7M         +3.17%

                             │ ./testdata/log-groot-ref.txt │  ./testdata/log-groot-nxt-2bk.txt   │  ./testdata/log-groot-nxt-4bk.txt   │   testdata/log-groot-nxt-16bk.txt   │   testdata/log-groot-nxt-64bk.txt   │  testdata/log-groot-nxt-1024bk.txt   │
                             │           vmem/op            │   vmem/op    vs base                │   vmem/op    vs base                │   vmem/op    vs base                │   vmem/op    vs base                │   vmem/op    vs base                 │
ReadScalar/GoHEP/None-8                         1.546G ± 0%   1.232G ± 0%  -20.26% (p=0.000 n=20)   1.232G ± 0%  -20.26% (p=0.000 n=20)   1.233G ± 0%  -20.22% (p=0.000 n=20)   1.233G ± 0%  -20.22% (p=0.000 n=20)   1.365G ± 0%   -11.70% (p=0.000 n=20)
ReadScalar/GoHEP/LZ4-8                          1.546G ± 0%   1.232G ± 0%  -20.27% (p=0.000 n=20)   1.232G ± 0%  -20.27% (p=0.000 n=20)   1.233G ± 0%  -20.22% (p=0.000 n=20)   1.233G ± 0%  -20.22% (p=0.000 n=20)   1.365G ± 0%   -11.70% (p=0.000 n=20)
ReadScalar/GoHEP/Zlib-Lvl1-8                    1.545G ± 0%   1.232G ± 0%  -20.27% (p=0.000 n=20)   1.232G ± 0%  -20.27% (p=0.000 n=20)   1.233G ± 0%  -20.21% (p=0.000 n=20)   1.233G ± 0%  -20.21% (p=0.000 n=20)   1.365G ± 0%   -11.68% (p=0.000 n=20)
ReadScalar/GoHEP/Zlib-Lvl6-8                    1.546G ± 0%   1.233G ± 0%  -20.25% (p=0.000 n=20)   1.233G ± 0%  -20.23% (p=0.000 n=20)   1.233G ± 0%  -20.23% (p=0.000 n=20)   1.233G ± 0%  -20.21% (p=0.000 n=20)   1.365G ± 0%   -11.69% (p=0.000 n=20)
ReadScalar/GoHEP/Zlib-Lvl9-8                    1.528G ± 0%   1.233G ± 0%  -19.28% (p=0.000 n=20)   1.233G ± 0%  -19.28% (p=0.000 n=20)   1.233G ± 0%  -19.28% (p=0.000 n=20)   1.233G ± 0%  -19.28% (p=0.000 n=20)   1.498G ± 0%    -1.98% (p=0.000 n=20)
ReadSlices/GoHEP/None-8                         1.424G ± 0%   1.232G ± 0%  -13.48% (p=0.000 n=20)   1.233G ± 0%  -13.42% (p=0.000 n=20)   1.233G ± 0%  -13.38% (p=0.000 n=20)   1.233G ± 0%  -13.37% (p=0.000 n=20)   1.365G ± 0%    -4.11% (p=0.000 n=20)
ReadSlices/GoHEP/LZ4-8                          1.422G ± 0%   1.233G ± 0%  -13.32% (p=0.000 n=20)   1.233G ± 0%  -13.32% (p=0.000 n=20)   1.233G ± 0%  -13.26% (p=0.000 n=20)   1.233G ± 0%  -13.26% (p=0.000 n=20)   1.365G ± 0%    -4.00% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl1-8                    1.422G ± 0%   1.233G ± 0%  -13.29% (p=0.000 n=20)   1.233G ± 0%  -13.27% (p=0.000 n=20)   1.233G ± 0%  -13.26% (p=0.000 n=20)   1.234G ± 0%  -13.26% (p=0.000 n=20)   1.365G ± 0%    -3.99% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl6-8                    1.422G ± 0%   1.233G ± 0%  -13.26% (p=0.000 n=20)   1.233G ± 0%  -13.28% (p=0.000 n=20)   1.233G ± 0%  -13.26% (p=0.000 n=20)   1.233G ± 0%  -13.26% (p=0.000 n=20)   1.365G ± 0%    -3.99% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl9-8                    1.405G ± 0%   1.233G ± 0%  -12.22% (p=0.000 n=20)   1.233G ± 0%  -12.22% (p=0.000 n=20)   1.234G ± 0%  -12.20% (p=0.000 n=20)   1.234G ± 0%  -12.20% (p=0.000 n=20)   1.498G ± 4%    +6.58% (p=0.000 n=20)
ReadCMSAll/GoHEP/Zlib-8                         3.075G ± 0%   1.299G ± 0%  -57.74% (p=0.000 n=20)   1.366G ± 5%  -55.59% (p=0.000 n=20)   1.892G ± 3%  -38.46% (p=0.000 n=20)   3.336G ± 2%   +8.48% (p=0.000 n=20)   7.928G ± 2%  +157.85% (p=0.000 n=20)
ReadCMSScalar/GoHEP/Zlib-8                      3.009G ± 0%   1.234G ± 0%  -59.00% (p=0.000 n=20)   1.234G ± 0%  -59.00% (p=0.000 n=20)   1.299G ± 0%  -56.81% (p=0.000 n=20)   1.496G ± 4%  -50.26% (p=0.000 n=20)   2.218G ± 0%   -26.28% (p=0.000 n=20)
geomean                                         1.668G        1.238G       -25.77%                  1.243G       -25.45%                  1.284G       -23.05%                  1.362G       -18.36%                  1.671G         +0.20%

                             │ ./testdata/log-groot-ref.txt │   ./testdata/log-groot-nxt-2bk.txt   │   ./testdata/log-groot-nxt-4bk.txt    │    testdata/log-groot-nxt-16bk.txt    │   testdata/log-groot-nxt-64bk.txt    │  testdata/log-groot-nxt-1024bk.txt  │
                             │           wall/op            │   wall/op     vs base                │    wall/op     vs base                │    wall/op     vs base                │   wall/op     vs base                │   wall/op    vs base                │
ReadScalar/GoHEP/None-8                         650.5m ± 3%    720.9m ± 2%  +10.81% (p=0.000 n=20)    716.0m ±  1%  +10.06% (p=0.000 n=20)    727.0m ±  3%  +11.75% (p=0.000 n=20)   722.6m ±  4%  +11.08% (p=0.000 n=20)   674.8m ± 2%   +3.73% (p=0.006 n=20)
ReadScalar/GoHEP/LZ4-8                          655.1m ± 3%    700.2m ± 4%   +6.88% (p=0.000 n=20)    733.7m ±  3%  +12.00% (p=0.000 n=20)    721.2m ±  3%  +10.09% (p=0.000 n=20)   708.6m ±  4%   +8.17% (p=0.000 n=20)   662.0m ± 2%        ~ (p=0.176 n=20)
ReadScalar/GoHEP/Zlib-Lvl1-8                    654.3m ± 5%    720.2m ± 3%  +10.06% (p=0.000 n=20)    733.8m ±  4%  +12.15% (p=0.000 n=20)    704.0m ±  4%   +7.60% (p=0.000 n=20)   704.0m ±  5%   +7.59% (p=0.000 n=20)   641.8m ± 4%        ~ (p=0.461 n=20)
ReadScalar/GoHEP/Zlib-Lvl6-8                    661.2m ± 3%    713.9m ± 5%   +7.98% (p=0.000 n=20)    699.8m ±  5%   +5.83% (p=0.000 n=20)    726.2m ±  7%   +9.82% (p=0.000 n=20)   729.5m ±  3%  +10.33% (p=0.000 n=20)   652.8m ± 2%        ~ (p=0.337 n=20)
ReadScalar/GoHEP/Zlib-Lvl9-8                   1337.5m ± 0%   1350.5m ± 0%   +0.97% (p=0.000 n=20)   1205.5m ± 12%   -9.87% (p=0.026 n=20)   1034.0m ±  1%  -22.69% (p=0.000 n=20)   982.4m ±  3%  -26.55% (p=0.000 n=20)   961.3m ± 2%  -28.12% (p=0.000 n=20)
ReadSlices/GoHEP/None-8                         223.2m ± 3%    244.5m ± 2%   +9.57% (p=0.000 n=20)    247.3m ±  5%  +10.82% (p=0.000 n=20)    224.8m ±  4%        ~ (p=0.941 n=20)   226.7m ± 11%        ~ (p=0.910 n=20)   160.4m ± 3%  -28.10% (p=0.000 n=20)
ReadSlices/GoHEP/LZ4-8                          220.3m ± 5%    247.9m ± 3%  +12.48% (p=0.000 n=20)    214.7m ±  8%        ~ (p=0.240 n=20)    215.7m ±  9%        ~ (p=0.846 n=20)   226.1m ± 10%        ~ (p=0.774 n=20)   164.2m ± 4%  -25.46% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl1-8                    219.5m ± 5%    245.4m ± 2%  +11.80% (p=0.000 n=20)    218.9m ±  8%        ~ (p=0.794 n=20)    208.4m ± 10%        ~ (p=0.075 n=20)   211.6m ±  6%        ~ (p=0.059 n=20)   169.2m ± 5%  -22.92% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl6-8                    228.8m ± 3%    244.8m ± 4%   +7.01% (p=0.000 n=20)    239.9m ±  2%   +4.85% (p=0.000 n=20)    219.7m ±  8%        ~ (p=0.080 n=20)   219.7m ±  8%        ~ (p=0.053 n=20)   165.3m ± 2%  -27.73% (p=0.000 n=20)
ReadSlices/GoHEP/Zlib-Lvl9-8                    711.1m ± 0%    712.8m ± 0%   +0.24% (p=0.006 n=20)    660.0m ±  0%   -7.19% (p=0.000 n=20)    615.9m ±  2%  -13.39% (p=0.000 n=20)   592.0m ±  2%  -16.74% (p=0.000 n=20)   616.3m ± 4%  -13.32% (p=0.000 n=20)
ReadCMSAll/GoHEP/Zlib-8                          13.13 ± 1%     13.41 ± 1%   +2.13% (p=0.000 n=20)     13.77 ±  1%   +4.83% (p=0.000 n=20)     14.43 ±  1%   +9.90% (p=0.000 n=20)    15.57 ±  6%  +18.50% (p=0.000 n=20)    16.87 ± 2%  +28.40% (p=0.000 n=20)
ReadCMSScalar/GoHEP/Zlib-8                       2.928 ± 1%     3.069 ± 0%   +4.82% (p=0.000 n=20)     2.923 ±  1%        ~ (p=0.140 n=20)     2.931 ±  1%        ~ (p=0.683 n=20)    2.927 ±  1%        ~ (p=0.654 n=20)    2.873 ± 2%   -1.88% (p=0.000 n=20)
geomean                                         710.9m         760.5m        +6.99%                   733.1m         +3.12%                   708.6m         -0.32%                  710.7m         -0.03%                  630.7m       -11.28%

my TL;DR / take on this is that for non-microbenchmark-y payloads (ie: ReadCMS*) we don't gain that much by moving away from the 2-size channel of read-ahead prefetches.

FTR, here is the complete (w/ ROOT/C++-6.32/06, gcc-14.2.1) performance values for log-groot-ref.txt (ie: groot-v0.35)

$> benchstat ./testdata/log-groot-v0.35-vmem.txt 
goos: linux
goarch: amd64
pkg: github.com/go-hep/groot-bench
cpu: Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz
                                       │ ./testdata/log-groot-v0.35-vmem.txt │
                                       │               sec/op                │
ReadScalar/GoHEP/None-8                                         649.0m ±  2%
ReadScalar/GoHEP/LZ4-8                                          656.4m ±  1%
ReadScalar/GoHEP/Zlib-Lvl1-8                                    648.6m ±  3%
ReadScalar/GoHEP/Zlib-Lvl6-8                                    658.8m ±  2%
ReadScalar/GoHEP/Zlib-Lvl9-8                                     1.338 ±  0%
ReadScalar/ROOT-TreeBranch/None-8                                1.043 ±  1%
ReadScalar/ROOT-TreeBranch/LZ4-8                                 1.049 ±  1%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl1-8                           1.051 ±  1%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl6-8                           1.050 ±  0%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl9-8                           2.186 ±  0%
ReadScalar/ROOT-TreeReader/None-8                                1.258 ±  1%
ReadScalar/ROOT-TreeReader/LZ4-8                                 1.260 ±  1%
ReadScalar/ROOT-TreeReader/Zlib-Lvl1-8                           1.269 ±  1%
ReadScalar/ROOT-TreeReader/Zlib-Lvl6-8                           1.260 ±  1%
ReadScalar/ROOT-TreeReader/Zlib-Lvl9-8                           2.417 ±  1%
ReadSlices/GoHEP/None-8                                         220.7m ±  1%
ReadSlices/GoHEP/LZ4-8                                          220.2m ±  1%
ReadSlices/GoHEP/Zlib-Lvl1-8                                    219.4m ±  2%
ReadSlices/GoHEP/Zlib-Lvl6-8                                    224.3m ±  2%
ReadSlices/GoHEP/Zlib-Lvl9-8                                    710.8m ±  0%
ReadSlices/ROOT-TreeBranch/None-8                               429.8m ±  1%
ReadSlices/ROOT-TreeBranch/LZ4-8                                434.6m ±  0%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl1-8                          440.6m ±  1%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl6-8                          444.5m ±  0%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl9-8                           1.147 ±  1%
ReadSlices/ROOT-TreeReader/None-8                               496.3m ±  1%
ReadSlices/ROOT-TreeReader/LZ4-8                                591.0m ±  2%
ReadSlices/ROOT-TreeReader/Zlib-Lvl1-8                          517.9m ± 16%
ReadSlices/ROOT-TreeReader/Zlib-Lvl6-8                          507.8m ±  1%
ReadSlices/ROOT-TreeReader/Zlib-Lvl9-8                           1.220 ±  1%
ReadCMSAll/GoHEP/Zlib-8                                          13.14 ±  1%
ReadCMSAll/ROOT-TreeBranch/Zlib-8                                30.19 ±  1%
ReadCMSScalar/GoHEP/Zlib-8                                       2.928 ±  1%
ReadCMSScalar/ROOT-TreeBranch/Zlib-8                             7.968 ±  1%
ReadCMSScalar/ROOT-TreeReader/Zlib-8                             6.950 ±  1%
geomean                                                          1.015

                                       │ ./testdata/log-groot-v0.35-vmem.txt │
                                       │               rss/op                │
ReadScalar/GoHEP/None-8                                          324.0M ± 0%
ReadScalar/GoHEP/LZ4-8                                           323.6M ± 0%
ReadScalar/GoHEP/Zlib-Lvl1-8                                     323.6M ± 0%
ReadScalar/GoHEP/Zlib-Lvl6-8                                     324.1M ± 0%
ReadScalar/GoHEP/Zlib-Lvl9-8                                     307.3M ± 0%
ReadScalar/ROOT-TreeBranch/None-8                                296.4M ± 0%
ReadScalar/ROOT-TreeBranch/LZ4-8                                 296.5M ± 0%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl1-8                           296.6M ± 0%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl6-8                           296.5M ± 0%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl9-8                           296.5M ± 0%
ReadScalar/ROOT-TreeReader/None-8                                296.4M ± 0%
ReadScalar/ROOT-TreeReader/LZ4-8                                 296.7M ± 0%
ReadScalar/ROOT-TreeReader/Zlib-Lvl1-8                           296.8M ± 0%
ReadScalar/ROOT-TreeReader/Zlib-Lvl6-8                           296.7M ± 0%
ReadScalar/ROOT-TreeReader/Zlib-Lvl9-8                           296.7M ± 0%
ReadSlices/GoHEP/None-8                                          201.3M ± 1%
ReadSlices/GoHEP/LZ4-8                                           201.1M ± 1%
ReadSlices/GoHEP/Zlib-Lvl1-8                                     201.1M ± 0%
ReadSlices/GoHEP/Zlib-Lvl6-8                                     201.9M ± 1%
ReadSlices/GoHEP/Zlib-Lvl9-8                                     184.9M ± 0%
ReadSlices/ROOT-TreeBranch/None-8                                296.5M ± 0%
ReadSlices/ROOT-TreeBranch/LZ4-8                                 296.6M ± 0%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl1-8                           355.2M ± 0%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl6-8                           355.3M ± 0%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl9-8                           296.4M ± 0%
ReadSlices/ROOT-TreeReader/None-8                                296.7M ± 0%
ReadSlices/ROOT-TreeReader/LZ4-8                                 296.8M ± 0%
ReadSlices/ROOT-TreeReader/Zlib-Lvl1-8                           296.8M ± 0%
ReadSlices/ROOT-TreeReader/Zlib-Lvl6-8                           355.5M ± 0%
ReadSlices/ROOT-TreeReader/Zlib-Lvl9-8                           296.8M ± 0%
ReadCMSAll/GoHEP/Zlib-8                                          1.751G ± 0%
ReadCMSAll/ROOT-TreeBranch/Zlib-8                                281.9M ± 0%
ReadCMSScalar/GoHEP/Zlib-8                                       389.4M ± 0%
ReadCMSScalar/ROOT-TreeBranch/Zlib-8                             253.4M ± 0%
ReadCMSScalar/ROOT-TreeReader/Zlib-8                             253.5M ± 0%
geomean                                                          301.6M

                                       │ ./testdata/log-groot-v0.35-vmem.txt │
                                       │               vmem/op               │
ReadScalar/GoHEP/None-8                                          1.546G ± 0%
ReadScalar/GoHEP/LZ4-8                                           1.546G ± 0%
ReadScalar/GoHEP/Zlib-Lvl1-8                                     1.545G ± 0%
ReadScalar/GoHEP/Zlib-Lvl6-8                                     1.546G ± 0%
ReadScalar/GoHEP/Zlib-Lvl9-8                                     1.528G ± 0%
ReadScalar/ROOT-TreeBranch/None-8                                452.0M ± 0%
ReadScalar/ROOT-TreeBranch/LZ4-8                                 452.0M ± 0%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl1-8                           452.0M ± 0%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl6-8                           452.0M ± 0%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl9-8                           452.0M ± 0%
ReadScalar/ROOT-TreeReader/None-8                                451.9M ± 0%
ReadScalar/ROOT-TreeReader/LZ4-8                                 452.0M ± 0%
ReadScalar/ROOT-TreeReader/Zlib-Lvl1-8                           452.0M ± 0%
ReadScalar/ROOT-TreeReader/Zlib-Lvl6-8                           452.0M ± 0%
ReadScalar/ROOT-TreeReader/Zlib-Lvl9-8                           452.0M ± 0%
ReadSlices/GoHEP/None-8                                          1.424G ± 0%
ReadSlices/GoHEP/LZ4-8                                           1.422G ± 0%
ReadSlices/GoHEP/Zlib-Lvl1-8                                     1.422G ± 0%
ReadSlices/GoHEP/Zlib-Lvl6-8                                     1.422G ± 0%
ReadSlices/GoHEP/Zlib-Lvl9-8                                     1.405G ± 0%
ReadSlices/ROOT-TreeBranch/None-8                                452.3M ± 0%
ReadSlices/ROOT-TreeBranch/LZ4-8                                 452.3M ± 0%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl1-8                           510.9M ± 0%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl6-8                           510.9M ± 0%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl9-8                           452.3M ± 0%
ReadSlices/ROOT-TreeReader/None-8                                452.3M ± 0%
ReadSlices/ROOT-TreeReader/LZ4-8                                 452.3M ± 0%
ReadSlices/ROOT-TreeReader/Zlib-Lvl1-8                           452.3M ± 0%
ReadSlices/ROOT-TreeReader/Zlib-Lvl6-8                           511.0M ± 0%
ReadSlices/ROOT-TreeReader/Zlib-Lvl9-8                           452.3M ± 0%
ReadCMSAll/GoHEP/Zlib-8                                          3.075G ± 0%
ReadCMSAll/ROOT-TreeBranch/Zlib-8                                474.2M ± 0%
ReadCMSScalar/GoHEP/Zlib-8                                       3.009G ± 0%
ReadCMSScalar/ROOT-TreeBranch/Zlib-8                             414.3M ± 0%
ReadCMSScalar/ROOT-TreeReader/Zlib-8                             414.4M ± 0%
geomean                                                          712.2M

                                       │ ./testdata/log-groot-v0.35-vmem.txt │
                                       │               wall/op               │
ReadScalar/GoHEP/None-8                                         650.5m ±  3%
ReadScalar/GoHEP/LZ4-8                                          655.1m ±  3%
ReadScalar/GoHEP/Zlib-Lvl1-8                                    654.3m ±  5%
ReadScalar/GoHEP/Zlib-Lvl6-8                                    661.2m ±  3%
ReadScalar/GoHEP/Zlib-Lvl9-8                                     1.337 ±  0%
ReadScalar/ROOT-TreeBranch/None-8                                1.043 ±  1%
ReadScalar/ROOT-TreeBranch/LZ4-8                                 1.048 ±  1%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl1-8                           1.051 ±  1%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl6-8                           1.050 ±  0%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl9-8                           2.185 ±  0%
ReadScalar/ROOT-TreeReader/None-8                                1.257 ±  1%
ReadScalar/ROOT-TreeReader/LZ4-8                                 1.260 ±  1%
ReadScalar/ROOT-TreeReader/Zlib-Lvl1-8                           1.269 ±  1%
ReadScalar/ROOT-TreeReader/Zlib-Lvl6-8                           1.260 ±  1%
ReadScalar/ROOT-TreeReader/Zlib-Lvl9-8                           2.417 ±  1%
ReadSlices/GoHEP/None-8                                         223.2m ±  3%
ReadSlices/GoHEP/LZ4-8                                          220.3m ±  5%
ReadSlices/GoHEP/Zlib-Lvl1-8                                    219.5m ±  5%
ReadSlices/GoHEP/Zlib-Lvl6-8                                    228.8m ±  3%
ReadSlices/GoHEP/Zlib-Lvl9-8                                    711.1m ±  0%
ReadSlices/ROOT-TreeBranch/None-8                               426.0m ±  1%
ReadSlices/ROOT-TreeBranch/LZ4-8                                434.3m ±  1%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl1-8                          437.6m ±  1%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl6-8                          446.1m ±  1%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl9-8                           1.147 ±  1%
ReadSlices/ROOT-TreeReader/None-8                               496.3m ±  2%
ReadSlices/ROOT-TreeReader/LZ4-8                                596.9m ±  5%
ReadSlices/ROOT-TreeReader/Zlib-Lvl1-8                          512.3m ± 17%
ReadSlices/ROOT-TreeReader/Zlib-Lvl6-8                          507.1m ±  1%
ReadSlices/ROOT-TreeReader/Zlib-Lvl9-8                           1.220 ±  1%
ReadCMSAll/GoHEP/Zlib-8                                          13.13 ±  1%
ReadCMSAll/ROOT-TreeBranch/Zlib-8                                30.20 ±  1%
ReadCMSScalar/GoHEP/Zlib-8                                       2.928 ±  1%
ReadCMSScalar/ROOT-TreeBranch/Zlib-8                             7.967 ±  1%
ReadCMSScalar/ROOT-TreeReader/Zlib-8                             6.950 ±  1%
geomean                                                          1.016

@sbinet
Copy link
Member

sbinet commented Nov 15, 2024

and here is what v0.36 should look like:

$> benchstat ./testdata/log-groot-v0.36.txt
goos: linux
goarch: amd64
pkg: github.com/go-hep/groot-bench
cpu: Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz
                                       │ ./testdata/log-groot-v0.36.txt │
                                       │             sec/op             │
ReadScalar/GoHEP/None-8                                     709.4m ± 2%
ReadScalar/GoHEP/LZ4-8                                      697.8m ± 3%
ReadScalar/GoHEP/Zlib-Lvl1-8                                728.8m ± 5%
ReadScalar/GoHEP/Zlib-Lvl6-8                                709.3m ± 2%
ReadScalar/GoHEP/Zlib-Lvl9-8                                 1.349 ± 0%
ReadScalar/ROOT-TreeBranch/None-8                            1.053 ± 2%
ReadScalar/ROOT-TreeBranch/LZ4-8                             1.059 ± 2%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl1-8                       1.063 ± 1%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl6-8                       1.060 ± 2%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl9-8                       2.200 ± 1%
ReadScalar/ROOT-TreeReader/None-8                            1.266 ± 1%
ReadScalar/ROOT-TreeReader/LZ4-8                             1.266 ± 1%
ReadScalar/ROOT-TreeReader/Zlib-Lvl1-8                       1.285 ± 1%
ReadScalar/ROOT-TreeReader/Zlib-Lvl6-8                       1.287 ± 1%
ReadScalar/ROOT-TreeReader/Zlib-Lvl9-8                       2.421 ± 1%
ReadSlices/GoHEP/None-8                                     244.3m ± 2%
ReadSlices/GoHEP/LZ4-8                                      241.2m ± 1%
ReadSlices/GoHEP/Zlib-Lvl1-8                                240.6m ± 1%
ReadSlices/GoHEP/Zlib-Lvl6-8                                242.8m ± 2%
ReadSlices/GoHEP/Zlib-Lvl9-8                                712.2m ± 0%
ReadSlices/ROOT-TreeBranch/None-8                           435.0m ± 1%
ReadSlices/ROOT-TreeBranch/LZ4-8                            439.9m ± 1%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl1-8                      445.9m ± 1%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl6-8                      446.2m ± 1%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl9-8                       1.141 ± 1%
ReadSlices/ROOT-TreeReader/None-8                           500.5m ± 1%
ReadSlices/ROOT-TreeReader/LZ4-8                            506.7m ± 1%
ReadSlices/ROOT-TreeReader/Zlib-Lvl1-8                      512.0m ± 1%
ReadSlices/ROOT-TreeReader/Zlib-Lvl6-8                      526.9m ± 4%
ReadSlices/ROOT-TreeReader/Zlib-Lvl9-8                       1.249 ± 1%
ReadCMSAll/GoHEP/Zlib-8                                      13.94 ± 2%
ReadCMSAll/ROOT-TreeBranch/Zlib-8                            31.07 ± 2%
ReadCMSScalar/GoHEP/Zlib-8                                   3.059 ± 1%
ReadCMSScalar/ROOT-TreeBranch/Zlib-8                         8.236 ± 2%
ReadCMSScalar/ROOT-TreeReader/Zlib-8                         7.124 ± 2%
geomean                                                      1.043

                                       │ ./testdata/log-groot-v0.36.txt │
                                       │             rss/op             │
ReadScalar/GoHEP/None-8                                    12.46M ±  1%
ReadScalar/GoHEP/LZ4-8                                     12.41M ±  1%
ReadScalar/GoHEP/Zlib-Lvl1-8                               12.49M ±  1%
ReadScalar/GoHEP/Zlib-Lvl6-8                               13.17M ± 14%
ReadScalar/GoHEP/Zlib-Lvl9-8                               13.88M ± 10%
ReadScalar/ROOT-TreeBranch/None-8                          296.4M ±  0%
ReadScalar/ROOT-TreeBranch/LZ4-8                           296.6M ±  0%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl1-8                     296.6M ±  0%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl6-8                     296.5M ±  0%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl9-8                     296.6M ±  0%
ReadScalar/ROOT-TreeReader/None-8                          296.5M ±  0%
ReadScalar/ROOT-TreeReader/LZ4-8                           296.7M ±  0%
ReadScalar/ROOT-TreeReader/Zlib-Lvl1-8                     296.7M ±  0%
ReadScalar/ROOT-TreeReader/Zlib-Lvl6-8                     296.8M ±  0%
ReadScalar/ROOT-TreeReader/Zlib-Lvl9-8                     296.7M ±  0%
ReadSlices/GoHEP/None-8                                    11.93M ±  0%
ReadSlices/GoHEP/LZ4-8                                     12.45M ±  1%
ReadSlices/GoHEP/Zlib-Lvl1-8                               15.01M ±  4%
ReadSlices/GoHEP/Zlib-Lvl6-8                               15.02M ± 10%
ReadSlices/GoHEP/Zlib-Lvl9-8                               14.42M ±  7%
ReadSlices/ROOT-TreeBranch/None-8                          296.5M ±  0%
ReadSlices/ROOT-TreeBranch/LZ4-8                           296.7M ±  0%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl1-8                     355.1M ±  0%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl6-8                     355.2M ±  0%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl9-8                     296.5M ±  0%
ReadSlices/ROOT-TreeReader/None-8                          296.7M ±  0%
ReadSlices/ROOT-TreeReader/LZ4-8                           296.9M ±  0%
ReadSlices/ROOT-TreeReader/Zlib-Lvl1-8                     296.9M ±  0%
ReadSlices/ROOT-TreeReader/Zlib-Lvl6-8                     355.5M ±  0%
ReadSlices/ROOT-TreeReader/Zlib-Lvl9-8                     296.8M ±  0%
ReadCMSAll/GoHEP/Zlib-8                                    114.4M ±  0%
ReadCMSAll/ROOT-TreeBranch/Zlib-8                          282.0M ±  0%
ReadCMSScalar/GoHEP/Zlib-8                                 27.23M ±  6%
ReadCMSScalar/ROOT-TreeBranch/Zlib-8                       253.3M ±  0%
ReadCMSScalar/ROOT-TreeReader/Zlib-8                       253.6M ±  0%
geomean                                                    111.6M

                                       │ ./testdata/log-groot-v0.36.txt │
                                       │            vmem/op             │
ReadScalar/GoHEP/None-8                                     1.232G ± 0%
ReadScalar/GoHEP/LZ4-8                                      1.232G ± 0%
ReadScalar/GoHEP/Zlib-Lvl1-8                                1.233G ± 0%
ReadScalar/GoHEP/Zlib-Lvl6-8                                1.233G ± 0%
ReadScalar/GoHEP/Zlib-Lvl9-8                                1.233G ± 0%
ReadScalar/ROOT-TreeBranch/None-8                           452.0M ± 0%
ReadScalar/ROOT-TreeBranch/LZ4-8                            452.0M ± 0%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl1-8                      452.0M ± 0%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl6-8                      452.0M ± 0%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl9-8                      452.0M ± 0%
ReadScalar/ROOT-TreeReader/None-8                           451.9M ± 0%
ReadScalar/ROOT-TreeReader/LZ4-8                            451.9M ± 0%
ReadScalar/ROOT-TreeReader/Zlib-Lvl1-8                      452.0M ± 0%
ReadScalar/ROOT-TreeReader/Zlib-Lvl6-8                      452.0M ± 0%
ReadScalar/ROOT-TreeReader/Zlib-Lvl9-8                      452.0M ± 0%
ReadSlices/GoHEP/None-8                                     1.232G ± 0%
ReadSlices/GoHEP/LZ4-8                                      1.233G ± 0%
ReadSlices/GoHEP/Zlib-Lvl1-8                                1.233G ± 0%
ReadSlices/GoHEP/Zlib-Lvl6-8                                1.233G ± 0%
ReadSlices/GoHEP/Zlib-Lvl9-8                                1.233G ± 0%
ReadSlices/ROOT-TreeBranch/None-8                           452.3M ± 0%
ReadSlices/ROOT-TreeBranch/LZ4-8                            452.3M ± 0%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl1-8                      510.9M ± 0%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl6-8                      510.9M ± 0%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl9-8                      452.3M ± 0%
ReadSlices/ROOT-TreeReader/None-8                           452.3M ± 0%
ReadSlices/ROOT-TreeReader/LZ4-8                            452.3M ± 0%
ReadSlices/ROOT-TreeReader/Zlib-Lvl1-8                      452.3M ± 0%
ReadSlices/ROOT-TreeReader/Zlib-Lvl6-8                      511.0M ± 0%
ReadSlices/ROOT-TreeReader/Zlib-Lvl9-8                      452.3M ± 0%
ReadCMSAll/GoHEP/Zlib-8                                     1.299G ± 0%
ReadCMSAll/ROOT-TreeBranch/Zlib-8                           474.2M ± 0%
ReadCMSScalar/GoHEP/Zlib-8                                  1.233G ± 0%
ReadCMSScalar/ROOT-TreeBranch/Zlib-8                        414.3M ± 0%
ReadCMSScalar/ROOT-TreeReader/Zlib-8                        414.4M ± 0%
geomean                                                     643.0M

                                       │ ./testdata/log-groot-v0.36.txt │
                                       │            wall/op             │
ReadScalar/GoHEP/None-8                                     721.1m ± 3%
ReadScalar/GoHEP/LZ4-8                                      693.7m ± 2%
ReadScalar/GoHEP/Zlib-Lvl1-8                                725.8m ± 5%
ReadScalar/GoHEP/Zlib-Lvl6-8                                709.6m ± 2%
ReadScalar/GoHEP/Zlib-Lvl9-8                                 1.349 ± 0%
ReadScalar/ROOT-TreeBranch/None-8                            1.053 ± 2%
ReadScalar/ROOT-TreeBranch/LZ4-8                             1.058 ± 2%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl1-8                       1.062 ± 1%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl6-8                       1.060 ± 2%
ReadScalar/ROOT-TreeBranch/Zlib-Lvl9-8                       2.200 ± 1%
ReadScalar/ROOT-TreeReader/None-8                            1.265 ± 1%
ReadScalar/ROOT-TreeReader/LZ4-8                             1.265 ± 1%
ReadScalar/ROOT-TreeReader/Zlib-Lvl1-8                       1.284 ± 1%
ReadScalar/ROOT-TreeReader/Zlib-Lvl6-8                       1.287 ± 1%
ReadScalar/ROOT-TreeReader/Zlib-Lvl9-8                       2.421 ± 1%
ReadSlices/GoHEP/None-8                                     241.9m ± 2%
ReadSlices/GoHEP/LZ4-8                                      239.4m ± 3%
ReadSlices/GoHEP/Zlib-Lvl1-8                                238.0m ± 2%
ReadSlices/GoHEP/Zlib-Lvl6-8                                241.9m ± 1%
ReadSlices/GoHEP/Zlib-Lvl9-8                                711.2m ± 0%
ReadSlices/ROOT-TreeBranch/None-8                           435.2m ± 2%
ReadSlices/ROOT-TreeBranch/LZ4-8                            436.4m ± 2%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl1-8                      442.2m ± 1%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl6-8                      444.1m ± 1%
ReadSlices/ROOT-TreeBranch/Zlib-Lvl9-8                       1.141 ± 1%
ReadSlices/ROOT-TreeReader/None-8                           499.4m ± 2%
ReadSlices/ROOT-TreeReader/LZ4-8                            504.9m ± 1%
ReadSlices/ROOT-TreeReader/Zlib-Lvl1-8                      512.9m ± 3%
ReadSlices/ROOT-TreeReader/Zlib-Lvl6-8                      527.4m ± 4%
ReadSlices/ROOT-TreeReader/Zlib-Lvl9-8                       1.249 ± 1%
ReadCMSAll/GoHEP/Zlib-8                                      13.94 ± 2%
ReadCMSAll/ROOT-TreeBranch/Zlib-8                            31.07 ± 2%
ReadCMSScalar/GoHEP/Zlib-8                                   3.059 ± 1%
ReadCMSScalar/ROOT-TreeBranch/Zlib-8                         8.236 ± 2%
ReadCMSScalar/ROOT-TreeReader/Zlib-8                         7.123 ± 2%
geomean                                                      1.041

@sbinet
Copy link
Member

sbinet commented Nov 15, 2024

all the gritty details are in go-hep/groot-bench@064bccd

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants