test: reduce ucx_backend_test transfer volume - #2042
Conversation
Each configuration moves and verifies desc_cnt * desc_size bytes. At 64 descriptors of 1 MB that is 64 MB per configuration, and under ThreadSanitizer every access on that data path is instrumented: the sanitizer stage ran ucx_backend_test for ~38 minutes with steady output and was killed at the 40 minute cap mid-run, in the last of its four configurations (build ai-dynamo#649, and ai-dynamo#632 before it). Drop the descriptor count to 8. The configuration matrix (progress thread on/off x handler reuse on/off) is unchanged, so every code path is still exercised, and 8 descriptors still cover the multi-descriptor list handling. The descriptor size stays at 1 MB so transfers remain in the same UCX protocol regime. Reducing the volume rather than dropping configurations keeps sanitizer coverage intact: TSan reports races from happens-before analysis on the accesses it observes, so it flags a race on a given code path regardless of how many times that path repeats. Signed-off-by: NirWolfer <nwolfer@nvidia.com>
|
👋 Hi NirWolfer! Thank you for contributing to ai-dynamo/nixl. Your PR reviewers will review your contribution then trigger the CI to test your changes. 🚀 |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Enterprise Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughThis PR changes two UCX unit tests. Both tests now create 8 transfer descriptors instead of 64. ChangesUCX transfer test updates
Estimated code review effort: 1 (Trivial) | ~2 minutes Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
/build |
|
Should this perhaps have different values for normal and sanitizer runs? |
|
🤖 CI Triage Agent — TL;DR: The Full analysisSummary: Jenkins job Root cause: Container-runtime / cluster infrastructure failure, not a test or source-code bug. When Jenkins tried to run Implicated commit: none — the failure is unrelated to commit 17cae61 / PR #2042; it is an environment/node issue on the SLURM compute node running job 75300. File: Not a source file. Failure surfaces at the CI orchestration layer invoking Suggested fix: Retry the build — this is a transient infrastructure fault. If it recurs, have infra check the health of the compute node backing SLURM job 75300 (containerd daemon running, Related: none found. |
|
🤖 CI Triage Agent — TL;DR: Both the "Run vLLM sanity" and "Run SGLang sanity" stages were killed by the ~40-minute wall-clock limit (exit 143), but the real cause is a hang inside the pyxis/enroot container image import on the SLURM GPU node — the test script never ran a single line. This is an infra/registry stall, not a code bug, so the fix is to retry the build and investigate node/registry health, not to raise the timeout. Full analysisSummary: The vLLM (stage 585, jobid 1755685) and SGLang (stage 561, jobid 1755684) sanity stages hung and were SIGTERM'd after ~2.4M ms. Root cause: In both stages the last log line is Implicated commit: None in application code — this is an infrastructure hang. (The most recent CI change, File: Not a source-file defect; failure is external to the repo at the pyxis import step invoked from Suggested fix: Retrigger the build; this is almost certainly a transient pyxis/enroot image-import stall. To make it self-healing, wrap the Related: #2007 (recent sanity-allocation change, NirWolfer), #1995 (SGLang router port fix) — none causal. No matching pyxis-hang issue found. |
Summary
The TSan leg of
nixl-ci-test-sanitizerswas being killed at its 40 minute cap whileucx_backend_testwas still making steady progress.In build #649 the stage started at 10:08:23 and was killed at 10:48:22 — exactly 40:00.
ucx_backend_testran from 10:10:16 to the kill (~38 min), printing data-verification output every 8-12s with a largest gap of ~15s, and was cut off mid-WRITE in the last of its four configurations. Not a hang, and not a sanitizer finding — it simply does not fit. Build #632 hit the same wall.Each configuration moves and verifies
desc_cnt * desc_sizebytes. At 64 descriptors of 1 MB that is 64 MB per configuration, and under ThreadSanitizer every access on that data path is instrumented.Changes
test/unit/plugins/ucx/ucx_backend_test.cpp— dropdesc_cntfrom 64 to 8 intest_intra_agent_transferandtest_inter_agent_transferWhy this does not reduce coverage
populateDescsand the descriptor-list transfer paths.desc_sizedeliberately stays at 1 MB, so transfers remain in the same UCX protocol regime — shrinking the payload instead could cross the eager/rendezvous threshold and silently change which transport path is tested.Net effect is ~8x less data per configuration, which brings the stage well inside its budget without touching the timeout.
Verification
Confirmation is a green
nixl-ci-test-sanitizersrun with the tsan leg completing inside 40 minutes. The asan_ubsan leg was already passing and is unaffected in kind, just faster.Summary by CodeRabbit