Skip to content
Merged
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
7e53a1f
UCT/CUDA/COPY: Qualify cuda_copy for RNDV with peer-failure EH
pentschev Apr 1, 2026
b020c4f
UCT/CUDA/COPY: Revert qualify cuda_copy for RNDV with peer-failure EH
pentschev Apr 9, 2026
a02e613
UCP/WIREUP: Relax peer-failure criteria for same-worker endpoints
pentschev Apr 9, 2026
5b6552d
UCP/WIREUP: Centralize self peer-failure handling
pentschev Aug 17, 2026
29e6fb6
UCP/EP: Fix self recovery auxiliary transport selection
pentschev Aug 17, 2026
c64e5c8
UCP/WIREUP: Preserve failover requirements for self endpoints
pentschev Aug 17, 2026
7650e78
UCP/TEST: Allow optional self RMA invalidation
pentschev Aug 17, 2026
7c04647
UCP/CORE: Preserve self failover RMA invalidation
pentschev Aug 20, 2026
6e39794
Merge remote-tracking branch 'upstream/master' into intra-process-cud…
pentschev Aug 25, 2026
f1f8121
UCP/CORE: Clarify failover self handling
pentschev Sep 2, 2026
fe8d447
UCP/TEST: Restore invalidation assertion
pentschev Sep 2, 2026
c040464
UCP/TEST: Use unsigned expected flag value
pentschev Sep 2, 2026
2b51f27
Merge remote-tracking branch 'upstream/master' into intra-process-cud…
pentschev Sep 2, 2026
4db34a7
UCP/TEST: Allow optional self RMA invalidation
pentschev Sep 2, 2026
f73b217
UCP/WIREUP: Simplify self peer-failure selection
pentschev Sep 3, 2026
6b34770
Merge remote-tracking branch 'upstream/master' into intra-process-cud…
pentschev Sep 3, 2026
5ea2356
UCP/CORE: Remove stale failover comment
pentschev Sep 16, 2026
ef3eef8
Merge remote-tracking branch 'upstream/master' into intra-process-cud…
pentschev Sep 16, 2026
5eda833
UCP/WIREUP: Restore header formatting
pentschev Sep 16, 2026
9b4825f
UCP/CORE: Remove unreachable self recovery handling
pentschev Sep 16, 2026
f9e0c0f
UCP/TEST: Strengthen self peer wireup coverage
pentschev Sep 16, 2026
5f041ec
UCP/WIREUP: Clarify same-worker peer handling
pentschev Sep 16, 2026
00e37ec
UCP/CORE: Preserve invalidation on capable self lanes
pentschev Sep 28, 2026
13b658e
UCP/TEST: Handle self endpoints without AM lanes
pentschev Sep 28, 2026
85bf24e
UCP/TEST: Group peer wireup tests
pentschev Sep 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/ucp/core/ucp_request.c
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,13 @@ static ucp_md_map_t ucp_request_get_invalidation_map(ucp_ep_h ep)
ucp_lane_index_t i;
ucp_md_map_t inv_map;

/* Same-worker PEER EPs have no independent remote worker to access the
Comment thread
rakhmets marked this conversation as resolved.
Resolved
* request buffer after an error, so RMA invalidation is not needed. */
if ((key->flags & UCP_EP_CONFIG_KEY_FLAG_SELF) &&
(key->err_mode == UCP_ERR_HANDLING_MODE_PEER)) {
Comment thread
rakhmets marked this conversation as resolved.
Resolved
return 0;
}
Comment thread
rakhmets marked this conversation as resolved.
Resolved

for (i = 0, inv_map = 0;
(key->rma_bw_lanes[i] != UCP_NULL_LANE) && (i < UCP_MAX_LANES); i++) {
lane = key->rma_bw_lanes[i];
Expand Down
10 changes: 9 additions & 1 deletion src/ucp/wireup/wireup.c
Original file line number Diff line number Diff line change
Expand Up @@ -2200,6 +2200,7 @@ ucp_wireup_try_select_lanes(ucp_ep_h ep, unsigned ep_init_flags,
unsigned *addr_indices, ucp_ep_config_key_t *key,
ucp_rsc_index_t *dst_md_storage)
{
unsigned select_ep_init_flags;
ucs_status_t status;

ucp_ep_config_key_reset(key);
Expand All @@ -2208,7 +2209,14 @@ ucp_wireup_try_select_lanes(ucp_ep_h ep, unsigned ep_init_flags,
key->dst_version = remote_address->dst_version;
key->dst_md_cmpts = dst_md_storage;

status = ucp_wireup_select_lanes(ep, ep_init_flags, *tl_bitmap,
select_ep_init_flags = ep_init_flags;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this repeats the address->uuid == worker->uuid check that ucp_wireup_select_lanes() already does to set UCP_EP_CONFIG_KEY_FLAG_SELF, and it only covers the worker-address path; wireup_cm.c:212 calls ucp_wireup_select_lanes() directly and keeps the peer-failure requirement, while the ucp_request.c change already treats such EPs as "no invalidation needed". Can we relax the flag inside ucp_wireup_select_lanes() so the CM path behaves the same?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not moving the relaxation into ucp_wireup_select_lanes(). Its CM caller constructs an intermediate client configuration from a locally packed dummy address before the actual peer address is known, that address has the local UUID by construction. Applying the relaxation there would incorrectly weaken peer-failure requirements for cross-worker CM EPs. The current check is intentionally limited to worker-address selection, where the UUID is the actual peer’s UUID.

if ((key->err_mode == UCP_ERR_HANDLING_MODE_PEER) &&
(remote_address->uuid == ep->worker->uuid)) {
/* Same-worker PEER EPs do not require peer-failure transports. */
select_ep_init_flags &= ~UCP_EP_INIT_ERR_MODE_PEER_FAILURE;
}

status = ucp_wireup_select_lanes(ep, select_ep_init_flags, *tl_bitmap,
Comment thread
rakhmets marked this conversation as resolved.
Resolved
remote_address, addr_indices, key, 1);
if (status != UCS_OK) {
return status;
Expand Down
1 change: 1 addition & 0 deletions test/gtest/ucp/test_ucp_peer_failure.cc
Original file line number Diff line number Diff line change
Expand Up @@ -513,6 +513,7 @@ class test_ucp_peer_failure_inval : public ucp_test {

void init()
{
create_entity();
Comment thread
rakhmets marked this conversation as resolved.
Resolved
Comment thread
rakhmets marked this conversation as resolved.
Resolved
create_entity();
sender().connect(&receiver(), get_ep_params(), 0);
}
Expand Down
43 changes: 43 additions & 0 deletions test/gtest/ucp/test_ucp_wireup.cc
Original file line number Diff line number Diff line change
Expand Up @@ -961,6 +961,49 @@ class test_ucp_wireup_errh_peer : public test_ucp_wireup_1sided
static void err_cb(void *, ucp_ep_h, ucs_status_t) {}
Comment thread
rakhmets marked this conversation as resolved.
Resolved
};

class test_ucp_wireup_errh_peer_self : public test_ucp_wireup_errh_peer
Comment thread
rakhmets marked this conversation as resolved.
Resolved
{
public:
void init() override {
test_ucp_wireup::init();
}
};

UCS_TEST_P(test_ucp_wireup_errh_peer_self, config)
{
ucp_ep_params_t ep_params = get_ep_params();
ucp_address_t *address;
ucp_ep_h ep;
size_t address_length;
ucs_status_t status;

EXPECT_FALSE(ep_iface_has_caps(sender(), "self",
UCT_IFACE_FLAG_ERRHANDLE_PEER_FAILURE));

status = ucp_worker_get_address(receiver().worker(), &address,
&address_length);
ASSERT_UCS_OK(status);

ep_params.field_mask |= UCP_EP_PARAM_FIELD_REMOTE_ADDRESS;
ep_params.address = address;
{
scoped_log_handler slh(hide_errors_logger);
status = ucp_ep_create(sender().worker(), &ep_params, &ep);
}

ucp_worker_release_address(receiver().worker(), address);
ASSERT_UCS_OK(status);

const ucp_ep_config_key_t &key = ucp_ep_config(ep)->key;
EXPECT_EQ(UCP_ERR_HANDLING_MODE_PEER, key.err_mode);
EXPECT_TRUE(key.flags & UCP_EP_CONFIG_KEY_FLAG_SELF);
EXPECT_STREQ("self", ucp_ep_get_tl_rsc(ep, key.am_lane)->tl_name);
Comment thread
rakhmets marked this conversation as resolved.
Resolved

disconnect(ep);
}

UCP_INSTANTIATE_TEST_CASE_TLS(test_ucp_wireup_errh_peer_self, self, "self")

UCS_TEST_P(test_ucp_wireup_errh_peer, msg_after_ep_create) {
receiver().connect(&sender(), get_ep_params());

Expand Down
Loading