Repository navigation
[RDMA] Keep EQDS reported and spendable credits consistent - #1108
Merged
zhongjiechen merged 2 commits intoNov 3, 2026
Merged
Conversation
LiRunGuo
requested review from
MaoZiming,
YangZhou1997 and
zhongjiechen
as code owners
October 29, 2026 06:28
YangZhou1997
approved these changes
Nov 1, 2026
Member
zhongjiechen
approved these changes
Nov 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Fixes #1092.
EQDS reported speculative credit after speculation had stopped, even though the sender could no longer spend it. It also accepted a chunk larger than the available pull credit without charging the remainder. The pull-target computation subtracted the same unusable credit and tried to compensate by draining it over subsequent calls.
Add credit-accounting and native transport regression tests, with running instructions. The default CCA configuration is unchanged; EQDS remains opt-in.
Type of Change
How Has This Been Tested?
Compared upstream
54e216eeagainst the fix on Linux x86-64, GCC 13.3, CUDA 12.8 headers, and an active mlx5 InfiniBand port on an NVIDIA B200 node.Credit and pull-target checks
eqds_credit_testexecutes 30,784 boundary/seeded credit-spend cases, 512 grant/drain cycles including pull-number wraparound and duplicate grants, and productioncompute_pull_target()transitions before/after speculation stops. It checks exact byte conservation, admission decisions, unchanged counters on rejection, and stable demand under repeated computation.eqds.cc/param.cc.Native data-integrity checks
eqds_transfer_testforks before transport/CUDA initialization, connects two local peers through the actual UCCL transport, and checks every received byte at 1 B, 1 KiB, 64 KiB, 1 MiB, and 32 MiB. Each peer has a timeout.Enabled
kReceiverCCA = RECEIVER_CCA_EQDSin both test trees, retaining default Timely sender CCA. UsedUCCL_IB_HCA=mlx5_0:1, one engine, default 32-QP entropy, and UC mode. Both baseline and fix pass this sequence; this is a compatibility check rather than a reproduction of the issue's reported AllReduce stall. Repeated the final fixed binary three times: all 15 transfers passed byte-for-byte.An exploratory EQDS-only configuration (sender CCA disabled, 4 QPs) failed at 32 MiB in both baseline and fix with
ibv_post_sendfailure. That configuration remains unresolved; this PR does not claim to fix every EQDS progress failure.Builds and formatting
Built all transport objects, both new tests, and
libnccl-net-uccl.sowith default CCA and with EQDS enabled. Used the repository's pinned NCCL headers (2ea4ee94) and the existing native Makefiles. This host lacks unused gflags/gtest libraries, so usedLIBS="-lz -lelf -libverbs -L/usr/local/cuda-12.8/lib64 -lcudart -lpthread"andLIBS_SHARED="-lz -lelf -libverbs".Changed C++ files pass clang-format 14.0.6;
git diff --checkpasses. ROCm, RoCE, GPU-buffer data transfers, cross-node collectives, and throughput comparisons were not tested. No bandwidth or latency improvement is claimed.Checklist
format.shto follow the style guidelines. (Ran clang-format 14 directly on changed files.)build.shto verify compilation. (Used native Makefile builds above.)