Skip to content

Add RDMA and URMA runtime recovery and TCP fallback - #92

Draft
Spicy-cream wants to merge 8 commits into
masterfrom
feature/rdma-runtime-recovery
Draft

Spicy-cream wants to merge 8 commits into
masterfrom
feature/rdma-runtime-recovery

Conversation

@Spicy-cream

@Spicy-cream Spicy-cream commented Oct 26, 2026 •

Copy link
Copy Markdown

RDMA 和 URMA 运行期故障后,后续连接可能反复尝试同一路径。本 PR 增加 LEGACY、AUTO、TCP_ONLY 恢复模式。默认 LEGACY;AUTO 按 RDMA 端口和对端状态、URMA 对端状态控制新连接,冷却期间选择 TCP,默认冷却 5 秒。两种传输分别维护模式、epoch、冷却缓存和指标,模式切换过滤旧连接错误。

统一完成错误、QP/CQ 异步错误、CQ/JFC 轮询及通知错误和 WR 提交失败的上报。同一连接只记录首个故障,访问错误单独计数,flush 不重复归因,窗口耗尽保持 EAGAIN。RDMA QP/CQ 校验资源归属,故障资源直接释放;URMA 支持 v2/v3 服务端协商降级。ACK 提交失败向连接错误处理传播。

新增恢复状态 API、协商与 TCP 准入指标,以及支持运行中切换模式和 CSV 统计的 recovery_client。URMA 诊断记录完成方向、发送槽位、缓冲区地址和注册段范围;发送 SGE 完整初始化并校验范围与 context。新增默认关闭的 urma_copy_send,将主机数据复制合并到 64 字节对齐的注册缓冲区,并持有至完成,用于对比原发送缓冲区路径。该模式增加一次 CPU 拷贝。

本地生产静态库、恢复客户端和 URMA 性能示例构建通过。策略 8 项、RDMA mock 97 项已通过;本次 URMA 单测 25 项和复制发送 RPC 测试 2 项通过,覆盖地址边界、context、对齐复制、所有权、失败时保留源数据,以及 v2/v3 下跨多个 WR 的 20 KB 消息和附件回显。URMA 单独启用时 endpoint 和 helper 通过 C++14 编译。附双机故障注入和发送访问错误对照说明。

模式切换作用于新连接;存量连接退休、单连接探测、发送 watchdog 和多端口主备为后续迭代。

URMA 双机实测使用 udmac0d1e2 和 udmac0d1e3。两端内核均为 6.6.0-159.4.2.153.20260624.9e7b708a0357.oe2403sp4.aarch64,UMDK 均为 26.06.0-B020,libummu 均为 1.0.5。brpc 已完成 URMA 协商,服务端数据 SEND 报 status 4(本地内存访问错误);描述符修正、单 SGE 和 64 字节对齐复制发送下均可复现。

UMDK 原生 send_lat 使用 RM、CTP、共享 JFR、64 字节消息、1000 次交换,在非 inline(-I 0)和 inline(-I 64)两组测试中,服务端均报 Failed CR status, id:0, status:4,客户端等待至手动结束。故障已在 brpc 之外复现;原生日志未标明失败完成的收发方向。下一步交换原生测试角色,定位设备、通信方向及底层运行环境。URMA 恢复与 TCP 回落的实机验证尚未完成。

@Spicy-cream Spicy-cream changed the title Design RDMA runtime recovery and controlled TCP fallback Add initial RDMA runtime recovery and TCP fallback Oct 26, 2026
@Spicy-cream Spicy-cream changed the title Add initial RDMA runtime recovery and TCP fallback Add RDMA and URMA runtime recovery and TCP fallback Oct 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant