Repository navigation
UCP/PROTO/RNDV: Isolate remote system device namespace - #11685
Conversation
2c8f110 to
99f9f4b
Compare
99f9f4b to
5fa905a
Compare
|
@jeffnvidia can add a gtest? |
|
🤖 CI Triage Agent — Summary: Unable to fetch logs — cannot diagnose without them.
|
|
@gleon99 Added |
|
🤖 CI Triage Agent — TL;DR: The GPU gtest job failed with 2 real test failures — Full analysisSummary: Root cause: The failure is not a timeout or infra issue — the log shows continuous test activity up to the summary, /* The rkey system device belongs to the remote topology namespace ... */
mem_info.sys_dev = UCS_SYS_DEVICE_ID_UNKNOWN;
mem_info.type = init_params->rkey_config_key->mem_type;( That select param drives probing of the peer's protocols, including Implicated commit: File: Suggested fix: Don't drop the device information entirely when isolating the namespace. Either (a) translate the rkey's remote Related: PR #11685 (this change); PR #10075 "UCP/RNDV/PPLN: Advertise error handling capability for put_mtype/ppln protocols" (origin of |
|
Follow-up on the GPU CI failures: pushed The regression came from mtype lane modeling using the remote lookup’s On the exact failed CI merge, both affected pipeline-abort tests and the namespace test passed (9/9). The trace confirms the staging GPU ordinal is now used. Fresh Azure CI is pending. |
|
🤖 CI Triage Agent — TL;DR: The Full analysisSummary: Root cause: Deadlock caused by a test-harness bug, not by the PR's code. Log timeline proves a hang, not slowness:
That is a ~9m54s gap with zero output — the entire remaining runtime. The stack trace names the culprit precisely: Mechanism, from
This is a latent flake dating to the test's introduction, not a regression from this PR. The earlier passing tests ( Implicated commit: File: Suggested fix: Retry on go func() {
defer close(eventsChan) // guarantees line 74 never blocks forever
...
var nevents int
for {
nevents, err = syscall.EpollWait(epfdLocal, events[:], -1)
if err != syscall.EINTR { // retry across preemption signals
break
}
}
if err != nil {
t.Errorf("Failed to call epoll_wait %v", err) // Errorf, not Fatalf
return
}
eventsChan <- nevents
}()Two independent hardening points: (1) Related: none found — no existing issue/PR matches this signature; worth filing one to track the flake. |
|
🤖 Starting review — findings will be posted here when done. |
|
🤖 Starting review — findings will be posted here when done. |
|
Coverage note (not a request): the new |
@jeffnvidia Why is the local staging fragment’s device always used for GET/PUT mtype lane probing instead of doing it only when the |
|
@guy-ealey-morag The fragment device is used unconditionally because it describes the buffer touched by the network operation, whereas the original For GET mtype, Limiting the override to |
Okay I understand. |
|
🤖 Starting review — findings will be posted here when done. |
|
🤖 Starting review — findings will be posted here when done. |
|
🤖 Starting review — findings will be posted here when done. |
|
minor: pls skip instead of asserting here (on the |
tvegas1
left a comment
There was a problem hiding this comment.
confirmed tests fail proto without change
What?
Fix UCP rendezvous protocol selection for Direct NIC when system-device IDs
belong to different topology namespaces. Model GET/PUT mtype network lanes
using the staging fragment device.
Why?
Direct NIC RNDV can fail in
find_lanes: while estimating the protocol thepeer will select, UCX interprets a peer-local
sys_devfrom the rkey in thelocal topology and can reject a valid lane. This remote-namespace correction
applies to both mtype and non-mtype protocols. For mtype GET/PUT, network I/O
accesses the staging fragment (for example, a host bounce buffer for CUDA),
but protocol selection still needs the user buffer
sys_devfor lanespreading.
How?
Never interpret the rkey's peer-local
sys_devin the local topology. Fornested remote estimation, use the local
select_param.sys_devas anamespace-safe topology proxy when the local and remote memory types match;
otherwise use
UCS_SYS_DEVICE_ID_UNKNOWN. For mtype probes, keep theuser/final device in
select_param.sys_devand pass the staging fragmentthrough
reg_mem_info. The common minimum-fragment filter validatestransport reachability once against
reg_mem_info: forSEND_ZCOPYthisdescribes the selected user buffer, while RNDV mtype protocols supply their
staging fragment.
Keep the existing GPU peer-failure pipeline test deterministic by using a host
staging fragment; it still exercises CUDA user memory through
rndv/put/mtypeand retains the original failure assertions. Regressiontests independently cover remote namespace isolation and the user/fragment
device roles.