Skip to content

[ntuple] Improve IMT decompression of small pages - #23678

Open
jblomer wants to merge 5 commits into
root-project:masterfrom
jblomer:ntuple-inline-decompression
Open

jblomer wants to merge 5 commits into
root-project:masterfrom
jblomer:ntuple-inline-decompression

Conversation

@jblomer

@jblomer jblomer commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

As discovered by CMS, the IMT decompression of many small pages creates undersized TBB tasks. This PR more than doubles the IMT read speed with many small pages, while having no effect on the RNTuple standard benchmarks.

Degenerated "many small pages" cases are still faster in single-threaded mode than with IMT, so we may need to revisit that part in the future.

Since the page source classes are internal, we don't need to stay
prepared for a future page source implementing its own parallel
unzipping logic. For now, we can make this funtionality just part of the
base class.
Avoid taking the page pool lock for every page preload within the TBB
tasks but instead push all the pages with a single lock at the end.
Brings ~30% speedup for IMT decompression of many small pages.
For the TBB supported parallel decompression, skip creating tasks for
pages <4kB.  This is the order of magnitude as of which page unsealing
is in the 1-10 microseconds regime, where spawning a TBB task starts
making sense. Gives another 30% speedup for parallel decompression of
small pages.
@jblomer jblomer self-assigned this Oct 10, 2026
@jblomer jblomer changed the title [ntuple] improve IMT decompression of small pages [ntuple] Improve IMT decompression of small pages Oct 10, 2026
@github-actions

Copy link
Copy Markdown

Test Results

    24 files      24 suites   4d 1h 10m 6s ⏱️
 3 886 tests  3 884 ✅ 0 💤 2 ❌
83 180 runs  83 178 ✅ 0 💤 2 ❌

For more details on these failures, see this check.

Results for commit e3caad32.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant