UCX AM客户端连接localhost报错“Destination is unreachable”求助
我正在学习UCX,为客户端和服务器编写基础封装,采用AM(Active Messages)通信机制。运行客户端时出现以下错误:
[1749297901.816001] [prateek:19822:0] wireup_cm.c:128 UCX DIAG client ep 0x74059a9e0000 failed to connect to 127.0.0.1:9090 using tcp cms [1749297901.816007] [prateek:19822:0] ucp_ep.c:1474 UCX DEBUG ep 0x74059a9e0000: set_ep_failed status Destination is unreachable on lane[0]=0x63dfe0a06680 [1749297901.816011] [prateek:19822:0] ucp_ep.c:1437 UCX DEBUG ep 0x74059a9e0000: discarding lanes [1749297901.816016] [prateek:19822:0] ucp_ep.c:1445 UCX DEBUG ep 0x74059a9e0000: discard uct_ep[0]=0x63dfe0a06680 [1749297901.816021] [prateek:19822:0] proto_common.c:824 UCX DEBUG abort request 0x63dfe0a11500 proto reconfig status Destination is unreachable [1749297901.816029] [prateek:19822:0] wireup_ep.c:440 UCX DEBUG ep 0x74059a9e0000: destroy wireup ep 0x63dfe0a06680 [1749297901.816036] [prateek:19822:0] ucp_ep.c:3505 UCX DEBUG ep 0x74059a9e0000: calling user error callback 0x63dfba0f0cde with arg 0x7fff7e44b3f0 and status Destination is unreachable FILE: /home/prateek/Workspace/UCX/src/client/client.cc FUNCTION : ErrorHandlingCb LINE : 65 message: Error handling callback invoked with status: Destination is unreachable
我的代码与openucx仓库中的客户端-服务器示例结构一致,已通过netstat确认服务器正在监听127.0.0.1:9090端口,完整客户端日志包含初始化、端点创建及连接请求的详细流程,完整服务器日志显示监听初始化完成且无启动错误。
可能的问题及排查方向
传输层配置不匹配:客户端与服务器的UCX上下文配置(
ucp_context_param_t)中,传输协议选项(如TCP、IB等)不一致。比如服务器仅启用RDMA传输,而客户端尝试用TCP连接,导致无法建立通信链路。需检查双方配置的传输层优先级或接口参数,确保兼容。地址绑定/连接参数差异:虽然
netstat显示服务器监听127.0.0.1,但可能服务器实际绑定的是0.0.0.0(所有网卡),而客户端连接时的地址解析存在歧义;或者服务器用主机名绑定,客户端用IP连接导致解析不匹配。需确认服务器端ucp_listen_addr_t的绑定地址与客户端连接地址完全一致。AM回调注册时机错误:AM通信要求服务器在监听前完成接收回调的注册(
ucp_worker_am_recv_handler_register)。如果服务器在客户端发起连接后才注册回调,会导致连接后无法处理AM消息,触发连接失败。检查服务器代码中回调注册的时机,确保在ucp_listen之前完成。UCX版本兼容性:若代码基于的示例与当前使用的UCX版本存在API差异(如端点创建、连接流程的参数变化),也可能导致连接失败。对比当前UCX版本的官方文档与示例代码,确认API调用的一致性。
内容的提问来源于stack exchange,提问作者Prateek Joshi

