Report kvikio I/O statistics per rank in the streaming engines - #23738
Report kvikio I/O statistics per rank in the streaming engines#23738madsbk wants to merge 3 commits into
Conversation
b3c2b49 to
454bf87
Compare
454bf87 to
2658387
Compare
2658387 to
8987e95
Compare
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Enterprise Run ID: 📒 Files selected for processing (2)
Included review availability: Your plan provides up to 12 included reviews per hour; 10 remain after this review. 📝 WalkthroughSummary by CodeRabbit
WalkthroughAdds KvikIO per-rank I/O monitoring to Dask, Ray, and SPMD streaming engines. Benchmark records store I/O summaries, and a CLI reports timing and I/O metrics. Documentation and tests cover collection, clearing, disabled statistics, and reporting. ChangesKvikIO I/O statistics
Estimated code review effort: 4 (Complex) | ~60 minutes Merge Risk: 🟡 Moderate · up to The change can omit benchmark I/O summaries when statistics are enabled during engine reset, and teardown failures can leave monitoring active, causing incomplete reporting and lifecycle cleanup problems. Merge readiness remains moderate until these bounded paths are fixed or explicitly accepted. Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
This PR enables KvikIO statistics on every rank and gathers them on the client. Depends on rapidsai/kvikio#1036, which adds the monitor that does the counting.
Each rank turns on counting when the engine is configured with
statistics=True, andStreamingEngine.gather_io_summary()brings back onekvikio.Summaryper rank, keyed by rank index.What a rank reports
KvikIO renders the report, so this PR formats nothing. A single-rank run of a parquet scan:
Busy time counts only the stretches with a read in flight, so busy bandwidth measures the storage rather than the query: this scan spent 15 % of its wall time reading, and dividing by the whole span would have reported it at a tenth of the rate the disk was really giving.
In the benchmarks
The PDS runners record the per-rank summaries on each iteration's record when
--rapidsmpf-statisticsis passed, so I/O stays queryable across a whole sweep rather than being printed once and lost.print_results_file.py(new file) reads a results file back and prints it, since nothing existed that could. Timings and I/O side by side, one row per rank per iteration:Caveats worth knowing
Monitordocs the cuFile async API on a working GDS system and the batch API report nothing, and anything cudf-polars reads outside KvikIO is invisible.busy_fractionand the bandwidths, are unaffected.