Repository navigation
Conversation
Allow internal callers to flush a selected set of endpoint lanes while preserving the existing all-lane flush behavior. Track lane replacement generations so an in-flight flush safely reconciles failover topology changes. Overlay the new lane-selection snapshot with the later memory-flush phase, keeping ucp_request_t at its existing release size. Signed-off-by: Nathan Bellalou <nbellalou@nvidia.com>
Add an epoch-ordered per-endpoint queue and progress callback that can advance a fence with a selective remote flush before retrying blocked work. Track the in-flight flush explicitly and purge queued requests on terminal errors. Overlay the new fence metadata with the existing RMA and atomic request storage through an anonymous union. This preserves the established send.rma and send.amo field names and limits the request size increase to eight bytes. Signed-off-by: Nathan Bellalou <nbellalou@nvidia.com>
Track lane replacements that affect pre-fence work and conservatively normalize the fence lane mask before flushing. Keep queued fence requests across endpoint reconfiguration and restart protocol requests on the current endpoint configuration. Signed-off-by: Nathan Bellalou <nbellalou@nvidia.com>
Gate RMA and atomic request admission on the endpoint fence epoch without progressing UCT recursively. Queue blocked requests on the endpoint, make endpoint and worker flush wait for relevant fence work, and cover fresh requests that defer before selecting a transport lane. Signed-off-by: Nathan Bellalou <nbellalou@nvidia.com>
|
🤖 Starting review — findings will be posted here when done. |
| #define ucp_trace_req(_sreq, _message, ...) \ | ||
| ucs_trace_req("req %p: " _message, (_sreq), ## __VA_ARGS__) | ||
|
|
||
| #define UCP_STATUS_FENCE_DEFER ((ucs_status_t)(UCS_ERR_LAST + 1)) |
There was a problem hiding this comment.
The new UCP_STATUS_FENCE_DEFER static assertion open-codes a #ifdef __cplusplus / static_assert / _Static_assert split. The project already provides UCS_STATIC_ASSERT(_cond) (in ucs/sys/compiler_def.h) which compiles in both C and C++. Suggested: use UCS_STATIC_ASSERT((UCP_STATUS_FENCE_DEFER < UCS_OK) && (UCP_STATUS_FENCE_DEFER >= UCS_ERR_LAST)).
| #define ucp_trace_req(_sreq, _message, ...) \ | ||
| ucs_trace_req("req %p: " _message, (_sreq), ## __VA_ARGS__) | ||
|
|
||
| #define UCP_STATUS_FENCE_DEFER ((ucs_status_t)(UCS_ERR_LAST + 1)) |
There was a problem hiding this comment.
UCP_STATUS_FENCE_DEFER = -99, a value in the reserved negative ucs_status_t range that satisfies UCS_STATUS_IS_ERR(). It flows out of proto-progress functions into ucp_request_try_send. This works today only because every generic error path either special-cases it first or is unreachable for these requests. Consider adding a short comment at the definition documenting that any generic UCS_STATUS_IS_ERR handler on the RMA/AMO progress path must special-case it, so a future status-range change or new caller does not silently treat a fence-defer as a fatal/abort error.
|
PR exceeds the hard size limit: REVIEW.md sets a hard limit of 500 added lines, but this PR adds well over 1,000 lines. The change also bundles several separable pieces: (1) the amo/rma request-union memory rework, (2) the lane-generation / selective-lane flush machinery, and (3) the deferred fence queue + async strong fence. Please split into reviewable PRs (e.g., the request-union refactor and the selective-flush lane-state helpers can land independently of the fence-queue feature). |
|
🤖 CI Triage Agent — TL;DR: Full analysisSummary: BlueField gtest run crashed (core dumped, Root cause: The backtrace shows the assertion is hit while wireup replays a pending flush request on a blocked EP: Implicated commit: bd6dcbc "UCP/RMA: Activate non-blocking endpoint fences" (Nathan Bellalou) — exposes the bug introduced by acded49 "UCP/FLUSH: Add topology-safe selective endpoint flush" (same author/series) File: src/ucp/rma/flush.c:349 (assertion) and src/ucp/rma/flush.c:151-155 ( Suggested fix: Make
Add a regression variant that triggers Related: PR #11926 (branch |
What
Activate non-blocking endpoint fences for ordinary RMA and atomic requests.
Why
This is Part 4 of 5 of an updated split of the earlier endpoint-fence PR #11199.
Parts 1–3 provide the selective flush, asynchronous lifecycle, and topology safety needed to change the normal request path. This PR is the first one that changes ordinary RMA/atomic behavior: a request that is behind a strong endpoint fence is deferred and resumed asynchronously instead of blocking progress.
How
RMA rendezvous ordering is completed by Part 5.
Draft — merge only after PR #11925 is merged.