[rocshmem] gda/mlx5: skip get_lkey() for inline RMA sends#7294
Closed
thomas-huber wants to merge 1 commit into
Closed
[rocshmem] gda/mlx5: skip get_lkey() for inline RMA sends#7294thomas-huber wants to merge 1 commit into
thomas-huber wants to merge 1 commit into
Conversation
mlx5_post_wqe_rma_single() computed get_lkey(laddr) unconditionally when building the RMA WQE. For inline sends the payload is carried inside the WQE itself, so no local key is required, and get_lkey() calls LOGD_ERROR_ABORT when laddr is not in the symmetric heap or a registered buffer. The default GDA alltoallv path (ROCSHMEM_GDA_ALLTOALLV_WG_ALGO=GET) posts an 8-byte inline control message from a stack-local address, which tripped this abort and surfaced as a GPU HSA_STATUS_ERROR_EXCEPTION (0x1016). Guard the local key as `send_inline ? 0 : get_lkey(laddr)`, matching the wavefront variant mlx5_post_wqe_rma() which already handles inline sends correctly. Reproduces on develop, independent of any consumer (e.g. RCCL).
Contributor
|
I did the same work concurrently in #7304 can you verify its covered, but I did run the alltoallv tester after the refactor. |
3 tasks
Contributor
Contributor
|
Not needed anymore as #7304 merged |
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.
mlx5_post_wqe_rma_single() computed get_lkey(laddr) unconditionally when building the RMA WQE. For inline sends the payload is carried inside the WQE itself, so no local key is required, and get_lkey() calls LOGD_ERROR_ABORT when laddr is not in the symmetric heap or a registered buffer. The default GDA alltoallv path (ROCSHMEM_GDA_ALLTOALLV_WG_ALGO=GET) posts an 8-byte inline control message from a stack-local address, which tripped this abort and surfaced as a GPU HSA_STATUS_ERROR_EXCEPTION (0x1016).
Guard the local key as
send_inline ? 0 : get_lkey(laddr), matching the wavefront variant mlx5_post_wqe_rma() which already handles inline sends correctly. Reproduces on develop, independent of any consumer (e.g. RCCL).Motivation
The GDA/MLX5 backend aborts on any inline RMA send whose local address is not in the symmetric heap or a registered buffer. This makes the default GDA alltoallv (
ROCSHMEM_GDA_ALLTOALLV_WG_ALGO=GET) unusable on Mellanox/CX7 NICs, since that path posts an inline control message from a stack-local variable. The goal is to make inline sends work regardless of where the local buffer lives, since an inline send never dereferences a local key.Technical Details
src/gda/mlx5/queue_pair_mlx5.cpp,QueuePair::mlx5_post_wqe_rma_single(): change the WQE's local key fromget_lkey(laddr)tosend_inline ? 0 : get_lkey(laddr).get_lkey()to validateladdr, which callsLOGD_ERROR_ABORTfor non-registered/non-symmetric addresses.mlx5_post_wqe_rma(), which has guarded the local key withsend_inline ? 0 : get_lkey(laddr)— the single-QP variant was simply missing the same guard.get_lkey(laddr)path is unchanged).JIRA ID
Resolves AICOMRCCL-1081
Test Plan
ROCSHMEM_GDA_ALLTOALLV_WG_ALGO=GET), which posts an inline control message from a stack-local address.rccl-testsalltoall and alltoallv across 2 nodes (16 GPU) and 4 nodes (32 GPU).b=1toe=512M(alltoallv) /e=1G(alltoall).Test Result
HSA_STATUS_ERROR_EXCEPTION(0x1016) on the inline control-message send.Out of bounds values : 0 OK, exit 0, no abort. Non-inline RMA paths unaffected.Submission Checklist