mirror of
https://github.com/deepseek-ai/DeepEP.git
synced 2026-11-05 00:47:32 +00:00
[GH-ISSUE #793] [Question & bug]Two findings on the V2.5 scale-out tail-signal path: window ordering (question) and scale-out tail counter stride may collapses the NIC's atomic rate (bug) #424
Labels
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
deepseek-ai/DeepEP#424
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @Difers on GitHub (Oct 23, 2026).
Original GitHub issue: https://github.com/deepseek-ai/DeepEP/issues/793
First of all, thank you for DeepEP. The V2.5 hybrid dispatch design is impressive work.
We have been benchmarking V2.5 (
93eb6eb) on a 2-node × 8-GPU cluster, with one dedicated 400 Gb/s ConnectX-8 per GPU (802.3ad LAG, RoCE v2) and the NCCL 2.32.3 GDAKI backend, and we ran into two issues on the scale-out tail-signal path.Part 1 (question): is NCCL_WIN_DEFAULT safe when the NIC keeps PCI_ATOMIC_MODE=0?
README.md(PCI atomic mode) recommendsmlxconfig set PCI_ATOMIC_MODE=4for RDMA atomicperformance.
csrc/kernels/comm/context.cpp:199registers the main symmetric window unconditionally withNCCL_WIN_STRICT_ORDERING, i.e. PCIe relaxed ordering is disabled on that MR.Our understanding of why 2 is needed, based on https://github.com/deepseek-ai/DeepEP/issues/661: the scale-out tail signal is an
RDMA atomic on a VA inside the same window as the data. With
PCI_ATOMIC_MODE=4the NIC issues anative PCIe AtomicOp (NPR-with-data), and PCIe ordering rule C2b permits an NPR-with-data to pass
prior posted writes. Under relaxed ordering the tail increment could therefore become visible
before the token payload has landed, which breaks the data-before-signal guarantee that
red_add_relrelies on. WithPCI_ATOMIC_MODE=0the NIC performs a PCI read-modify-writeinstead, and a Read may not pass prior posted writes even under relaxed ordering, so the same
hazard does not arise.
Does that mean strong ordering is required because of the recommended atomic mode, and that a
deployment which leaves
PCI_ATOMIC_MODEat 0 can use relaxed ordering safely?We ask because our cluster is probably in that regime: the NICs are presumably at the default PCI_ATOMIC_MODE=0, yet the window is strictly ordered, and dispatch is limited to 12 GB/s at 32 SMs.
Part 2 (possible bug):scale-out tail counter stride (8 KiB) collapses the NIC's atomic rate.
EPSignals::scaleout_channel_signaled_tailis dimensioned with the compile-time maximum rank count, so consecutive channels' tails are 8192 B apart. That stride reaches the wire unchanged — red_add_rel computes ptr - lsa_base_ptr, ncclGin_VASignalAdd carries it as a window offset, and GDAKI places it directly into the raddr of an ATOMIC_FA WQE. We observed that this appears to reduce the responder NIC's sustained atomic rate.To isolate the effect of this stride, we built a small standalone reproducer that does not depend on DeepEP, NCCL, or a GPU: 32 RC QPs, each issuing 8 B IBV_WR_ATOMIC_FETCH_AND_ADD on its own counter in host memory. The only variable is the per-QP counter stride. Atomics are posted in chains of 8 with only the last one signalled, since signalling every WR makes the requester's CPU the bottleneck and masks the effect.
The results show a cliff between 1024 B and 4096 B,All rates in Mops (10^6 atomic ops/s). :
atomic_stride_repro.c