Repository navigation
Conversation
|
🤖 Starting review — findings will be posted here when done. |
|
Test coverage note (not a blocker): |
620fcc6 to
8de52ef
Compare
|
🤖 Starting review — findings will be posted here when done. |
8de52ef to
9efafc8
Compare
|
🤖 Starting review — findings will be posted here when done. |
|
Non-blocking note: the CI change swaps |
|
🤖 CI Triage Agent — TL;DR: The Full analysisSummary: Root cause: The only failure in the log is a static struct-size assertion, not a runtime/hang issue: This PR's own commit on /* Map of system devices that require a flush operation */
ucp_sys_dev_map_t flush_sys_dev_map; /* uint64_t */
/* Flags from ucp_ep_ext_flags */
uint8_t flags; /* <-- new, ucp_ep.h:591 */
} ucp_ep_ext_t;Because the field was appended after a This is a deterministic build-config failure, unrelated to the Implicated commit: File: Suggested fix: Preferred — keep ucp_rsc_index_t cm_idx; /* CM index */
/* Flags from ucp_ep_ext_flags */
uint8_t flags;
ucs_ptr_map_key_t local_ep_id;and delete the trailing If the 8-byte growth is intentional/unavoidable, instead update Related: PR #11870 (#11870) — the PR under test; no pre-existing issue found for this assertion. |
9efafc8 to
54ab824
Compare
|
🤖 Starting review — findings will be posted here when done. |
54ab824 to
c99fcce
Compare
|
🤖 Starting review — findings will be posted here when done. |
|
Masked map-failure in uct_cuda_ipc_is_peer_accessible: on the bound_lifetime && *accessible == UCS_YES re-map path, a failed uct_cuda_ipc_map_memhandle is not reflected in the return status (*accessible stays UCS_YES, function returns UCS_OK with mapped_addr == NULL). This is the main residual correctness risk and is not exercised by the happy-path MPI test.
CI env-var swap (UCX_MEMTYPE_CACHE=n -> UCX_GDR_COPY_RCACHE=n -x UCX_RCACHE_ENABLE=n): confirm the memtype cache no longer needs disabling.
Residual test/coverage gap: the failure path of the new bound-lifetime re-map (and thus the masked-status concern) has no test coverage; only the happy path is exercised. |
|
🤖 Starting review — findings will be posted here when done. |
|
Masked map-failure in uct_cuda_ipc_is_peer_accessible: on the bound_lifetime && *accessible == UCS_YES re-map path, a failed uct_cuda_ipc_map_memhandle is not reflected in the return status — *accessible stays UCS_YES and the function returns UCS_OK with mapped_addr == NULL. The status assignment is now guarded by
CI env-var swap: confirmation that the memtype cache no longer needs disabling.
Test coverage gap: only the happy path exercises the new bound-lifetime re-map; the failure path (and thus the masked-status concern) is untested. |
|
🤖 CI Triage Agent — TL;DR: The Coverity gate failed with one new FORWARD_NULL defect: Full analysisSummary: Root cause: In Implicated commit: [REDACTED:Hex High Entropy String] — Raul Akhmetshin, "UCT/API/V2: mem_elem_release supports rkey lifetime flag." (touches both File: src/uct/cuda/cuda_ipc/cuda_ipc_md.c:826 (defect reported at src/ucp/core/ucp_device.c:257) Suggested fix: Make
Option 1 is preferable since Related: PR #11870 (this change); prior commits in the same series: d466e65 "UCT/API/V2: Rkey resource lifetime.", a47066b (#11730) "UCT/CUDA/CUDA_IPC: Unmap memory handle at ucp_device_mem_list_release."
|
9f215c1 to
3b1bfab
Compare
|
🤖 Starting review — findings will be posted here when done. |
|
Masked map-failure in uct_cuda_ipc_is_peer_accessible: on the
CI env-var swap: confirm the memtype cache no longer needs disabling now that UCX_MEMTYPE_CACHE=n is replaced by -x UCX_TLS=^gdr_copy -x UCX_RCACHE_ENABLE=n.
Test-coverage gap: only the happy path of the bound-lifetime re-map is exercised; the failure path (and thus the masked-status concern) is untested. |
3b1bfab to
6935920
Compare
|
🤖 Starting review — findings will be posted here when done. |
|
🤖 CI Triage Agent — TL;DR: The Full analysisSummary: Root cause: Evidence from the log:
65534 B is the first size above the AM rendezvous threshold, i.e. the first case that exercises rkey pack/unpack + rndv GET-zcopy — exactly the code this branch changes. The branch only touches Implicated commit: 15c130f "UCP/API: Endpoint parameter controlling rkey resources." — Raul Akhmetshin (branch head 6935920 "UCT/API/V2: mem_elem_release supports rkey lifetime flag.") File: src/ucp/core/ucp_rkey.c:986-1037 (skip_md_map branch at 1006-1014; Suggested fix:
Related: PR #11870 (this branch, "UCP/API: Endpoint parameter controlling remote key resources"); no existing issue matches this hang. |
| * this endpoint have their lifetime bound to the remote key, and are | ||
| * released once it is destroyed (see @ref ucp_rkey_destroy). | ||
| */ | ||
| UCP_EP_PARAMS_FLAGS_RKEY_BOUND_LIFETIME = UCS_BIT(3) |
There was a problem hiding this comment.
AFAIU it is not bound to the rkey. We release it when cache refcount is zero not necessarily when we destroy the rkey.
Maybe we need to change the description and the naming.
| uct_cuda_ipc_unmap_memhandle(handle->pid, handle->pid_ns, handle->d_bptr, | ||
| handle->mapped_addr, handle->cu_dev, | ||
| uct_cuda_ipc_component.enable_remote_cache); | ||
| handle->cache_enabled); |
There was a problem hiding this comment.
lets use uct_cuda_ipc_component.enable_remote_cache here.
|
|
||
| unpack_params.field_mask = UCT_RKEY_UNPACK_FIELD_SYS_DEVICE; | ||
| unpack_params.sys_device = sys_dev; | ||
| if (ep->ext->flags & UCP_EP_EXT_FLAG_RKEY_BOUND_LIFETIME) { |
There was a problem hiding this comment.
The more I think about it the more I think we should introduce ucp_ep_unpack_v2 func...
What?
Added a new UCP endpoint creation parameter. This parameter allows to manage the lifetime of resources used to work with a UCP remote key.
Added a new UCT remote key unpacking parameter. This parameter allows to manage the lifetime of resources used to work with the remote key.
Why?
This is another attempt to solve the problem of unclosed interprocessor memory descriptors that prevent the memory from being released by the remote side.
#11335
#11288
#11730
At the moment the only way to close the handles is to disable UCT CUDA IPC remote cache. So behavior can only be controlled at the level of the whole process. The new parameters adds the possibility of more detailed control over the lifetime of objects.