Skip to content

RDataFrame in MultiThread with RNTuples #23136

Description

@fraorlnd

Check duplicate issues.

  • Checked for duplicates

Description

Dear ROOT developers,

We have an analysis framework for CMS data that uses ROOT RDataFrame in MultiThread. In view of the expected adoption of RNTuples, we tried to use an RDataFrame script to convert CMS data stored in ROOT files as flat ntuples (NanoAOD, TTree structure) to RNTuples, which we can then read with our usual framework.

However, when running on the RNTuples the program opens a number of files equal to the number of available threads, waits for all of these files to be processed, and only then opens the next batch. As a result, the execution is limited by the slowest file-thread combination of the batch.

We have prepared a reproducer [linked below with instructions and comments] that generates a set of files as RNTuples, processes the events, and reproduces the issue. We have observed the same behavior on lxplus, on our institute's cluster and our laptop.

On lxplus and our institute cluster we also get the warning

Warning in <RIoUring>: io_uring is unexpectedly not available because:
Error initializing io_uring: Operation not permitted
Warning in <RRawFileUnix>: io_uring setup failed, falling back to blocking I/O in ReadV

Thank you in advance for your help!

Francesco Orlandi and Federico Ferri (@ferriff)

Reproducer

On lxplus:

  1. copy reproduce_problem.cc and j.json in a folder
  2. compile: clang++ reproduce_problem.cc $(root-config --cflags --libs) -o reproduce_problem
  3. execute: ./reproduce_problem -g -n 3 -j j.json

Options:

  • g (activate generation of files, necessary only the first time)
  • n (number of threads for MT execution)
  • j (json file name containing the input files name)

The program generates 100 files: the odd-numbered files contain 9 entries, while the even-numbered files contain 10000 entries. During the execution, we use CPU time by performing some mathematical computations for each entry. For each “batch”, we print the file names and the number of entries contained in each file. Together with the progress bar from RDataFrame, this shows the problem.

reproduce_problem.cc.txt

j.json.txt

ROOT version

6.40.02, built on Jun 20 2026

Installation method

lxplus

Operating system

Linux

Additional context

No response

Activity

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

Metadata

Metadata

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions